學習筆記_Hadoop完全分佈式搭建

集羣規劃

主機 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 "-------------------集羣已關閉-------------------"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章