搭建多個節點的hadoop集羣環境(CDH)

提示:如果還不瞭解Hadoop的,可以下查看這篇文章Hadoop生態系統,通過這篇文章,我們可以首先大致瞭解Hadoop及Hadoop的生態系統中的工具的使用場景。

搭建一個分佈式的hadoop集羣環境,下面是詳細步驟,使用cdh5 

一、硬件準備

基本配置:
操作系統 64位
CPU (英特爾)Intel(R) I3處理器
內存 8.00 GB ( 1600 MHz)
硬盤剩餘空間 50G

流暢配置:
操作系統 64位
CPU (英特爾)Intel(R) I5處理器或以上配置
內存 16.00 GB ( 1600 MHz)
硬盤剩餘空間 100G


注意:上面是在單個pc機上搭建集羣,所以對內存要求較高。若是在多臺pc機上搭建集羣環境,則只需要內存足夠即可。


二、軟件環境準備

虛擬機 VMWare
操作系統 CentOS6.5
JDK jdk-7u79-linux-x64.tar.gz 
遠程連接 XShell





hadoop生態系統

hadoop-2.6.0-cdh5.4.5.tar.gz


hbase-1.0.0-cdh5.4.4.tar.gz

hive-1.1.0-cdh5.4.5.tar.gz

flume-ng-1.5.0-cdh5.4.5.tar.gz

sqoop-1.4.5-cdh5.4.5.tar.gz

zookeeper-3.4.5-cdh5.4.5.tar.gz


這篇文章是搭建CDH5集羣環境,以上軟件可以在此網址下載


三、主機規劃

     由於我們要安裝5個節點的集羣環境,所以我們分配好ip地址和主機功能

 

CDHNode1

/192.168.3.188

CDHNode2

/192.168.3.189

CDHNode3

/192.168.3.190

CDHNode4

/192.168.3.191

CDHNode5

/192.168.3.192

namenode

datanode

resourcemanager

journalnode

zookeeper



注意:Journalnode和ZooKeeper保持奇數個,最少不少於 3 個節點。具體原因,以後詳敘。


        我的主機分配情況是在兩臺pc的虛擬機上安裝centos系統,具體分配情況如下:

  CDHNode1 CDHNode2 CDHNode3 CDHNode4 CDHNode4
 PC1      
 PC2    
這樣分配的原因是爲了採用HA時,兩臺namenode在不同pc上,若有一臺pc出現異常,導致一個namenode無法運作,而standy namenode(備用namenode)可以active(激活),而不會影響整個集羣的運作。


三、詳細安裝步驟

               我們首先在1個主機(CHDNode1/192.168.3.188)上安裝centos6.5操作系統,使用root用戶配置網絡,創建hadoop用戶,關閉防火牆,安裝一些必備軟件。爲記下來的集羣軟件安裝做準備。

CentOS6.5安裝

                     在主機CHDNode1/192.168.3.188,安裝CentOS6.5操作系統。詳細安裝步驟可以查看CentOS安裝這篇文章。此處就不再贅敘。

網絡配置

 1.打開安裝好的CentOS虛擬機CDHNode1

  


 2、登錄CentOS系統

         

3.輸入ifconfig命令,先查看ip地址


4、這個時候我們發現除了迴環地址以外,我們並不能和外界通信,比如我們可以使用ping命令進行測試。

注意:ping 127.0.0.1時,結束icmp報文,使用Ctrl+C命令

第一次ping 百度,ping不通,說明虛擬機無法連接外網

第二次ping 虛擬機NAT網關,ping不通

 注:虛擬機網關查看方法


點擊虛擬機網絡編輯器,點擊VMnet8

點擊Nat設置


第三次ping物理機ip地址,ping不通

注:查看物理機IP地址,開啓cmd.exe ,輸入ipconfig



第四次ping虛擬機的迴環地址,ping成功,說明虛擬機的網絡協議是正確的

5、修改網卡的配置文件

可以看到虛擬機網卡沒有開啓,因此修改ONBOOT=yes,然後保存退出(按Esc鍵,然後輸入:wq)

6、重啓網絡服務



7、再次輸入ifconfig命令,查看ip地址。

注意:我的虛擬機設置的是橋接模式,所以ip地址是192.168.2.X網段,或192.168.3.X網段;因爲橋接模式是直接使用物理網卡,而我的物理主機的網關是192.168.0.1,子網掩碼是255.255.252.0,所以我的虛擬機ip地址可以在192.168.0.2-192.168.3.255之間任意選擇(除了物理主機的ip)。若你的虛擬機是使用nat模式,可能就是,如:以我的虛擬機爲例,nat網關是192.168.117.2,子網掩碼爲255.255.255.0,所以虛擬機的ip地址可以在192.168.117.3-192.168.117.255之間任意選擇。


此時網卡已經成功開啓。

8.再次ping步驟4的ip或域名,查看具體情況

檢查本機網絡協議


檢查網卡鏈路


檢查Nat網關


檢查外網

此時虛擬機連接互聯網成功,但使用dhcp(動態主機配置協議)配置ip地址,此時的IP地址時動態生成的,不方便以後hadoop集羣環境的搭建。所以我們還需要配置靜態Ip地址,配置詳情,下面細說。

9、使用ifconfig命令可以查看動態ip地址爲192.168.3.188,所以接下來我們把此ip作爲CDHNode1的靜態ip地址。注:你可以使用你的動態ip作爲你當前主機的靜態ip。然後後面幾臺IP地址可以緊跟着設置成,如192.168.3.189。DHCP生成ip地址是隨機的,你可具體問題具體分析。

10、修改網卡配置信息,把BOOTPROTO=dhcp修改爲BOOTPROTO=static,並且添加上設置的ip地址,子網掩碼,和網關。

注意:由於我是在兩臺pc上配置集羣環境,所以我使用的是橋接模式。若你是在一臺主機上建議你使用Nat(網絡地址轉換)模式。因爲nat模式的網關在不同的電腦上虛擬機VMWare虛擬出來的網段是不同的。不方便使用Xshell連接。

下面是橋接模式的配置,IPADDR是設置ip地址,NETMASK(子網掩碼)與GATEWAY(網關)可以設置成與物理主機一樣的NETMASK(子網掩碼)與GATEWAY(網關)。注:物理主機ip配置具體查看,看上面的步驟4。

下面是Nat模式的配置,IPADDR是設置ip地址,NETMASK(子網掩碼)與GATEWAY(網關)可以設置成與物理主機一樣的NETMASK(子網掩碼)與GATEWAY(網關)。注:Nat模式ip配置具體查看,看上面的步驟4。

