Hadoop安裝部署簡明步驟詳解

本文向大家介紹一下Hadoop安裝部署方面的知識,這是我們在學習Hadoop時必須要掌握的內容,本節主要包括硬件環境,目錄結構和SSH配置等內容,希望通過本文的學習大家能夠掌握Hadoop安裝部署的步驟。

Hadoop安裝部署 

1.硬件環境
共有3臺機器,均使用的FC5系統,Java使用的是jdk1.6.0。IP配置如下:
dbrg-1:202.197.18.72
dbrg-2:202.197.18.73
dbrg-3:202.197.18.74
這裏有一點需要強調的就是,務必要確保每臺機器的主機名和IP地址之間能正確解析。

一個很簡單的測試辦法就是ping一下主機名,比如在dbrg-1上pingdbrg-2,如果能ping通就OK!若不能正確解析,可以修改/etc/hosts文件,如果該臺機器作Namenode用,則需要在hosts文件中加上集羣中所有機器的IP地址及其對應的主機名;如果該臺機器作Datanode用,則只需要在hosts文件中加上本機IP地址和Namenode機器的IP地址。
以本文爲例,dbrg-1中的/etc/hosts文件看起來就應該是這樣的:
127.0.0.0localhostlocalhost
202.197.18.72dbrg-1dbrg-1
202.197.18.73dbrg-2dbrg-2
202.197.18.74dbrg-3dbrg-3
dbrg-2中的/etc/hosts文件看起來就應該是這樣的:
127.0.0.0localhostlocalhost
202.197.18.72dbrg-1dbrg-1
202.197.18.73dbrg-2dbrg-2

在上一篇學習筆記中提到過,對於Hadoop來說,在HDFS看來,節點分爲Namenode和Datanode,其中Namenode只有一個,Datanode可以是很多;在MapReduce看來,節點又分爲Jobtracker和Tasktracker,其中Jobtracker只有一個,Tasktracker可以是很多。
我是將namenode和jobtracker部署在dbrg-1上,dbrg-2,dbrg-3作爲datanode和tasktracker。當然你也可以將namenode,datanode,jobtracker,tasktracker全部部署在一臺機器上

2.目錄結構
由於Hadoop要求所有機器上hadoop安裝部署目錄結構要相同,並且都有一個相同的用戶名的帳戶。
我的三臺機器上是這樣的:都有一個dbrg的帳戶,主目錄是/home/dbrg
Hadoop部署目錄結構如下:/home/dbrg/HadoopInstall,所有的hadoop版本放在這個目錄中。
將hadoop0.12.0壓縮包解壓至HadoopInstall中,爲了方便以後升級,建議建立一個鏈接指向要使用的hadoop版本,不妨設爲hadoop
[dbrg@dbrg-1:HadoopInstall]$ln-shadoop0.12.0hadoop
這樣一來,所有的配置文件都在/hadoop/conf/目錄中,所有執行程序都在/hadoop/bin目錄中。
但是由於上述目錄中hadoop的配置文件和hadoop的安裝目錄是放在一起的,這樣一旦日後升級hadoop版本的時候所有的配置文件都會被覆蓋,因此建議將配置文件與安裝目錄分離,一種比較好的方法就是建立一個存放配置文件的目錄,/home/dbrg/HadoopInstall/hadoop-config/,然後將/hadoop/conf/目錄中的hadoop_site.xml,slaves,hadoop_env.sh三個文件拷貝到hadoop-config/目錄中(這個問題很奇怪,在官網上的GettingStartedWithHadoop中說是只需要拷貝這個三個文件到自己創建的目錄就可以了,但我在實際配置的時候發現還必須把masters這個文件也拷貝到hadoop-conf/目錄中才行,不然啓動Hadoop的時候就會報錯說找不到masters這個文件),並指定環境變量$HADOOP_CONF_DIR指向該目錄。環境變量在/home/dbrg/.bashrc和/etc/profile中設定。
 

綜上所述,爲了方便以後升級版本,我們需要做到配置文件與安裝目錄分離,並通過設定一個指向我們要使用的版本的hadoop的鏈接,這樣可以減少我們對配置文件的維護。在下面的部分,你就會體會到這樣分離以及鏈接的好處了。

