目標:
在配置hadoop分布式安裝過程中,需要配置ssh的無密碼登入。在組建hadoop叢集的時候,需要多台實體機進行通訊(發送或者讀取資料,namenode和datanode之間)就是藉助ssh,在通訊過程中如果需要操作人員頻繁輸入密碼是不切實際的,所以需要ssh的無密碼登入。
環境:
- 主機qiuchenl0,namenode,ubuntu12.04 作業系統,使用者名稱qiuchenl
- 從機qiuchenl1,datanode,fedora14 作業系統,使用者名稱qiuchenl
- JDK1.7
- Hadoop 0.20.205.0
- HBase 0.90.5
配置:
首先請確保防火牆都處於關閉狀態,具體命令是ufs disable。並確保安裝ssh spenssh-server。
在主機qiuchenl0中執行以下命令:
- cd ~/.ssh (進入使用者目錄下的隱藏檔案.ssh)
- ssh-keygen -t rsa (用rsa產生密鑰)
- cp id_rsa.pub authorized_keys (把公開金鑰複製一份,並改名為authorized_keys,這步執行完,應該ssh localhost可以無密碼登入本機了,可能第一次要密碼)
- scp authorized_keysqiuchenl@qiuchenl1:/home/qiuchenl/.ssh (把重新命名後的公開金鑰通過ssh提供的遠程複製檔案複製到從機qiuchenl1上面)
- chmod 600 authorized_keys (更改公開金鑰的許可權,也需要在從機qiuchenl1中執行同樣代碼)
- ssh qiuchenl1 (可以遠程無密碼登入qiuchenl1這台機子了,注意是ssh不是sudo ssh。第一次要求輸入密碼,以後不再要求輸入密碼)
注意:
在安裝分布式hadoop過程中,需要將所有機子的使用者名稱改為一樣,如我的例子:qiuchenl。在linux下,有“主機名稱”和“使用者名稱”之分。“主機名稱”相當與機子的IP,是該機子的唯一標識(可以用命令hostname來查看本機主機名稱),而一個作業系統可以有多個使用者,每個使用者都有使用者名稱,如我的qiuchenl(root也是一個使用者,只不過許可權比較大)。
我們如果要訪問其他主機,都是通過對方的ip來訪問,比如ping 192.168.2.166.既然主機名稱也是標識,為什麼不能ping qiuchenl0呢。因為當前機子步識別這個主機名稱,需要修改/etc/profile檔案如下:
現在就把ip和主機名稱一一對應起來,也就可以ping qiuchenl0了。
下面迴歸正題,ssh遠程登入其他機子,是登入那個機子的某個使用者,所以在上面的第四步 我是把公開金鑰檔案拷貝到qiuchenl1主機下的qiuchenl使用者,所以我只能遠端控制該使用者。再看上面第6步,要登入qiuchenl1的qiuchenl使用者,命令應該是ssh qiuchenl@qiuchenl1,為什麼是ssh qiuchenl1就可以呢。因為ssh qiuchenl1 會預設以當前主機的使用者名稱(也就是qiuchenl0的qiuchenl)來遠程登入。因為qiuchenl0和qiuchenl1兩個機子的使用者名稱都是qiuchenl,所以可以用ssh
qiuchenl1代替 ssh qiuchenl@qiuchenl1.如果qiuchenl1這台主機沒有qiuchenl這個使用者,那麼ssh qiuchenl1就無法使用。
最後:
既然可以用ssh qiuchenl@qiuchenl1 代替ssh qiuchenl1,就沒有必要讓hadoop每台自己的使用者名稱一樣。這樣想是不對的。因為ssh遠程無密碼登入可以用ssh qiuchenl@qiuchenl1。但是hadoop內部是不會這樣智能處理的。所以在配置hadoop叢集時,要把所有機子的使用者名稱設定一樣。