上面步驟中我們可以看到Nat模式的網關是192.168.117.2,子網掩碼爲255.255.255.0

所以具體可配置成

BOOTPROTO=static

IPADDR=192.168.117.40

NETMASK=255.255.255.0

GATEWAY=192.168.117.2

最後按Esc,然後:wq保存退出。(注意編輯按i或a即可進入編輯模式,具體操作查看vi命令的使用說明)

11、重啓網絡服務


至此網絡配置完畢。

下載必備軟件

注:1、在CDHNode1節點上安裝,使用yum命令 ,參數-y表示,下載過程中的自動回答yes,有興趣的話,可以試試不加的情況;install表示從網上下載安裝。

         2、使用yum命令安裝軟件必須是root用戶。

1、安裝lrzsz,可以方便在Xshell上,上傳和下載文件,輸入rz命令,可以上傳文件,sz命令可以從遠程主機上下載文件到本地。

 

2、安裝ssh服務器。


3、安裝ssh客戶端。


用戶創建戶

1、使用useradd命令添加用戶hadoop,並同時創建用戶的home目錄,關於useradd的參數使用可以使用 useradd -h查看參數

2、可以切換到/home目錄下查看,是否創建成功


3、爲hadoop用戶創建密碼,這是爲了接下來使用XShell軟件遠程連接CDHNode1節點做準備,出現successfully表示創建密碼成功,注意:密碼創建必須是root用戶

4、可以切換到hadoop用戶,使用 su命令,可以看到,此時root@CDHNode1已經改成hadoop@CDHNode1。

5、從hadoop用戶退出,使用exit命令

克隆虛擬機

由於我們使用VMware創建的Centos虛擬機,所以我們可以直接克隆虛擬機,就減少了安裝的時間,提高效率。

若你是在一臺pc機上配置集羣環境,就可以按照以下步驟連續克隆出四個虛擬機分別是CDHNode2、CDHNode3、CDHNode4、CDHNode5;我是在兩個pc機上配置的所以,我就需要在另一臺pc上重新按照第一臺pc機上安裝CDHNode1一樣,再安裝CDHNode2,然後從CDHNode2克隆CDHNode4、CDHNode5。

下面我以在CDHNode2上克隆出CDHNode5虛擬機爲例,演示以下克隆的步驟。

1、右鍵CDHNode2虛擬機--》快照--》拍攝快照

2、點擊拍攝快照,快照拍攝成功

3、再右鍵CDHNode2虛擬機--》管理--》克隆

4、下一步

5、選擇現有快照--》下一步

6、選擇創建完整克隆--》下一步

7、輸入虛擬機名稱,點擊完成,等待克隆完成。

8、至此我們完成了克隆虛擬機的任務


9、接下來是修改配置虛擬機的網卡信息,下面我們在CDHNode5爲例,其他節點自己按照下面的自行配置。

首先打開CDHNode5,此時顯示的主機名稱爲CDHNode2,因爲CDHNode5是從CDHNode2克隆來的,所以主機名稱還是CDHNode2。

10、暫時不該主機名,我們先查看一下,此時顯示沒有網卡

11、克隆後的網卡變成了eth1,如果想改回eth0,則需要修改配置文件70-persistent-net.rules配置文件



11、我們先設置行號輸入:set number,我們需要修改第8行和第11行,然後輸入i或a進入編輯模式,使用#註釋第8行,並把第10行的eth1改爲eth0,可以記一下第二個網卡的mac硬件地址


12、我們先移除網卡e1000,使用modprobe -r e1000命令

13、重新安裝網卡e000

14、修改網卡配置信息


15、把設備號修改爲DEVICE=eth0,先註釋掉mac地址(硬件地址),在修改ip地址。

16、重啓網絡服務

注意:如果不正確,ip已經被使用,可以重新設置成其他的ip地址,按照以上方式配置。

17、接下來是修改主機名,把CDHNode2改成CDHNode5

18、重啓主機後,就可以看到主機名的變成CDHNode5

19、由於我們註釋了mac地址,所以我們開改成新的mac地址,首先使用ifconfig查看新的mac地址,記住下面地址,

20、進入ifcfg-eth0文件,修改HWaddr,改爲剛纔查看的mac地址



再使用service network restart命令重啓網絡服務。至此配置完畢,最後按Esc,然後:wq保存退出

接下來在其他節點上進行相應的配置。


配置host文件

5個節點上分別配置hosts文件,注意使用root用戶配置


最後按Esc,然後:wq保存退出


關閉防火牆

在所有節點上使用root用戶,關閉防火牆。由於要使用ssh協議來進行主機間的無密碼訪問,所以需要關閉防火牆。

1、首先查看防火牆的狀態,顯示防火牆正在運行


2、然後永久關閉防火牆,使用chkconfig iptables off命令,此時當前虛擬機的防火牆還沒有關閉。只有在關機重啓後才能生效。

3、關閉ipv6的防火牆



4、也可以使用service iptables stop命令,暫時關閉當前主機的防火牆

5、關閉selinux 

將其SELINUX=enforcing設置爲SELINUX=disabled

最後按Esc,然後:wq保存退出

時間同步

當我們每一次啓動集羣時,時間基本上是不同步的,所以需要時間同步。要求所以節點保持一致的時間。

注意:使用root用戶修改,5個節點同時修改

1、我們先使用date命令查看當前系統時間

如果系統時間與當前時間不一致,可以按照如下方式修改

2、查看時區設置是否正確。我們設置的統一時區爲Asia/Shanghai,如果時區設置不正確,可以按照如下步驟把當前時區修改爲上海。

3、下面我們使用ntp(網絡時間協議)同步時間。如果ntp命令不存在,則需要在線安裝ntp

4、安裝ntp後,我們可以使用ntpdate命令進行聯網時間同步。

5、最後我們在使用date命令查看,時間是否同步成功。

注意:橋接模式下,上述同步時鐘的方法行不通。換一下方法,我們使用手動配置時間,在xshell中,全部xshell會話的方式的方式同時更改所有節點。

a、使用date查看時間

b、設置日期,比如設置成2016年5月20日


c、設置時間,比如設置成下午1點48分45秒


d、最後將當前時間和日期寫入BIOS,避免重啓後失效

使用Xshell遠程連接centos系統

由於在centos中複製修改等操作方便,我們使用windows上的一款遠程連接工具Xshell,下面簡單講一下連接步驟。你需要先從網上下載安裝Xshell和Xftp(可以用來可視化的文件傳輸)這兩款工具。

連接步驟如下,以連接CDHNode1爲例。

1、首先點擊新建按鈕,如下;在新建會話屬性對話框中輸入名稱和需要連接的主機ip地址。

