搭建5個節點的hadoop叢集環境(CDH5)

Roninwz發表於2017-09-21

提示:如果還不瞭解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機上搭建叢集環境,則只需要記憶體足夠即可。


二、軟體環境準備


這篇文章是搭建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
 print?
  1. [hadoop@CDHNode1 ~]$ mkdir /home/hadoop/tools  
2、然後切換到tools目錄下

[hadoop@CDHNode1 ~]$cd tools

3、首先建立deploy.conf檔案

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

[plain] view plain copy
 print?
  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
 print?
  1. [hadoop@CDHNode1 tools]$ vi deploy.sh  

[plain] view plain copy
 print?
  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
 print?
  1. [hadoop@CDHNode1 tools]$ vi  runRemoteCmd.sh  
[plain] view plain copy
 print?
  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
 print?
  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
 print?
  1. [hadoop@CDHNode1 tools]$vi /home/hadoop/.bash_profile  
新增下面內容

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


8、是環境變數及時生效

[plain] view plain copy
 print?
  1. [hadoop@CDHNode1 tools]$source /home/hadoop/.bash_profile  
9、在CDHNode1節點上,通過runRemoteCmd.sh指令碼,一鍵建立所有節點的軟體安裝目錄/home/hadoop/app。

[plain] view plain copy
 print?
  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
 print?
  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
 print?
  1. [hadoop@CDHNode1 app]$ tar zxvf jdk-7u79-linux-x64.tar.gz               //解壓  


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

[plain] view plain copy
 print?
  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
 print?
  1. [hadoop@CDHNode1 app]$vi /home/hadoop/.bash_profile  


新增

[plain] view plain copy
 print?
  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
 print?
  1. [hadoop@CDHNode1 app]$source  /home/hadoop/.bash_profile  




6、檢視是否安裝成功,檢視Java版本

[plain] view plain copy
 print?
  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
 print?
  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
 print?
  1. [hadoop@CDHNode1 app]$ rz              //選擇本地下載好的zookeeper-3.4.6.tar.gz  

2、解壓zookeeper-3.4.6.tar.gz 

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

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

[plain] view plain copy
 print?
  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
 print?
  1. [hadoop@CDHNode1 conf]$ cp zoo_sample.cfg zoo.cfg              //複製一個zoo.cfg檔案  
  2. [hadoop@CDHNode1 conf]$ vi zoo.cfg  


[plain] view plain copy
 print?
  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
 print?
  1. [hadoop@CDHNode1 app]$vi /home/hadoop/.bash_profile  

新增

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

6、使環境變數檔案即時生效

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

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


8、通過遠端命令runRemoteCmd.sh在所有的zookeeper節點(CDHNode1、CDHNode2、CDHNode3)上面建立目錄:
[plain] view plain copy
 print?
  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
 print?
  1. [hadoop@CDHNode1 app]$ cd /home/hadoop/data/zookeeper/zkdata  
  2. [hadoop@CDHNode1 zkdata]$ vi myid  
//輸入數字1
CDHNode2輸入數字2、CDHNode3輸入數字3。

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

11、使用runRemoteCmd.sh 指令碼,啟動所有節點(CDHNode1、CDHNode2、CDHNode3)上面的Zookeeper。
[plain] view plain copy
 print?
  1. [hadoop@CDHNode1 zkdata]$ runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" zookeeper  
12、檢視所有節點上面的QuorumPeerMain程式是否啟動。

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

13、檢視所有Zookeeper節點狀態。
[plain] view plain copy
 print?
  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
 print?
  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
 print?
  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
 print?
  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
 print?
  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
 print?
  1. [hadoop@CDHNode1 app]$vi /home/hadoop/.bash_profile  
新增
[plain] view plain copy
 print?
  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
 print?
  1. [hadoop@CDHNode1 app]$source  /home/hadoop/.bash_profile  

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

[plain] view plain copy
 print?
  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
 print?
  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
 print?
  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
 print?
  1. [hadoop@CDHNode1 hadoop]$ vi slaves  
  2. CDHNode3  
  3.   
  4. CDHNode4  
  5.   
  6. CDHNode5  


YARN安裝配置

配置mapred-site.xml

[plain] view plain copy
 print?
  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
 print?
  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
 print?
  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
 print?
  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
 print?
  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
 print?
  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
 print?
  1. [hadoop@CDHNode2 hadoop]$ sbin/yarn-daemon.sh stop resourcemanager  

b、在CDHNode1節點上執行

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

c、關閉HDFS

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

d、關閉zookeeper

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


再次啟動叢集

a、啟動zookeeper

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

b、啟動HDFS

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

c、在CDHNode1節點上執行

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

d、在CDHNode2節點上面執行

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

至此,hadoop 分散式叢集搭建完畢。


後續再編寫HBase,hive等的安裝



轉載來自:http://blog.csdn.net/u010270403/article/details/51446674

相關文章