集羣規劃
主機 | master | slave01 | slave02 |
---|---|---|---|
hdfs | NameNode | - | SecondaryNameNode |
DataNode | DataNode | DataNode | |
historyserver | - | - | |
yarn | - | - | ResourceManager |
NodeManager | NodeManager | NodeManager |
環境準備
三臺已配置過環境的主機
- 我這裏三臺主機分別命名爲master、slave01和slave02
- 普通用戶名hadoop,密碼相同(方便以後操作)
- 網絡環境與java環境都已設置好
- 設置主機名與ip映射,每臺主機都需要設置所有三臺主機的主機名與ip映射
# vi /etc/hosts
配置NTP時間服務器
- 把master這臺服務器配置爲時間服務器,然後集羣內其他服務器都來同步這臺服務器的時間
- 目的: 集羣內部所有服務器時間一致
1.調整時間(三臺)
- 檢查當前系統時區
# date -R
- 修改時區(如果最後一位不是+0800)
# rm -rf /etc/localtime
# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
master
1.同步時間
- 關閉ntpd進程
# service ntpd stop
- 同步當前服務器時間
# ntpdate cn.pool.ntp.org
2.檢查軟件包
- 查看ntp軟件包是否已安裝
ntp-4.2.4p8-3.el6.centos.x86_64
# rpm -qa | grep ntp
- 安裝ntp軟件包(如果沒有安裝)
# yum -y install ntp
3.修改ntp配置文件
# vi /etc/ntp.conf
- 去掉下面這行前的#,並將網段修改爲自己的網段
restrict 192.168.93.0 mask 255.255.255.0 nomodify notrap
- 註釋掉以下幾行
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
- 去掉下面幾行前的#,如果文件中沒有這兩行,需要手動添加
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
- 重啓ntp服務
# service ntpd start
# chkconfig ntpd on
slave01、slave02
1.關閉ntpd進程,設置默認關閉
# service ntpd stop
# chkconfig ntpd off
2.同步master1的服務器時間
# ntpdate master
- 如果出現no server suitable for synchronization found錯誤,可等待一會兒再試
3.制定計劃任務,週期性同步時間
# crontab -e
*/10 * * * * /usr/sbin/ntpdate master
# service crond restart
設置SSH免祕鑰登錄
- 三臺主機分別生成自己的一對公私鑰對,並拷貝給所有主機(包括自己)
公私鑰對保存在/home/hadoop/.ssh/下,id_rsa.pub與id_rsa
如果生成錯誤就刪除這兩個文件後重新生成
拷貝後需要輸入一次yes和密碼
$ ssh-keygen -t rsa
$ ssh-copy-id master
$ ssh-copy-id slave01
$ ssh-copy-id slave02
配置Hadoop完全分佈
master
1.上傳壓縮包到/opt/softwares
2.解壓
$ tar -zxf /opt/softwares/hadoop-2.5.0-cdh5.3.6.tar.gz -C /opt/modules/
3.修改配置文件
- hadoop-env.sh、yarn-env.sh、mapred-env.sh
export JAVA_HOME=/opt/modules/jdk1.7.0_79
- core-site.xml
<!--HDFS集羣訪問入口地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<!--聲明存放數據的目錄-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.5.0-cdh5.3.6/data</value>
</property>
- slaves
聲明哪些服務器是datanode
每行一個主機名
master
slave01
slave02
- hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value> <!--副本數-->
</property>
<!--secondarynamenode所在主機-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave02:50090</value>
</property>
<!--namenode所在主機-->
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<!-- 關閉權限檢查用戶或用戶組 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
- yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>slave01</value>
</property>
<!-- NodeManager獲取數據的方式是shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--啓用日誌聚合功能-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--日誌保存時間-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
- mapred-site.xml
<!--mapreduce計算模型運行在yarn平臺-->
<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>
4.拷貝到其餘主機
- 可以刪除doc幫助文檔,減少scp copy文件的時間
$ rm -rf share/doc/
$ scp -r hadoop-2.5.0-cdh5.3.6/ slave01:/opt/modules/
$ scp -r hadoop-2.5.0-cdh5.3.6/ slave02:/opt/modules/
5.格式化NameNode
- 在master上輸入
$ bin/hdfs namenode -format
編寫shell語句一鍵開啓和關閉集羣
- start-cluster.sh
#!/bin/bash
echo "-------------------正在啓動集羣-------------------"
echo "-------------------正在啓動NameNode-------------------"
ssh hadoop@master '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start namenode'
echo "-------------------正在啓動SecodaryNameNode-------------------"
ssh hadoop@slave02 ' /opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start secondarynamenode'
echo "-------------------正在啓動DataNode-------------------"
for i in hadoop@master hadoop@slave01 hadoop@slave02
do
ssh $i '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start datanode'
done
echo "-------------------正在啓動yarn-------------------"
echo "-------------------正在啓動ResourceManager-------------------"
ssh hadoop@slave01 '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh start resourcemanager'
echo "-------------------正在啓動NodeManager-------------------"
for i in hadoop@master hadoop@slave01 hadoop@slave02
do
ssh $i '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh start nodemanager'
done
echo "-------------------正在啓動JobHistory-------------------"
ssh hadoop@master '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/mr-jobhistory-daemon.sh start historyserver'
echo "-------------------集羣已啓動-------------------"
- stop-cluster.sh
#!/bin/bash
echo "-------------------正在關閉JobHistory-------------------"
ssh hadoop@master '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/mr-jobhistory-daemon.sh stop historyserver'
echo "-------------------正在關閉yarn-------------------"
echo "-------------------正在關閉ResourceManager-------------------"
ssh hadoop@slave01 '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh stop resourcemanager'
echo "-------------------正在關閉NodeManager-------------------"
for i in hadoop@master hadoop@slave01 hadoop@slave02
do
ssh $i '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh stop nodemanager'
done
echo "-------------------正在關閉NameNode-------------------"
ssh hadoop@master '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh stop namenode'
echo "-------------------正在關閉SecodaryNameNode-------------------"
ssh hadoop@slave02 ' /opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh stop secondarynamenode'
echo "-------------------正在關閉DataNode-------------------"
for i in hadoop@master hadoop@slave01 hadoop@slave02
do
ssh $i '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh stop datanode'
done
echo "-------------------集羣已關閉-------------------"