【Big Data】HADOOP集群的配置(二)


Hadoop集群的配置(二)

 

摘要: hadoop集群配置系列文檔,是筆者在實驗室真機環境實驗后整理而得。以便隨后工作所需,做以知識整理,另則與博客園朋友分享實驗成果,因為筆者在學習初期,也遇到不少問題。但是網上一些文檔大多互相抄襲,里面錯誤百出。筆者結合自學書籍視頻等資料,完成這一套配置資料。實驗結果和過程經過反復測試無誤后方整理出來的。配置過程中,初學者若有實驗環境,可以在真機環境下完成,若無條件,可補習下虛擬機與Linux操作系統的基礎知識,以及里面對linux常規命令使用,建議讀者邊配置學學習。(本文原創/整理,轉載請標注原文出處: Hadoop集群的配置(二)

白寧超

2015年7月12日10:40:04

相關文章

  1. 【Oracle RAC集群搭建1】 集群概念介紹
  2. 【Oracle RAC集群搭建2】 ORACLE集群概念和原理
  3. 【Oracle RAC集群搭建3】 RAC 工作原理和相關組件
  4. 【Oracle RAC集群搭建4】 緩存融合技術
  5. 【Oracle RAC集群搭建5】 RAC 特殊問題和實戰經驗
  6. 【Oracle RAC集群搭建6】 ORACLE 11 G版本2 RAC在LINUX上使用NFS安裝前准備
  7. 【Oracle RAC集群搭建7】 ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC集群安裝
  8. 【Oracle RAC集群搭建8】 ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC數據庫安裝
  9. 【Oracle RAC集群搭建9】 ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC基本測試與使用
  10. 【MySql集群搭建】   真機環境下MySQL-Cluster搭建文檔

  11. 【Hadoop集群搭建1】Hadoop集群的配置

  12. 【Hadoop集群搭建2】Hadoop集群的配置 

2.8 節點之間的免密碼通信

1.什么是SSH

SSH是Secure Shell的縮寫,由IETF的網絡工作小組(Network Working Group)所制定;SSH為建立在應用層和傳輸層基礎上的安全協議。SSH是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用SSH協議可以有效防止遠程管理過程中的信息泄露問題。

從客戶端來看,SSH提供兩種級別的安全驗證。

第一種級別  基於口令的安全驗證

只要知道自己的帳號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密,但是不能保證你正在連接的服務器就是你想連接的服務器。可能會有別的服務器在冒充真正的服務器,也就是受到“中間人”這種方式的攻擊。

第二種級別  基於密匙的安全驗證

需要依靠密匙,也就是你必須為自己創建一對密匙,並把公用密匙放在需要訪問的服務器上。如果你要連接到SSH服務器上,客戶端軟件就會向服務器發出請求,請求用你的密匙進行安全驗證。服務器收到請求之后,先在該服務器上你的主目錄下尋找你的公用密匙,然后把它和你發送過來的公用密匙進行比較。如果兩個密匙一致,服務器就用公用密匙加密“質詢”(challenge)並把它發送給客戶端軟件。客戶端軟件收到“質詢”之后就可以用你的私人密匙解密再把它發送給服務器。

用這種方式,你必須知道自己密匙的口令。但是,與第一種級別相比,第二種級別不需要在網絡上傳送口令。

第二種級別不僅加密所有傳送的數據,而且“中間人”這種攻擊方式也是不可能的(因為他沒有你的私人密匙)。但是整個登錄的過程可能需要10秒。

2.虛擬機拷貝節點

關閉當前CentOS,然后右擊CentOS,選擇“管理”-->“克隆”。

                       

 

分別完成CentOS1、CentOS2、CentOS3的克隆工作,然后分別啟動,重復2.2修改網絡,用pietty登錄,重復2.5的操作步驟更改相應主機名。

思考:node節點上的hosts和其他節點上的hosts一樣嗎?其中hosts文件還不算大,手工改也不會耗費太多時間,如果搭建的是幾百個節點的集群呢?

我們可以登錄node節點,把node節點上的hosts遠程拷貝到其他節點。

使用scp命令: scp  fromAdd   toAdd  如圖

 

注意其中出現了和我們第一次連接出現的提示,The authenticity of host 'node1 (192.168.10.101)' can't be established.我們確認連接方安全輸入“yes”回車,輸入node1密碼連接成功,打開known_hosts我們可以看到生成的密鑰:

 

以后再與node1不會再出現提示,因為在known_hosts已經加入了node1。但仍然需要輸入密碼,下面我們解決免密碼登錄的問題,讀者先完成其他節點的hosts拷貝。

3.SSH免密碼登錄

在各節點上生成各自SSH秘鑰對(命令中的rsa可以改成dsa,安全性更高),以node1為例。

 

 

在本機上生成authorized_keys,並驗證能否對本機進行SSH無密碼登陸。

 

       

所有節點都生成自己的authorized_keys之后,通過ssh-copy-id命令拷貝各自的公鑰到node2節點(可以隨機指定某個存在的節點),下面以node1節點為例,node1節點的公鑰復制到node2節點中並加入到授權的key中,並驗證是否配置成功。

 

 

以下是node2節點完成公鑰復制后的文件。

 

由此可見所有節點都已經加入了[微軟用戶1] ,只要通過遠程拷貝那么節點之間就可以實現免密碼登錄了。

只要在node2節點上執行:

scp /root/.ssh/authorized_keys node:/root/.ssh/;scp /root/.ssh/authorized_keys node1:/root/.ssh/;scp /root/.ssh/authorized_keys node3:/root/.ssh/

 

 

這樣,就可以測試節點之間的登錄了。

2.9 Hadoop啟動和測試

1.格式化文件系統

在node節點上首先格式化namenode,執行命令hdfs  namenode  -format

在出現提示信息的最后第二行出現“Exiting with status 0”表示格式化成功,在UNIX中0表示成功,1表示失敗,因此讀者如果返回“Exiting with status 1”應該好好分析下前面的錯誤提示信息,一般來說是因為前面配置文件和hosts文件問題,修改后一定要同步到其他節點上,保持相同環境。

 

注意:有些讀者以前用hadoop1.2或者更靠前的版本,會習慣用hadoop namenode -format格式化,這個時候會彈出一條WARNING信息,警告腳本已過時,但不會影響結果,因為Hadoop2.2版本對之前的Hadoop命令幾乎都兼容。

注意:格式化前可以先自定義集群名字,如果未定義,系統將自動生成[微軟用戶2] 。

hadoop namenode -format -clusterid clustername

 2.啟動HDFS

使用start-dfs.sh開啟hadoop dfs服務。

 

通過上面可以看到,我們啟動了HDFS,node節點作為namenode,node1、node2、node3作為datanode,而node1也作為secondnamenode。

可以通過jps命令驗證。Jps也是Windows上面的命令,表示開啟的Java進程。當出現如下結果,表示驗證成功。

       

                

同樣,也可以通過網絡驗證HDFSs情況,在Lunix環境下,在Web瀏覽器中輸入:http://node:50070,當然也可以在Windows環境中通過該URL訪問,只需修改如下文件:

C:\Windows\System32\drivers\etc\hosts  添加192.168.10.100 node即可。

 

3.啟動YARN集群

在主節點node[微軟用戶4] 上,執行命令:start-yarn.sh

 

通過輸出可以看到namenode已經作為了resourcemanager,而其他三個節點分別作為nodemanager。通過命令tail -f  /home/hadoop/hadoop2.2/logs/yarn-root-resourcemanager-node.out

可以查看啟動日志。

或者查看啟動對應進程情況: jps

 

其他節點可以通過類似命令驗證,當然最方便的是輸入地址:http://node:8088/

 

NodeManager運行在從節點上,可以通過Web控制台查看對應節點的資源狀態,如節點s1:http://node1:8042/

 

 

4.管理JobHistory Server

啟動可以[微軟用戶5] JobHistory Server,能夠通過Web控制台查看集群計算的任務的信息,執行如下命令:       mr-jobhistory-daemon.sh start historyserver


通過訪問http://       node:19888/查看任務執行歷史信息。


終止JobHistory Server,執行如下命令:mr-jobhistory-daemon.sh stop historyserver

5.集群驗證

可以使用Hadoop自帶的WordCount例子進行驗證。先在HDFS創建幾個數據目錄:

hadoop fs -mkdir -p /data/wordcount

 

hadoop fs -mkdir -p /output/

目錄/data/wordcount用來存放Hadoop自帶的WordCount例子的數據文件,運行這個MapReduce任務的結果輸出到/output/wordcount目錄中。

將本地文件上傳到HDFS中:

hadoop fs -put /home/hadoop/hadoop2.2/etc/hadoop/*.xml /data/wordcount/

可以查看上傳后的文件情況,執行如下命令:

hadoop fs -ls /data/wordcount

可以看到上傳到HDFS中的文件。

下面,運行WordCount例子,執行如下命令:

hadoop  jar  /home/hadoop/hadoop2.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount  /data/wordcount  /output/wordcount

通過http://node:8088/可以看到節點的運行情況。

 

運行結束后可以通過如下命令查看結果:

hadoop fs -cat /output/wordcount/part-r-00000 | head

以后我們掌握了相關api后可以自己編寫切詞統計程序。

6.需要了解的默認配置

在Hadoop 2.2.0中,YARN框架有很多默認的參數值,如果是在機器資源比較不足的情況下,需要修改這些默認值,來滿足一些任務需要。

NodeManager和ResourceManager都是在yarn-site.xml文件中配置的,而運行MapReduce任務時,是在mapred-site.xml中進行配置的。

下面看一下相關的參數及其默認值情況:

3.動態管理節點(了解)


3.1動態增加和刪除datanode

總的來說,正確的做法是優先通過配置文件,再在具體機器上進行相應進程的啟動/停止操作。

1. 配置文件

  • 在namenode下修改配置文件
  • 在hadoop 0.x中上述配置存放在文件conf/hadoop-site.xml中;
  • 在hadoop 2.x中變化很大,文件為conf/hdfs-site.xml中,參數名為:dfs.namenode.hosts和fs.namenode.hosts.exclude。

參數作用:

dfs.hosts:[微軟用戶6] 

 

Names   a file that contains a list of hosts that are permitted to connect to the   namenode. The full pathname of the file must be specified. If the value is   empty, all hosts are permitted.

dfs.hosts.exclude:

 

Names a file that contains a list of hosts that are not permitted to connect to the namenode. The full pathname of the file must be specified. If the value is empty, no hosts are excluded

 

用法說明:

修改hdfs-site.xml,添加:

<property>

                   <name>dfs.hosts</name>

                   <value>/home/hadoop/hadoop2.2/conf/datanode-allow.list</value>

         </property>

         <property>

                   <name>dfs.hosts.exclude</name>

                   <value>/home/hadoop/hadoop2.2/conf/datanode-deny.list</value>

         </property>

 

  • 如果不需要允許列表,就不要創建對應項了。然后創建value所指定的文件,一行寫一個主機名。
  • 在新slave上進行相關配置。
  • 在master上的slave列表加入該slave(非必須,方便以后重啟cluster用)
  • (若有)在datanode-allow.list中加入該slave
  • 在slave上啟動datanode進程:
  • 運行:hadoop-daemon.sh start datanode  

2. 添加

3. 刪除

極端不建議直接在slave上通過:hadoop-daemon.sh stop datanode 命令關掉datanode,這會導致HDFS中出現missing block,具體步驟如下:

  • 在master上修改datanode-deny.list,添加相應機器
  • 在master上刷新節點配置情況:hadoop dfsadmin -refreshNodes  

此時在Web UI上就可以看到該節點變為Decommissioning狀態,過一會就變為Dead了。也可以通過:hadoop dfsadmin -report命令查看。  namenode.stale.datanode.interval

  • 在slave上關閉datanode進程(非必須):  

運行: hadoop-daemon.sh stop datanode 

4. 重新加入各個刪除的節點

  • 在master的datanode-deny.list刪除相應機器
  • 在master上刷新節點配置情況:hadoop dfsadmin -refreshNodes 
  • 在slave上重啟datanode進程:hadoop-daemon.sh start datanode 

注意:如果之前沒有關閉該slave上的datanode進程,需要先關閉再重新啟動。

3.2. 動態修改TaskTracker

1. 配置文件

對於hadoop 2.x下[微軟用戶7] 在namenode下修改配置文件conf/mapred-site.xml。關鍵參數mapred.hosts和mapred.hosts.exclude。

參數作用:和datanode的對應項一樣。

 

 

 

修改mapred-site.xml,添加參數:

        <property>

                   <name>mapreduce.jobtracker.hosts.filename</name>

                   <value>/home/hadoop/hadoop2.2/conf/datanode-allow.list</value>

         </property>

         <property>

                   <name>mapreduce.jobtracker.hosts.exclude.filename</name>

                   <value>/home/hadoop/hadoop2.2/conf/datanode-deny.list</value>

         </property>

 

然后創建value所指定的文件。一行寫一個主機名。

2. 添加

  • 在新slave上進行相關配置。
  • 在master上的slave列表加入該slave(非必須,方便以后重啟cluster用)
  • 若有)[微軟用戶8] 在tasktracker-allow.list中加入該slave
  • 在slave上啟動tasktracker進程:
  • 運行:hadoop-daemon.sh start tasktracker  

注意:可以用jps命令查看機器上的java進程的pid和進程名。

3. 刪除

不建議直接在slave上通過:hadoop-daemon.sh stop tasktracker命令關掉tasktracker,這會導致namenode認為這些機器暫時失聯,在一個超時時間內(默認10min+30s)依然假設它們是正常的還會將任務發送給它們。

  • 在master上修改tasktracker-deny.list,添加相應機器
  • 在master上刷新節點配置情況:hadoop mradmin -refreshNodes  

此時在Web UI上立即就可以看到Nodes的數量減少了,而Exclude Nodes的數量增加了。可以點進去具體查看。

  • 在slave上關閉tasktracker進程(非必須):運行:hadoop-daemon.sh stop tasktracker  

4. 重新加入各個刪除的節點

  • 在master的tasktracker-deny.list刪除相應機器
  • 在master上刷新節點配置情況:hadoop mradmin -refreshNodes  
  • 在slave上重啟tasktracker進程:hadoop-daemon.sh start tasktracker  

注意:如果之前沒有關閉該slave上的tasktracker進程,需要先關閉再重新啟動。

 


hadoop配置完

上節:Hadoop集群的配置(一)

尾注:本系列文檔,筆者真機環境測試無誤得以分享,純屬原創,若有轉載,請注釋出處.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM