1. 程式人生 > >Hadoop學習------Hadoop安裝方式之(三):分布式部署

Hadoop學習------Hadoop安裝方式之(三):分布式部署

之間 root用戶 jar .sh author tables eth1 report 標識

這裏為了方便直接將單機部署過的虛擬機直接克隆,當然也可以不這樣做,一個個手工部署。

技術分享

創建完整克隆——>下一步——>安裝位置。等待一段時間即可。

我這邊用了三臺虛擬機,分別起名master,slave1.slave2

1、修改主機名、ip

1.1關閉防火墻

CentOS系統默認開啟了防火墻,在開啟 Hadoop 集群之前,需要關閉集群中每個節點的防火墻。有防火墻會導致 ping 得通但 telnet 端口不通,從而導致 DataNode 啟動了,但 Live datanodes 為 0 的情況。

在 CentOS 6.x 中,可以通過如下命令關閉防火墻:

service iptables stop # 關閉防火墻服務

chkconfig iptables off # 禁止防火墻開機自啟,就不用手動關閉了

若用是 CentOS 7,需通過如下命令關閉(防火墻服務改成了 firewall):

systemctl stop firewalld.service # 關閉firewall

systemctl disable firewalld.service # 禁止firewall開機啟動

1.2 修改主機名

在 CentOS 6.x 中 vi /etc/sysconfig/network

在CentOS 7或者Ubuntu 中 vi /etc/hostname

技術分享

在其他兩節點同樣如此。分別改為slave1.slave2

1.3 修改ip地址

vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改ip 地址 然後重啟網卡

service network restart 發現重啟失敗

技術分享

這是因為基本系統的網絡相關配置都是基於eth0的,如果基於此克隆虛擬機繼續克隆或復制新的虛擬機,網卡的標識每一次都會自動加1變成eth1(第二次克隆會變成eth2),dmesg卻顯示內核只識別到網卡eth0。

解決辦法: 打開/etc/udev/rules.d/70-persistent-net.rules 記錄下,eth1網卡的mac地址00:0c:29:50:bd:17

接下來 vi//etc/sysconfig/network-scripts/ifcfg-eth0

將 DEVICE="eth0" 改成 DEVICE="eth1" ,

將 HWADDR="00:0c:29:8f:89:97" 改成上面的mac地址 HWADDR="00:0c:29:50:bd:17"

最後,重啟網絡 service network restart 然後就能重啟成功

1.4 修改hosts 使所用節點IP映射

在每臺虛擬機上進行如下操作。

vi /etc/hosts

技術分享

修改完成後需要重啟一下 reboot

2、打通master到slave節點的SSH無密碼登錄

2.1設置本機無密碼登錄(各節點都要)

之前在單機部署時已經設置過了,這裏再說一遍,沒有設置的可以看下

第一步:產生密鑰

ssh-keygen -t dsa -P ‘‘ -f ~/.ssh/id_dsa

第二部:導入authorized_keys

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

第二部導入的目的是為了無密碼等,這樣輸入如下命令:

ssh localhost

技術分享

2.2 設置遠程無密碼登錄

我這邊偷懶用的是root用戶,正規應該用hadoop用戶

進入slave1的.ssh目錄 cd /root/.ssh

復制公鑰文件到master

scp authorized_keys [email protected]:~/.ssh/authorized_keys_from_master

進入到master的.ssh目錄 將文件導入到authorized_keys

cat authorized_keys_from_master >> authorized_keys

此時 slave1 可以無密碼遠程登錄master

同理

進入slave2的.ssh目錄 cd /root/.ssh

復制公鑰文件到master

scp authorized_keys [email protected]:~/.ssh/authorized_keys_from_master

進入到master的.ssh目錄 將文件導入到authorized_keys

cat authorized_keys_from_master >> authorized_keys

然後 將master 的authorized_keys文件復制到slave1和slave2中,他們之間就可以互相無密碼遠程訪問。

scp authorized_keys [email protected]:~/.ssh/authorized_keys

scp authorized_keys [email protected]:~/.ssh/authorized_keys

ssh [email protected] 不需要密碼就直接進去了

技術分享

3、修改配置文件

集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5個配置文件,更多設置項可點擊查看官方說明,這裏僅設置了正常啟動所必須的設置項: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。

