分布式配置hadoop2.5.0 2.6.x
1. sudo vim /etc/hostname
在master的機器上,改成 master
在slave上寫 slave01,02,03......
配置好後重啟。
2. sudo vim /etc/hosts (此處最好改成內網中服務器的真實ip,不要用浮動ip,否則會出現“Problem binding to [master:9000] java.net.BindException: Cannot assign requested address; For more details see: http://wiki.apache.org/hadoop/BindException”錯誤)
192.168.1.121 Master
192.168.1.122 Slave1
3.ping master ping slave
4.ssh無密碼登錄。
這個操作是要讓 Master 節點可以無密碼 SSH 登陸到各個 Slave 節點上。
首先生成 Master 節點的公匙,在 Master 節點的終端中執行(因為改過主機名,所以還需要刪掉原有的再重新生成一次):
- cd ~/.ssh # 如果沒有該目錄,先執行一次ssh localhost
- rm ./id_rsa* # 刪除之前生成的公匙(如果有)
- ssh-keygen -t rsa # 一直按回車就可以
讓 Master 節點需能無密碼 SSH 本機,在 Master 節點上執行:
cat ./id_rsa.pub >> ./authorized_keys
完成後可執行 ssh Master
驗證一下(可能需要輸入 yes,成功後執行 exit
返回原來的終端)。接著在 Master 節點將上公匙傳輸到 Slave1 節點:
scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/ (由於服務器適用密鑰登陸,沒有密碼,此時需要用xftp工具,把id_rsa.pub傳送到各個slave節點)
接著在 Slave1 節點上,將 ssh 公匙加入授權:
- mkdir ~/.ssh # 如果不存在該文件夾需先創建,若已存在則忽略
- cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
- rm ~/id_rsa.pub # 用完就可以刪掉了
如果有其他 Slave 節點,也要執行將 Master 公匙傳輸到 Slave 節點、在 Slave 節點上加入授權這兩步。
這樣,在 Master 節點上就可以無密碼 SSH 到各個 Slave 節點了,可在 Master 節點上執行如下命令進行檢驗
ssh Slave1
5.配置集群環境
集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5個配置文件,更多設置項可點擊查看官方說明,這裏僅設置了正常啟動所必須的設置項: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
1, 文件 slaves,將作為 DataNode 的主機名寫入該文件,每行一個,默認為 localhost,所以在偽分布式配置時,節點即作為 NameNode 也作為 DataNode。分布式配置可以保留 localhost,也可以刪掉,讓 Master 節點僅作為 NameNode 使用。
本教程讓 Master 節點僅作為 NameNode 使用,因此將文件中原來的 localhost 刪除,只添加一行內容:Slave1。
2.文件 core-site.xml 改為下面的配置:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
3.件 hdfs-site.xml,dfs.replication 一般設為 3,但我們只有一個 Slave 節點,所以 dfs.replication 的值還是設為 1:
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
4。文件 mapred-site.xml (可能需要先重命名,默認文件名為 mapred-site.xml.template),然後配置修改如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>
5.文件 yarn-site.xml:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
6.配置好後,將 Master 上的 /usr/local/Hadoop 文件夾復制到各個節點上。因為之前有跑過偽分布式模式,建議在切換到集群模式前先刪除之前的臨時文件。在 Master 節點上執行:
cd /usr/local
sudo rm -r ./hadoop/tmp # 刪除 Hadoop 臨時文件
sudo rm -r ./hadoop/logs/* # 刪除日誌文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先壓縮再復制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop
在 Slave1 節點上執行:
sudo rm -r /usr/local/hadoop # 刪掉舊的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop
同樣,如果有其他 Slave 節點,也要執行將 hadoop.master.tar.gz 傳輸到 Slave 節點、在 Slave 節點解壓文件的操作。首次啟動需要先在 Master 節點執行 NameNode 的格式化:
hdfs namenode -format # 首次運行需要執行初始化,之後不需要
接著可以啟動 hadoop 了,啟動需要在 Master 節點上進行:
- start-dfs.sh
- start-yarn.sh
- mr-jobhistory-daemon.sh start historyserver
通過命令 jps
可以查看各個節點所啟動的進程。正確的話,在 Master 節點上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 進程,在 Slave 節點可以看到 DataNode 和 NodeManager 進程。
分布式配置hadoop2.5.0 2.6.x