3.SSH設置
我們再來看一下Hadoop安裝部署中SSH如何設置。在Hadoop啓動以後,Namenode是通過SSH(SecureShell)來啓動和停止各個節點上的各種守護進程的,這就需要在節點之間執行指令的時候是不需要輸入密碼的方式,故我們需要配置SSH使用無密碼公鑰認證的方式。
首先要保證每臺機器上都裝了SSH服務器,且都正常啓動。實際中我們用的都是OpenSSH,這是SSH協議的一個免費開源實現。FC5中默認安裝的OpenSSH版本是OpenSSH4.3P2。
以本文中的三臺機器爲例,現在dbrg-1是主節點,它需要主動發起SSH連接到dbrg-2和dbrg-3,對於SSH服務來說,dbrg-1就是SSH客戶端,而dbrg-2、dbrg-3則是SSH服務端,因此在dbrg-2,dbrg-3上需要確定sshd服務已經啓動。簡單的說,在dbrg-1上需要生成一個密鑰對,即一個私鑰,一個公鑰。將公鑰拷貝到dbrg-2,dbrg-3上,這樣,比如當dbrg-1向dbrg-2發起ssh連接的時候,dbrg-2上就會生成一個隨機數並用dbrg-1的公鑰對這個隨機數進行加密,併發送給dbrg-1;dbrg-1收到這個加密的數以後用私鑰進行解密,並將解密後的數發送回dbrg-2,dbrg-2確認解密的數無誤後就允許dbrg-1進行連接了。這就完成了一次公鑰認證過程。

對於本文中的三臺機器,首先在dbrg-1上生成密鑰對:
[dbrg@dbrg-1:~]$ssh-keygen-trsa
這個命令將爲dbrg-1上的用戶dbrg生成其密鑰對,詢問其保存路徑時直接回車採用默認路徑,當提示要爲生成的密鑰輸入passphrase的時候,直接回車,也就是將其設定爲空密碼。生成的密鑰對id_rsa,id_rsa.pub,默認存儲在/home/dbrg/.ssh目錄下。然後將id_rsa.pub的內容複製到每個機器(也包括本機)的/home/dbrg/.ssh/authorized_keys文件中,如果機器上已經有authorized_keys這個文件了,就在文件末尾加上id_rsa.pub中的內容,如果沒有authorized_keys這個文件,直接cp或者scp就好了,下面的操作假設各個機器上都沒有authorized_keys文件。

對於dbrg-1
[dbrg@dbrg-1:.ssh]$cpid_rsa.pubauthorized_keys

對於dbrg-2(dbrg-3同dbrg-2的方法)
[dbrg@dbrg-2:~]$mkdir.ssh
[dbrg@dbrg-1:.ssh]$scpauthorized_keysdbrg-2:/home/dbrg/.ssh/
此處的scp就是通過ssh進行遠程copy,此處需要輸入遠程主機的密碼,即dbrg-2機器上dbrg帳戶的密碼,當然,你也可以用其他方法將authorized_keys文件拷貝到其他機器上
[dbrg@dbrg-2:.ssh]$chmod644authorized_keys
這一步非常關鍵,必須保證authorized_keys只對其所有者有讀寫權限,其他人不允許有寫的權限,否則SSH是不會工作的。
[dbrg@dbrg-2:.ssh]ls-la
drwx------2dbrgdbrg.
drwx------3dbrgdbrg..
-rw-r--r--1dbrgdbrgauthorized_keys
注意每個機器上的.ssh目錄的ls-la都應該和上面是一樣的

接着,在三臺機器上都需要對sshd服務進行配置(其實是可以不用配置的,完成了上面的那些操作了以後SSH就已經可以工作了),在三臺機器上修改文件/etc/ssh/sshd_config
#去除密碼認證
PasswordAuthenticationno
AuthorizedKeyFile.ssh/authorized_keys

至此Hadoop安裝部署過程中各個機器上的SSH配置已經完成,可以測試一下了,比如dbrg-1向dbrg-2發起ssh連接
[dbrg@dbrg-1:~]$sshdbrg-2
如果ssh配置好了,就會出現以下提示信息
Theauthenticityofhost[dbrg-2]can'tbeestablished.
Keyfingerprintis10245f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
Areyousureyouwanttocontinueconnecting(yes/no)?
OpenSSH告訴你它不知道這臺主機,但是你不用擔心這個問題,因爲你是第一次登錄這臺主機。鍵入“yes”。這將把這臺主機的“識別標記”加到“~/.ssh/know_hosts”文件中。第二次訪問這臺主機的時候就不會再顯示這條提示信息了。然後你會發現不需要輸入密碼就可以建立ssh連接了,恭喜你,Hadoop安裝部署成功了,不過,別忘了測試本機sshdbrg-1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章