3.1 文件slaves

文件 slaves,將作為 DataNode 的主機名寫入該文件,每行一個,默認為 localhost,所以在偽分布式配置時,節點即作為 NameNode 也作為 DataNode。分布式配置可以保留 localhost,也可以刪掉讓 Master 節點僅作為 NameNode 使用。

這裏讓 Master 節點僅作為 NameNode 使用,因此將文件中原來的 localhost 刪除,只添加兩行內容:slave1。slave2

cd /usr/local/hadoop/etc/hadoop/

vi slaves

技術分享

3.2 core-site.xml

cd /usr/local/hadoop/etc/hadoop/

vi core-site.xml

在其中的<configuration>添加以下內容

<property>

<name>hadoop.tmp.dir</name>

<value>file:/usr/local/hadoop/tmp</value>

<description>Abase for other temporary directories.</description>

</property>

<property>

<name>fs.defaultFS</name>

<value>hdfs://master:9000</value>

</property>

3.3 hdfs-site.xml

dfs.replication 的值是副節點個數,有幾個就寫幾個,這邊設為2

cd /usr/local/hadoop/etc/hadoop/

vi hdfs-site.xml

其中的<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>

3.4 mapred-site.xml

cd /usr/local/hadoop/etc/hadoop/

需要將mapred-site.xml.template 文件改名或者復制一份

mv mapred-site.xml.template mapred-site.xml

或 cp mapred-site.xml.template mapred-site.xml

然後在進行編輯 vi mapred-site.xml

<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>

3.5 yarn-site.xml

cd /usr/local/hadoop/etc/hadoop/

vi 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>

3.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 # 先壓縮再復制

scp ./hadoop.master.tar.gz slave1:/usr/local

在slave1

tar -zxf ~/hadoop.master.tar.gz -C /usr/local

chown -R hadoop /usr/local/hadoop

在slave2上執行同樣操作。就能將Hadoop部署好。

每個節點部署好後

在節點上執行NameNode 的格式化

hdfs namenode –format 或者 hadoop namenode format

啟動hdfs 在master節點上執行 start-dfs.sh

啟動yarn 在master節點上執行 start-yarn.sh

啟動job history server 在master節點上執行 mr-jobhostory-daemon.sh start historyserver

通過命令 jps 可以查看各個節點所啟動的進程。正確的話,在 Master 節點上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 進程

技術分享

在 Slave 節點可以看到 DataNode 和 NodeManager 進程

技術分享

缺少任一進程都表示出錯。另外還需要在 Master 節點上通過命令 hdfs dfsadmin -report 查看 DataNode 是否正常啟動,如果 Live datanodes 不為 0 ,則說明集群啟動成功。

同樣我們可以通過 Web 頁面看到查看 DataNode 和 NameNode 的狀態:http://master:50070/。如果不成功,可以通過啟動日誌排查原因。

3.7執行分布式實例

創建 HDFS 上的用戶目錄

hdfs dfs -mkdir -p /user/hadoop

將 /usr/local/hadoop/etc/hadoop 中的配置文件作為輸入文件復制到分布式文件系統中

hdfs dfs -mkdir input

hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

通過查看 DataNode 的狀態(占用大小有改變),輸入文件確實復制到了 DataNode 中

技術分享

接著就可以運行 MapReduce 作業了

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output ‘dfs[a-z.]+‘

運行時的輸出信息與偽分布式類似,會顯示 Job 的進度。

可能會有點慢,但如果遲遲沒有進度,比如 5 分鐘都沒看到進度,那不妨重啟 Hadoop 再試試。若重啟還不行,則很有可能是內存不足引起,建議增大虛擬機的內存,或者通過更改 YARN 的內存配置解決。

同樣可以通過 Web 界面查看任務進度 http://master:8088/cluster,在 Web 界面點擊 “Tracking UI” 這一列的 History 連接,可以看到任務的運行信息

4 、關閉Hadoop集群

同樣關閉Hadoop集群也是在Master節點上執行的

stop-yarn.sh

stop-dfs.sh

mr-jobhistory-daemon.sh stop historyserver

Hadoop學習------Hadoop安裝方式之(三):分布式部署