Hadoop集群的配置(二)
摘要: hadoop集群配置系列文檔,是筆者在實驗室真機環境實驗后整理而得。以便隨后工作所需,做以知識整理,另則與博客園朋友分享實驗成果,因為筆者在學習初期,也遇到不少問題。但是網上一些文檔大多互相抄襲,里面錯誤百出。筆者結合自學書籍視頻等資料,完成這一套配置資料。實驗結果和過程經過反復測試無誤后方整理出來的。配置過程中,初學者若有實驗環境,可以在真機環境下完成,若無條件,可補習下虛擬機與Linux操作系統的基礎知識,以及里面對linux常規命令使用,建議讀者邊配置學學習。(本文原創/整理,轉載請標注原文出處: Hadoop集群的配置(二) )
2015年7月12日10:40:04
相關文章
- 【Oracle RAC集群搭建1】 集群概念介紹
- 【Oracle RAC集群搭建2】 ORACLE集群概念和原理
- 【Oracle RAC集群搭建3】 RAC 工作原理和相關組件
- 【Oracle RAC集群搭建4】 緩存融合技術
- 【Oracle RAC集群搭建5】 RAC 特殊問題和實戰經驗
- 【Oracle RAC集群搭建6】 ORACLE 11 G版本2 RAC在LINUX上使用NFS安裝前准備
- 【Oracle RAC集群搭建7】 ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC集群安裝
- 【Oracle RAC集群搭建8】 ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC數據庫安裝
- 【Oracle RAC集群搭建9】 ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC基本測試與使用
-
【MySql集群搭建】 真機環境下MySQL-Cluster搭建文檔
-
【Hadoop集群搭建1】Hadoop集群的配置
-
【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配置完
尾注:本系列文檔,筆者真機環境測試無誤得以分享,純屬原創,若有轉載,請注釋出處.