2、接下來點擊左側的用戶身份驗證,輸入要登錄主機的用戶名和密碼,點擊確定,此時創建成功。

3、在打開會話對話框中選中剛創建的CDHNode1,然後點擊連接

4、此時連接成功,即可進行遠程操作

5、爲了以後方便打開遠程主機,我們可以把當前連接的主機添加到鏈接欄中,只需點擊添加到鏈接欄按鈕即可添加

6、爲了防止一個命令在多個主機中輸入,我們也可以使用撰寫欄,快速的把一個命令傳送到所以打開的會話框。提示:撰寫欄可以在查看菜單欄中打開。



配置免密碼登錄ssh

接上面的配置,我們已經使用Xshell遠程登錄上五個節點。下面我們就配置免密碼登錄hadoop用戶,如果你使用root用戶登錄的,需要先切換到hadoop用戶,使用 su hadoop命令切換。步驟如下:

1、首先切換到hadoop的家目錄下,使用cd /home/hadoop命令來切換。然後在hadoop家目錄下創建  .ssh目錄。

2、然後生成hadoop用戶的rsa(非對稱加密算法),運行如下命令後,一直回車,即可生成hadoop的公鑰和私鑰


3、切換到 .ssh目錄下,即可看到已經生成的公鑰和私鑰。


4、按照上面的步驟,在所有節點上生成公鑰和私鑰,接下來需要把所有節點的公鑰發到CDHNode1節點的授權文件。如下圖,我們使用Xshell最下方的撰寫欄向所有節點發送ssh-copy-id CDHNode1命令。

5、執行結果如下,每個節點包括CDHNode1節點,都把自己剛纔生成的公鑰 id_rsa.pub文件發送到CDHNode1節點的授權文件authorized_keys中。

注意:也可以在所有節點使用

cat ~/.ssh/id_rsa.pub | ssh hadoop@CDHNode1 'cat >> ~/.ssh/authorized_keys' 命令把自己的公鑰追加到CDHNode1節點的授權文件authorized_keys中。

6、可以查看CDHNode1節點的授權文件authorized_keys中是否把所有節點的公鑰都添加到此文件中,若有節點沒有加入,則可以使用上一步命令重新添加。


7、然後我們就把這個文件拷貝到其他節點的.ssh目錄下。

CDHNode4、CDHNode5按照上述命令自己執行。注意,這個命令是在CDHNode1節點上執行的。

8、根據下圖,可以看到CDHNode5下已經複製了一份authorized_keys文件。下面以CDHNode5爲例,修改.ssh目錄以及.ssh目錄下的文件的權限。其他節點按照如下步驟 一 一 修改。

9、修改好權限後,至此ssh配置成功,可以使用ssh測試是否配置成功,第一次使用ssh連接其他節點時需要輸入yes,退出使用exit命令,在第二次登陸時,就不需要在輸入,如下圖直接登陸並顯示最後登錄時間。

提示:rsa非對稱加密算法是把公鑰發送個對方,對方使用公鑰對數據進行加密後,自己在使用私鑰對數據進行解密。

免密碼登錄的原理:

  1. 需要依靠密鑰,也就是自己創建的一對密鑰,並把公鑰放到需要訪問的服務器上。
  2. 如果你需要連接SSH服務器,客戶端軟件就會向服務器發出請求,請求用你的密鑰進行安全驗證。
  3. 服務器收到請求後,現在該服務器上的主目錄下尋找你的公鑰,然後把它和你發送過來的公鑰進行比較。如果兩個密鑰一致,服務端就用公鑰加密“質詢”(challenge),並把它發送給客戶端軟件。
  4. 客戶端收到“質詢”後,就用你的私鑰進行解密。再把它發送個服務器。
  5. 服務器比較發送來的“質詢”和原先的是否一致,如果一致則進行授權,完成建立會話的操作。

腳本工具的使用

此處使用腳本文件的目的是爲了簡化安裝步驟,畢竟有五個節點,如果全部使用命令一個一個操作,太費時費力了。爲了簡化操作,我們使用腳本文件來幫助我們執行多個重複的命令。就就相當於windows的批處理,把所有的命令集中起來,一個命令完成多個操作。

下面我們在CDHNode1節點上新建三個文件,deploy.conf(配置文件),deploy.sh(實現文件複製的shell腳本文件),runRemoteCdm.sh(在遠程節點上執行命令的shell腳本文件)。

1、我們把三個文件放到/home/hadoop/tools目錄下,先創建此目錄

[plain] view plain copy
  1. [hadoop@CDHNode1 ~]$ mkdir /home/hadoop/tools  
2、然後切換到tools目錄下

[hadoop@CDHNode1 ~]$cd tools

3、首先創建deploy.conf文件

[plain] view plain copy
  1. [hadoop@CDHNode1 tools]$ vi deploy.conf  

[plain] view plain copy
  1. CDHNode1,all,zookeeper,journalnode,namenode,resourcemanager,  
  2. CDHNode2,all,slave,zookeeper,journalnode,namenode,datanode,resourcemanager,  
  3. CDHNode3,all,slave,zookeeper,journalnode,datanode,nodemanager,  
  4. CDHNode4,all,slave,journalnode,datanode,nodemanager,  
  5. CDHNode5,all,slave,journalnode,datanode,nodemanager,  
先解釋一下這個文件,這個文件就是配置在每個幾點上的功能,就是上面所講的主機規劃。比如zookeeper安裝在CDHnode1、CDHnode2、CDHnode3這三個主機上。其他的自己對比查看。
4、創建deploy.sh文件
[plain] view plain copy
  1. [hadoop@CDHNode1 tools]$ vi deploy.sh  

[plain] view plain copy
  1. #!/bin/bash  
  2. #set -x  
  3.   
  4. #判斷參數是否小於3個,因爲運行deploy.sh需要有源文件(或源目錄)和目標文件(或目標目錄),  
  5. #以及在MachineTag(哪些主機)上執行,這個標記就是上面deploy.conf中的標記 ,如 zookeeper、all等  
  6. #使用實例如:我們把app目錄下的所有文件複製到遠程標記爲zookeeper的主機上的/home/hadoop/app目錄下  
  7. # ./deploy.sh  /home/hadoop/app /home/hadoop/app zookeeper  
  8. #執行完上述命令後,shell腳本文件就自動把CDHNode1下的app目錄中的文件複製到三個zookeeper節點的app目錄下  
  9. if [ $# -lt 3 ]    
  10. then   
  11.   echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag"  
  12.   echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile"  
  13.   exit   
  14. fi  
  15. #源文件或源目錄  
  16. src=$1  
  17. #目標文件或目標目錄  
  18. dest=$2cat   
  19. #標記  
  20. tag=$3  
  21.   
  22. #判斷是否使用deploy.conf配置文件,或者自己指定配置文件  
  23.   
  24. if [ 'a'$4'a' == 'aa' ]  
  25. then  
  26.   confFile=/home/hadoop/tools/deploy.conf  
  27. else   
  28.   confFile=$4  
  29. fi  
  30.   
  31. #判斷配置文件是否是普通文本文件  
  32. if [ -f $confFile ]  
  33. then  
  34. #判斷原件是普通文件還是目錄  
  35.  if [ -f $src ]  
  36.   then  
  37. #如果是普通文件就把解析出標記對應的主機名的ip  
  38.  for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`   
  39.     do  
  40.        scp $src $server":"${dest}  #使用循環把文件複製到目標ip上的相應目錄下  
  41.     done   
  42.   elif [ -d $src ]  
  43.   then  
  44.     for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`   
  45.     do  
  46.        scp -r $src $server":"${dest}  
  47.     done   
  48.   else  
  49.       echo "Error: No source file exist"  
  50.   fi  
  51.   
  52. else  
  53.   echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"  
  54. fi  

5、創建 runRemoteCmd.sh 腳本文件

[plain] view plain copy
  1. [hadoop@CDHNode1 tools]$ vi  runRemoteCmd.sh  
[plain] view plain copy
  1. #!/bin/bash  
  2. #set -x  
  3. #判斷參數個數  
  4. #實例如:顯示所有節點的java進程,中間用引號的就是命令,這個命令將在所以節點上執行  
  5. #./runRemoteCmd.sh  "jps" all  
  6. if [ $# -lt 2 ]  
  7. then   
  8.   echo "Usage: ./runRemoteCmd.sh Command MachineTag"  
  9.   echo "Usage: ./runRemoteCmd.sh Command MachineTag confFile"  
  10.   exit   
  11. fi  
  12.   
  13. cmd=$1  
  14. tag=$2  
  15. if [ 'a'$3'a' == 'aa' ]  
  16. then  
  17.    
  18.   confFile=/home/hadoop/tools/deploy.conf  
  19. else   
  20.   confFile=$3  
  21. fi  
  22.   
  23. if [ -f $confFile ]  
  24. then  
  25.     for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`   
  26.     do  
  27.        echo "*******************$server***************************"  
  28.        ssh $server "source /etc/profile; $cmd"    
  29. # 注意在使用的時候要根據自己設置的環境變量的配置位置,給定相應的source源 ,  
  30. # 如 我把環境變量設/home/hadoop/.bash_profile文件下,就需要上面這條命令改爲  
  31. # ssh $server "source /home/hadoop/.bash_profile;$cmd"  
  32. #上面的例子:這條命令就是在遠程標記爲tag的主機下執行這個命令jps。  
  33.  done   
  34. else  
  35.   echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"  
  36. fi  

6、給腳本文件添加執行權限。

[plain] view plain copy
  1. [hadoop@CDHNode1 tools]$chmod u+x deploy.sh  
  2. [hadoop@CDHNode1 tools]$chmod u+x runRemoteCmd.sh  


7、把tools目錄添加到環境變量PATH中。

[plain] view plain copy
  1. [hadoop@CDHNode1 tools]$vi /home/hadoop/.bash_profile  
添加下面內容

[plain] view plain copy
  1. #tools  
  2. export PATH=$PATH:/home/hadoop/tools  


8、是環境變量及時生效

[plain] view plain copy
  1. [hadoop@CDHNode1 tools]$source /home/hadoop/.bash_profile  
9、在CDHNode1節點上,通過runRemoteCmd.sh腳本,一鍵創建所有節點的軟件安裝目錄/home/hadoop/app。

[plain] view plain copy
  1. [hadoop@CDHNode1 tools]$ runRemoteCmd.sh "mkdir /home/hadoop/app" all  
我們可以在所有節點查看到/home/hadoop/app目錄已經創建成功。 


我們先來說一下軟件的安裝步驟:

對於解壓安裝的軟件,安裝步驟爲:

  1. 使用rz命令上傳要安裝的文件,此命令只能在遠程連接工具xshell上執行,不能再centos虛擬機上執行
  2. 使用tar -zxvf  softwarename.tar.gz
  3. 修改配置文件(根據需要而定,有時可省略)
  4. 在環境變量文件中配置環境變量
  5. 使用source 是環境變量文件即時生效。

安裝JDK

首先在CDHNode1上安裝jdk,然後複製到其他節點。

1、上傳使用rz後,找到下載的jdk文件(jdk-7u79-linux-x64.tar.gz  )即可,選擇後就可以上傳,上傳需要時間。

[plain] view plain copy
  1. [hadoop@CDHNode1 ~]$cd /home/hadoop/app  
  2.   
  3. [hadoop@CDHNode1 app]$ rz              //選擇本地的下載好的jdk-7u79-linux-x64.tar.gz  


2、解壓jdk-7u79-linux-x64.tar.gz  


[plain] view plain copy
  1. [hadoop@CDHNode1 app]$ tar zxvf jdk-7u79-linux-x64.tar.gz               //解壓  


3、修改jdk的名字,刪除上傳的壓縮文件jdk-7u79-linux-x64.tar.gz

[plain] view plain copy
  1. [hadoop@CDHNode1 app]$ mv jdk1.7.0_79 jdk  
  2. [hadoop@CDHNode1 app]$ rm -rf jdk-7u79-linux-x64.tar.gz              //刪除安裝包  


4、配置環境變量

[plain] view plain copy
  1. [hadoop@CDHNode1 app]$vi /home/hadoop/.bash_profile  


添加

[plain] view plain copy
  1. #java  
  2. export JAVA_HOME=/home/hadoop/app/jdk  
  3. export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH  
  4. export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin  


5、使環境變量文件即時生效

[plain] view plain copy
  1. [hadoop@CDHNode1 app]$source  /home/hadoop/.bash_profile  




6、查看是否安裝成功,查看Java版本

[plain] view plain copy
  1. [hadoop@CDHNode1 app]# java -version  
  2. java version "1.7.0_79"  
  3. Java(TM) SE Runtime Environment (build 1.7.0_79-b15)  
  4. Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)  

出現以上結果就說明CDHNode1節點上的jdk安裝成功。 然後將CDHNode1下的jdk安裝包複製到其他節點上。
[plain] view plain copy
  1. [hadoop@CDHNode1 app]$ deploy.sh jdk /home/hadoop/app/ slave  
CDHNode2、CDHNode3、CDHNode4、CDHNode5加點重複CDHNode1上的jdk配置即可。就是在其他節點上從第4步開始配置。

安裝Zookeeper

首先在CDHNode1上安裝Zookeeper,然後複製到其他節點。

1、將本地下載好的zookeeper-3.4.6.tar.gz安裝包,上傳至CDHNode1節點下的/home/hadoop/app目錄下。

[plain] view plain copy
  1. [hadoop@CDHNode1 app]$ rz              //選擇本地下載好的zookeeper-3.4.6.tar.gz  

2、解壓zookeeper-3.4.6.tar.gz 

[plain] view plain copy
  1. [hadoop@CDHNode1 app]$ tar zxvf zookeeper-3.4.6.tar.gz              //解壓  

3、修改zookeeper的名字,刪除上傳的壓縮文件zookeeper-3.4.6.tar.gz

[plain] view plain copy
  1. [hadoop@CDHNode1 app]$ rm -rf zookeeper-3.4.6.tar.gz              //刪除zookeeper-3.4.6.tar.gz安裝包  
  2. [hadoop@CDHNode1 app]$ mv zookeeper-3.4.6 zookeeper              //重命名  

4、修改Zookeeper中的配置文件。

[hadoop@CDHNode1 app]$ cd /home/hadoop/app/zookeeper/conf/

[plain] view plain copy
  1. [hadoop@CDHNode1 conf]$ cp zoo_sample.cfg zoo.cfg              //複製一個zoo.cfg文件  
  2. [hadoop@CDHNode1 conf]$ vi zoo.cfg  


[plain] view plain copy
  1. #添加下面的  
  2. # The number of milliseconds of each tick  
  3. tickTime=2000  
  4. # The number of ticks that the initial  
  5. # synchronization phase can take  
  6. initLimit=10  
  7. # The number of ticks that can pass between  
  8. # sending a request and getting an acknowledgement  
  9. syncLimit=5  
  10. # the directory where the snapshot is stored.  
  11. # do not use /tmp for storage, /tmp here is just  
  12. # example sakes.  
  13. #數據文件目錄與日誌目錄  
  14. dataDir=/home/hadoop/data/zookeeper/zkdata  
  15. dataLogDir=/home/hadoop/data/zookeeper/zkdatalog  
  16. # the port at which the clients will connect  
  17. clientPort=2181  
  18. #server.服務編號=主機名稱:Zookeeper不同節點之間同步和通信的端口:選舉端口(選舉leader)  
  19. server.1=CDHNode1:2888:3888  
  20. server.2=CDHNode2:2888:3888  
  21. server.3=CDHNode3:2888:3888  
  22.   
  23. # administrator guide before turning on autopurge.  
  24. #  
  25. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance  
  26. #  
  27. # The number of snapshots to retain in dataDir  
  28. #autopurge.snapRetainCount=3  
  29. # Purge task interval in hours  
  30. # Set to "0" to disable auto purge feature  
  31. #autopurge.purgeInterval=1  
  32. ~                                                                                                                                     
  33. ~                                                                                                                                     
  34. ~                                 


5、配置環境變量

[plain] view plain copy
  1. [hadoop@CDHNode1 app]$vi /home/hadoop/.bash_profile  

添加

[plain] view plain copy
  1. export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper  
  2. export PATH=$PATH:$ZOOKEEPER_HOME/bin  

6、使環境變量文件即時生效

[plain] view plain copy
  1. [hadoop@CDHNode1 app]$source  /home/hadoop/.bash_profile  

7、通過遠程命令deploy.sh將Zookeeper安裝目錄拷貝到其他節點(CDHNode2、CDHNode3)上面
[plain] view plain copy
  1. [hadoop@CDHNode1 app]$deploy.sh zookeeper /home/hadoop/app/ zookeeper  


8、通過遠程命令runRemoteCmd.sh在所有的zookeeper節點(CDHNode1、CDHNode2、CDHNode3)上面創建目錄:
[plain] view plain copy
  1. [hadoop@CDHNode1 app]$ runRemoteCmd.sh "mkdir -p /home/hadoop/data/zookeeper/zkdata" zookeeper   //創建數據目錄  
  2. [hadoop@CDHNode1 app]$ runRemoteCmd.sh "mkdir -p /home/hadoop/data/zookeeper/zkdatalog" zookeeper   //創建日誌目錄  
 9、然後分別在CDHNode1、CDHNode2、CDHNode3上面,進入zkdata目錄下,創建文件myid,裏面的內容分別填充爲:1、2、3, 這裏我們以CDHNode1爲例。
[plain] view plain copy
  1. [hadoop@CDHNode1 app]$ cd /home/hadoop/data/zookeeper/zkdata  
  2. [hadoop@CDHNode1 zkdata]$ vi myid  
//輸入數字1
CDHNode2輸入數字2CDHNode3輸入數字3

10、在CDHNode2、CDHNode3上面配置Zookeeper環境變量。按照第5、6步配置。

11、使用runRemoteCmd.sh 腳本,啓動所有節點(CDHNode1、CDHNode2、CDHNode3)上面的Zookeeper。
[plain] view plain copy
  1. [hadoop@CDHNode1 zkdata]$ runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" zookeeper  
12、查看所有節點上面的QuorumPeerMain進程是否啓動。

[plain] view plain copy
  1. [hadoop@CDHNode1 zkdata]$ runRemoteCmd.sh "jps" zookeeper  

13、查看所有Zookeeper節點狀態。
[plain] view plain copy
  1. [hadoop@CDHNode1 zkdata]$ runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh status" zookeeper  
如果一個節點爲leader,另2個節點爲follower,則說明Zookeeper安裝成功。
注意:QuorumPeerMain可能不顯示在jps進程中,可以使用bin/zkServer.sh status 查看狀態,無法啓動的原因可以查看zookeeper.out文件,查看錯誤原因
[plain] view plain copy
  1. <span style="color:#000000;">[hadoop@CDHNode2 ~]$ cd app/zookeeper/  
  2. [hadoop@CDHNode2 zookeeper]$ ls  
  3. bin               cloudera-pom.xml  ivysettings.xml  NOTICE.txt            share                              zookeeper.out  
  4. build.properties  conf              ivy.xml          README_packaging.txt  src  
  5. build.xml         contrib           lib              README.txt            zookeeper-3.4.5-cdh5.4.5.jar  
  6. CHANGES.txt       dist-maven        libexec          recipes               zookeeper-3.4.5-cdh5.4.5.jar.md5  
  7. cloudera          docs              LICENSE.txt      sbin                  zookeeper-3.4.5-cdh5.4.5.jar.sha1  
  8. [hadoop@CDHNode2 zookeeper]$ vi zookeeper.out  
  9.   
  10. 2016-05-20 16:00:30,095 [myid:] - INFO  [main:QuorumPeerConfig@101] - Reading configuration from: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg  
  11. 2016-05-20 16:00:30,099 [myid:] - INFO  [main:QuorumPeerConfig@334] - Defaulting to majority quorums  
  12. 2016-05-20 16:00:30,100 [myid:] - ERROR [main:QuorumPeerMain@86] - Invalid config, exiting abnormally  
  13. org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg  
  14.         at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:121)  
  15.         at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:106)  
  16.         at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79)  
  17. Caused by: java.lang.IllegalArgumentException: /home/hadoop/data/zookeeper/zkdata/myid file is missing  
  18.         at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:344)  
  19.         at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:117)  
  20.         ... 2 more  
  21. Invalid config, exiting abnormally  
  22. </span>  


安裝hadoop

首先在CDHNode1上安裝hadoop,然後複製到其他節點。

1、將本地下載好的hadoop-2.6.0-cdh5.4.5.tar.gz安裝包,上傳至CDHNode1節點下的/home/hadoop/app目錄下。

[plain] view plain copy
  1. [hadoop@CDHNode1 app]$ rz              //選擇本地下載好的hadoop-2.6.0-cdh5.4.5.tar.gz  

2、解壓hadoop-2.6.0-cdh5.4.5.tar.gz

[plain] view plain copy
  1. [hadoop@CDHNode1 app]$ tar zxvf hadoop-2.6.0-cdh5.4.5.tar.gz             //解壓  
3、修改hadoop的名字,刪除上傳的壓縮文件hadoop-2.6.0-cdh5.4.5.tar.gz
[plain] view plain copy
  1. [hadoop@CDHNode1 app]$ rm -rf hadoop-2.6.0-cdh5.4.5.tar.gz              //刪除hadoop-2.6.0-cdh5.4.5.tar.gz  安裝包  
  2. [hadoop@CDHNode1 app]$ mv hadoop-2.6.0 hadoop              //重命名  

4、配置環境變量

[plain] view plain copy
  1. [hadoop@CDHNode1 app]$vi /home/hadoop/.bash_profile  
添加
[plain] view plain copy
  1. # hadoop_home 2.6.0 path  
  2. HADOOP_HOME=/home/hadoop/app/hadoop  
  3. PATH=$HADOOP_HOME/bin:$PATH  
  4. export   HADOOP_HOME PATH  

5、使環境變量文件即時生效

[plain] view plain copy
  1. [hadoop@CDHNode1 app]$source  /home/hadoop/.bash_profile  

6、切換到/home/hadoop/app/hadoop/etc/hadoop/目錄下,修改配置文件。

[plain] view plain copy
  1. [hadoop@CDHNode1 app]$ cd /home/hadoop/app/hadoop/etc/hadoop/  

配置HDFS

配置hadoop-env.sh

[hadoop@CDHNode1 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/home/hadoop/app/jdk1.7.0_79
                

配置core-site.xml

[plain] view plain copy
  1. [hadoop@CDHNode1 hadoop]$ vi core-site.xml  
  2. <configuration>  
  3.         <property>  
  4.                 <name>fs.defaultFS</name>  
  5.                 <value>hdfs://cluster1</value>  
  6.         </property>  
  7.         <-- 這裏的值指的是默認的HDFS路徑 ,取名爲cluster1 -->  
  8.         <property>  
  9.                 <name>hadoop.tmp.dir</name>  
  10.                 <value>/home/hadoop/data/tmp</value>  
  11.         </property>  
  12.         <-- hadoop的臨時目錄,如果需要配置多個目錄,需要逗號隔開,data目錄需要我們自己創建 -->  
  13.         <property>  
  14.                 <name>ha.zookeeper.quorum</name>  
  15.                 <value>CDHNode1:2181,CDHNode2:2181,CDHNode3:2181,CDHNode4:2181,CDHNode5:2181</value>  
  16.         </property>  
  17.         <-- 配置Zookeeper 管理HDFS -->  
  18. </configuration>  
               

配置hdfs-site.xml

[plain] view plain copy
  1. [hadoop@CDHNode1 hadoop]$ vi hdfs-site.xml  
  2. <configuration>  
  3.         <property>  
  4.                 <name>dfs.replication</name>  
  5.                 <value>3</value>  
  6.         </property>  
  7.         <-- 數據塊副本數爲3 -->  
  8.         <property>  
  9.                 <name>dfs.permissions</name>  
  10.                 <value>false</value>  
  11.         </property>  
  12.         <property>  
  13.                 <name>dfs.permissions.enabled</name>  
  14.                 <value>false</value>  
  15.         </property>  
  16.         <-- 權限默認配置爲false -->  
  17.         <property>  
  18.                 <name>dfs.nameservices</name>  
  19.                 <value>cluster1</value>  
  20.         </property>  
  21.         <-- 命名空間,它的值與fs.defaultFS的值要對應,namenode高可用之後有兩個namenode,cluster1是對外提供的統一入口 -->  
  22.         <property>  
  23.                 <name>dfs.ha.namenodes.cluster1</name>  
  24.                 <value>CDHNode1,CDHNode2</value>  
  25.         </property>  
  26.         <-- 指定 nameService 是 cluster1 時的nameNode有哪些,這裏的值也是邏輯名稱,名字隨便起,相互不重複即可 -->  
  27.         <property>  
  28.                 <name>dfs.namenode.rpc-address.cluster1.CDHNode1</name>  
  29.                 <value>CDHNode1:9000</value>  
  30.         </property>  
  31.         <-- CDHNode1 rpc地址 -->  
  32.         <property>  
  33.                 <name>dfs.namenode.http-address.cluster1.CDHNode1</name>  
  34.                 <value>CDHNode1:50070</value>  
  35.         </property>  
  36.         <-- CDHNode1 http地址 -->  
  37.         <property>  
  38.                 <name>dfs.namenode.rpc-address.cluster1.CDHNode2</name>  
  39.                 <value>CDHNode2:9000</value>  
  40.         </property>  
  41.         <-- CDHNode2 rpc地址 -->  
  42.         <property>  
  43.                 <name>dfs.namenode.http-address.cluster1.CDHNode2</name>  
  44.                 <value>CDHNode2:50070</value>  
  45.         </property>  
  46.         <-- CDHNode2 http地址 -->  
  47.         <property>  
  48.                 <name>dfs.ha.automatic-failover.enabled</name>  
  49.                 <value>true</value>  
  50.         </property>  
  51.         <-- 啓動故障自動恢復 -->  
  52.         <property>  
  53.                 <name>dfs.namenode.shared.edits.dir</name>  
  54.                 <value>qjournal://CDHNode1:8485;CDHNode2:8485;CDHNode3:8485;CDHNode4:8485;CDHNode5:8485/cluster1</value>  
  55.         </property>  
  56.         <-- 指定journal -->  
  57.         <property>  
  58.                 <name>dfs.client.failover.proxy.provider.cluster1</name>  
  59.                 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  
  60.         </property>  
  61.         <-- 指定 cluster1 出故障時,哪個實現類負責執行故障切換 -->  
  62.         <property>  
  63.                 <name>dfs.journalnode.edits.dir</name>  
  64.                 <value>/home/hadoop/data/journaldata/jn</value>  
  65.         </property>  
  66.         <-- 指定JournalNode集羣在對nameNode的目錄進行共享時,自己存儲數據的磁盤路徑 -->  
  67.         <property>  
  68.                 <name>dfs.ha.fencing.methods</name>  
  69.                 <value>shell(/bin/true)</value>  
  70.         </property>  
  71.         <property>  
  72.         <name>dfs.ha.fencing.ssh.private-key-files</name>  
  73.         <value>/home/hadoop/.ssh/id_rsa</value>  
  74.         </property>  
  75.         <property>  
  76.         <name>dfs.ha.fencing.ssh.connect-timeout</name>  
  77.         <value>10000</value>  
  78.         </property>  
  79.         <-- 腦裂默認配置 -->  
  80.         <property>  
  81.                 <name>dfs.namenode.handler.count</name>  
  82.                 <value>100</value>  
  83.         </property>  
  84. </configuration>  



配置 slave

[plain] view plain copy
  1. [hadoop@CDHNode1 hadoop]$ vi slaves  
  2. CDHNode3  
  3.   
  4. CDHNode4  
  5.   
  6. CDHNode5  


YARN安裝配置

配置mapred-site.xml

[plain] view plain copy
  1. [hadoop@CDHNode1 hadoop]$ vi mapred-site.xml  
  2. <configuration>  
  3.         <property>  
  4.                 <name>mapreduce.framework.name</name>  
  5.                 <value>yarn</value>  
  6.         </property>  
  7.         <-- 指定運行mapreduce的環境是Yarn,與hadoop1不同的地方 -->  
  8. </configuration>  
  9.                   


配置yarn-site.xml
[plain] view plain copy
  1. [hadoop@CDHNode1 hadoop]$ vi yarn-site.xml  
  2. <configuration>  
  3.      <property>  
  4.           <name>yarn.resourcemanager.connect.retry-interval.ms</name>  
  5.           <value>2000</value>  
  6.      </property>  
  7.      <-- 超時的週期 -->  
  8.      <property>  
  9.           <name>yarn.resourcemanager.ha.enabled</name>  
  10.           <value>true</value>  
  11.      </property>  
  12.      <-- 打開高可用 -->  
  13.      <property>  
  14.           <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>  
  15.           <value>true</value>  
  16.      </property>  
  17.      <-- 啓動故障自動恢復 -->  
  18.      <property>  
  19.           <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>  
  20.           <value>true</value>  
  21.      </property>  
  22.      <property>  
  23.           <name>yarn.resourcemanager.cluster-id</name>  
  24.            <value>yarn-rm-cluster</value>  
  25.      </property>  
  26.      <-- 給yarn cluster 取個名字yarn-rm-cluster -->  
  27.      <property>  
  28.           <name>yarn.resourcemanager.ha.rm-ids</name>  
  29.           <value>rm1,rm2</value>  
  30.      </property>  
  31.      <-- 給ResourceManager 取個名字 rm1,rm2 -->  
  32.      <property>  
  33.           <name>yarn.resourcemanager.hostname.rm1</name>  
  34.           <value>CDHNode1</value>  
  35.      </property>  
  36.      <-- 配置ResourceManager rm1 hostname -->  
  37.      <property>  
  38.           <name>yarn.resourcemanager.hostname.rm2</name>  
  39.           <value>CDHNode2</value>  
  40.      </property>  
  41.      <-- 配置ResourceManager rm2 hostname -->  
  42.      <property>  
  43.            <name>yarn.resourcemanager.recovery.enabled</name>  
  44.           <value>true</value>  
  45.      </property>  
  46.      <-- 啓用resourcemanager 自動恢復 -->  
  47.      <property>  
  48.           <name>yarn.resourcemanager.zk.state-store.address</name>  
  49.            <value>CDHNode1:2181,CDHNode2:2181,CDHNode3:2181,CDHNode4:2181,CDHNode5:2181</value>  
  50.      </property>  
  51.      <-- 配置Zookeeper地址 -->  
  52.      <property>  
  53.            <name>yarn.resourcemanager.zk-address</name>  
  54.           <value>CDHNode1:2181,CDHNode2:2181,CDHNode3:2181,CDHNode4:2181,CDHNode5:2181</value>  
  55.      </property>  
  56.      <-- 配置Zookeeper地址 -->  
  57.      <property>  
  58.            <name>yarn.resourcemanager.address.rm1</name>  
  59.           <value>CDHNode1:8032</value>  
  60.      </property>  
  61.      <--  rm1端口號 -->  
  62.      <property>  
  63.           <name>yarn.resourcemanager.scheduler.address.rm1</name>  
  64.           <value>CDHNode1:8034</value>  
  65.      </property>  
  66.      <-- rm1調度器的端口號 -->  
  67.      <property>  
  68.           <name>yarn.resourcemanager.webapp.address.rm1</name>  
  69.           <value>CDHNode1:8088</value>  
  70.      </property>  
  71.      <-- rm1 webapp端口號 -->  
  72.      <property>  
  73.           <name>yarn.resourcemanager.address.rm2</name>  
  74.      <value>CDHNode2:8032</value>  
  75.      </property>  
  76.      <-- rm2端口號 -->  
  77.      <property>  
  78.           <name>yarn.resourcemanager.scheduler.address.rm2</name>  
  79.           <value>CDHNode2:8034</value>  
  80.      </property>  
  81.      <-- rm2調度器的端口號 -->  
  82.      <property>  
  83.           <name>yarn.resourcemanager.webapp.address.rm2</name>  
  84.           <value>CDHNode2:8088</value>  
  85.      </property>  
  86.      <-- rm2 webapp端口號 -->  
  87.      <property>  
  88.            <name>yarn.nodemanager.aux-services</name>  
  89.           <value>mapreduce_shuffle</value>  
  90.      </property>  
  91.      <property>  
  92.            <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>  
  93.           <value>org.apache.hadoop.mapred.ShuffleHandler</value>  
  94.      </property>  
  95.      <-- 執行MapReduce需要配置的shuffle過程 -->  
  96. </configuration>  

向所有節點分發hadoop安裝包。

[hadoop@CDHNode1 app]$ deploy.sh hadoop /home/hadoop/app/ slave


按照目錄的規劃建立好目錄(用於存放數據的目錄):

[plain] view plain copy
  1. runRemoteCmd.sh "mkdir -p /home/hadoop/data/name" all  
  2.   
  3. runRemoteCmd.sh "mkdir -p /home/hadoop/data/hdfs/edits" all  
  4.   
  5. runRemoteCmd.sh "mkdir -p /home/hadoop/data/datanode" all  
  6.   
  7. runRemoteCmd.sh "mkdir -p /home/hadoop/data/journaldata/jn" all  
  8.   
  9. runRemoteCmd.sh "mkdir -p /home/hadoop/data/tmp" all  
  10.   
  11. runRemoteCmd.sh "touch /home/hadoop/app/hadoop/etc/hadoop/excludes" all  
  12.   
  13. runRemoteCmd.sh "mkdir -p /home/hadoop/data/pid" all  

當你的在初始化工程中出錯,要把相關目錄的文件刪除,然後再重新初始化

[plain] view plain copy
  1. rm -rf /home/hadoop/data/name/*  
  2.   
  3. rm -rf /home/hadoop/data/hdfs/edits/*  
  4.   
  5. rm -rf /home/hadoop/data/datanode/*  
  6.   
  7. rm -rf /home/hadoop/data/journaldata/jn/*  
  8.   
  9. rm -rf /home/hadoop/data/tmp/*  

集羣初始化

1、啓動所有節點上面的Zookeeper進程

[hadoop@CDHNode1 hadoop]$ runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" zookeeper

2、啓動所有節點上面的journalnode進程

[hadoop@CDHNode1 hadoop]$ runRemoteCmd.sh "/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode" all

3、首先在主節點上(比如,CDHNode1)執行格式化

[plain] view plain copy
  1. [hadoop@CDHNode1 hadoop]$ bin/hdfs namenode -format              / /namenode 格式化  
  2. [hadoop@CDHNode1 hadoop]$ bin/hdfs zkfc -formatZK                 //格式化高可用  
  3. [hadoop@CDHNode1 hadoop]$bin/hdfs namenode           //啓動namenode  

注意:執行完上述命令後,程序就會在等待狀態,只有執行完下一步時,利用按下ctrl+c來結束namenode進程。                

4、與此同時,需要在備節點(比如 CDHNode2)上執行數據同步 注意:同時是在執行完上一步後,上一步程序停止的情況下執行此步驟的
[hadoop@CDHNode2 hadoop]$ bin/hdfs namenode -bootstrapStandby     //同步主節點和備節點之間的元數據
                

5、CDHNode2同步完數據後,緊接着在CDHNode1節點上,按下ctrl+c來結束namenode進程。 然後關閉所有節點上面的journalnode進程

[hadoop@CDHNode1 hadoop]$ runRemoteCmd.sh "/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh stop journalnode" all        //然後停掉各節點的journalnode

6、如果上面操作沒有問題,我們可以一鍵啓動hdfs所有相關進程
[plain] view plain copy
  1. [hadoop@CDHNode1 hadoop]$ sbin/start-dfs.sh  

啓動成功之後,查看關閉其中一個namenode ,然後在啓動namenode 觀察切換的狀況

7、驗證是否啓動成功

通過web界面查看namenode啓動情況。

http://CDHNode1:50070
注意:在瀏覽器輸入以上網址時,需要先在本機的hosts目錄下添加如下映射:
192.168.3.188  CDHNode1
192.168.3.189  CDHNode2
192.168.3.190  CDHNode3
192.168.3.191  CDHNode4
192.168.3.192  CDHNode5

啓動成功之後,查看關閉其中一個namenode ,然後在啓動namenode 觀察切換的狀況 使用命令 kill  

上傳文件至hdfs

[hadoop@CDHNode1 hadoop]$ vi a.txt  //本地創建一個a.txt文件
hadoop CDH
hello world
CDH hadoop
[hadoop@CDHNode1 hadoop]$ hdfs dfs -mkdir /test   //在hdfs上創建一個文件目錄
[hadoop@CDHNode1 hadoop]$ hdfs dfs -put djt.txt /test      //向hdfs上傳一個文件
[hadoop@CDHNode1 hadoop]$ hdfs dfs -ls /test       //查看a.txt是否上傳成功
                

如果上面操作沒有問題說明hdfs配置成功。


啓動YARN

1、在CDHNode1節點上執行。

[hadoop@CDHNode1 hadoop]$ sbin/start-yarn.sh                

2、在CDHNode2節點上面執行。

[hadoop@CDHNode2 hadoop]$ sbin/yarn-daemon.sh start resourcemanager               

同時打開一下web界面。

http://CDHNode1:8088
http://CDHNode2:8088
                

關閉其中一個resourcemanager,然後再啓動,看看這個過程的web界面變化。

3、檢查一下ResourceManager狀態

[hadoop@CDHNode1 hadoop]$ bin/yarn rmadmin -getServiceState rm1
[hadoop@CDHNode1 hadoop]$ bin/yarn rmadmin -getServiceState rm2
                

4、Wordcount示例測試

[hadoop@djt11 hadoop]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /test/a.txt /test/out/

如果上面執行沒有異常,說明YARN安裝成功。

集羣關啓順序

關閉YARN

a、在CDHNode2節點上面執行

[plain] view plain copy
  1. [hadoop@CDHNode2 hadoop]$ sbin/yarn-daemon.sh stop resourcemanager  

b、在CDHNode1節點上執行

[plain] view plain copy
  1. [hadoop@CDHNode1  hadoop]$ sbin/stop-yarn.sh   

c、關閉HDFS

[plain] view plain copy
  1. [hadoop@CDHNode1 hadoop]$ sbin/stop-dfs.sh  

d、關閉zookeeper

[plain] view plain copy
  1. [hadoop@CDHNode1 hadoop]$ runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh stop" zookeeper  


再次啓動集羣

a、啓動zookeeper

[plain] view plain copy
  1. [hadoop@CDHNode1 hadoop]$ runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" zookeeper  

b、啓動HDFS

[plain] view plain copy
  1. [hadoop@CDHNode1 hadoop]$ sbin/start-dfs.sh  

c、在CDHNode1節點上執行

[plain] view plain copy
  1. [hadoop@CDHNode1 hadoop]$ sbin/start-yarn.sh     

d、在CDHNode2節點上面執行

[plain] view plain copy
  1. [hadoop@CDHNode2 hadoop]$ sbin/yarn-daemon.sh start resourcemanager  

至此,hadoop 分佈式集羣搭建完畢。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章