Hadoop學習筆記-007-CentOS_6.5_64_HA高可用-Zookeeper3.4.5安裝Yarn Hadoop2.6

參考:http://blog.csdn.net/u010270403/article/details/51444677node

 

虛擬機中共五個centos系統,每一個系統有兩個用戶root和hadoop:cdh1,cdh2,cdh3,cdh4,cdh5web

集羣規劃shell

 

第一步,切換到hadoop的家目錄下,把已經下載好的hadoop放到/home/hadoop/app目錄下並解壓(以cdh1爲例)apache

#tar zxvf hadoop-2.6.0-cdh5.4.5.tar.gz

 

 

第二步,刪除hadoop的壓縮文件bootstrap

# rm -rf hadoop-2.6.0-cdh5.4.5.tar.gz

 

 

第三步,配置環境變量centos

# vi /home/hadoop/.bash_profile(hadoop用戶)瀏覽器

# vi /etc/profile(root用戶,全部節點都須要配置)bash

添加:app

HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.4.5
export PATH=$PATH:$HADOOP_HOME/bin

 

 

第四步,使環境變量文件即時生效ssh

# source /home/hadoop/.bash_profile(Hadoop用戶)

 

 

# source /etc/profile(root用戶)

 

 

第五步,進入~/app/hadoop-2.6.0-cdh5.4.5/etc/hadoop目錄,修改配置文件

配置hadoop-env.sh

原配置JAVA_HOME改成:

export JAVA_HOME=/home/hadoop/app/jdk1.7.0_79

 

 

配置core-site.xml

添加:

<property>  
    <name>fs.defaultFS</name>  
    <value>hdfs://cluster1</value>  
</property>  
<!-- 這裏的值指的是默認的HDFS路徑 ,取名爲cluster1 -->  
<property>  
    <name>hadoop.tmp.dir</name>  
    <value>/home/hadoop/data/tmp</value>  
</property>  
<!-- hadoop的臨時目錄,若是須要配置多個目錄,須要逗號隔開,data目錄須要咱們本身建立 -->  
<property>  
    <name>ha.zookeeper.quorum</name>  
    <value>cdh3:2181,cdh4:2181,cdh5:2181</value>  
</property>  
<!-- 配置Zookeeper 管理HDFS -->

 

 

配置hdfs-site.xml

添加:

<property>  
        <name>dfs.replication</name>  
        <value>3</value>  
</property>  
<!-- 數據塊副本數爲3 -->  
<property>  
        <name>dfs.permissions</name>  
        <value>false</value>  
</property>  
<property>  
        <name>dfs.permissions.enabled</name>  
        <value>false</value>  
</property>  
<!-- 權限默認配置爲false -->  
<property>  
        <name>dfs.nameservices</name>  
        <value>cluster1</value>  
</property>  
<!-- 命名空間,它的值與fs.defaultFS的值要對應,namenode高可用以後有兩個namenode,cluster1是對外提供的統一入口 -->  
<property>  
        <name>dfs.ha.namenodes.cluster1</name>  
        <value>nn1,nn2</value>  
</property>  
<!-- 指定 nameService 是 cluster1 時的nameNode有哪些,這裏的值也是邏輯名稱,名字隨便起,相互不重複便可 -->  
<property>  
        <name>dfs.namenode.rpc-address.cluster1.nn1</name>  
        <value>cdh1:9000</value>  
</property>  
<!-- CDHNode1 rpc地址 -->  
<property>  
        <name>dfs.namenode.http-address.cluster1.nn1</name>  
        <value>cdh1:50070</value>  
</property>  
<!-- CDHNode1 http地址 -->  
<property>  
        <name>dfs.namenode.rpc-address.cluster1.nn2</name>  
        <value>cdh2:9000</value>  
</property>  
<!-- CDHNode2 rpc地址 -->  
<property>  
        <name>dfs.namenode.http-address.cluster1.nn2</name>  
        <value>cdh2:50070</value>  
</property>  
<!-- CDHNode2 http地址 -->  
<property>  
        <name>dfs.ha.automatic-failover.enabled</name>  
        <value>true</value>  
</property>  
<!-- 指定NameNode的元數據在JournalNode上的存放位置   journalnode在集羣規劃中屬於全部節點 -->  
<property>  
        <name>dfs.namenode.shared.edits.dir</name>  
        <value>qjournal://cdh1:8485;cdh2:8485;cdh3:8485;cdh4:8485;cdh5:8485/cluster1</value>  
</property>  
<!-- 指定journal -->  
<property>  
        <name>dfs.client.failover.proxy.provider.cluster1</name>  
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  
</property>  
<!-- 指定JournalNode在本地磁盤存放數據的位置-->  
<property>  
        <name>dfs.journalnode.edits.dir</name>  
        <value>/home/hadoop/data/journaldata/jn</value>  
</property>  
<!-- 指定JournalNode集羣在對nameNode的目錄進行共享時,本身存儲數據的磁盤路徑 -->  
<property>  
        <name>dfs.ha.fencing.methods</name>  
        <value>shell(/bin/true)</value>  
</property>  
<property>  
<name>dfs.ha.fencing.ssh.private-key-files</name>  
<value>/home/hadoop/.ssh/id_rsa</value>  
</property>  
<property>  
<name>dfs.ha.fencing.ssh.connect-timeout</name>  
<value>60000</value>  
</property>  
<!-- 默認配置 -->  
<property>  
        <name>dfs.namenode.handler.count</name>  
        <value>100</value>  
</property>

 

 

 

 

配置slaves(配置子節點的位置,也就是datanode的位置)

 

YARN安裝配置

配置mapred-site.xml

首先複製mapred-site文件:# cp mapred-site.xml.template mapred-site.xml

 

配置mapred-site.xml

添加:

<!-- 指定運行mapreduce的環境是Yarn,與hadoop1不一樣的地方 -->
<property>  
        <name>mapreduce.framework.name</name>  
        <value>yarn</value>  
</property>

 

配置yarn-site.xml

添加:

<property>  
      <name>yarn.resourcemanager.connect.retry-interval.ms</name>  
      <value>2000</value>  
 </property>  
 <!-- 超時的週期 -->  
 <property>  
      <name>yarn.resourcemanager.ha.enabled</name>  
      <value>true</value>  
 </property>  
 <!-- 打開高可用 -->  
 <property>  
      <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>  
      <value>true</value>  
 </property>  
 <!-- 啓動故障自動恢復 -->  
 <property>  
      <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>  
      <value>true</value>  
 </property>  
 <property>  
      <name>yarn.resourcemanager.cluster-id</name>  
       <value>yarn-rm-cluster</value>  
 </property>  
 <!-- 給yarn cluster 取個名字yarn-rm-cluster -->  
 <property>  
      <name>yarn.resourcemanager.ha.rm-ids</name>  
      <value>rm1,rm2</value>  
 </property>  
 <!-- 給ResourceManager 取個名字 rm1,rm2 -->  
 <property>  
      <name>yarn.resourcemanager.hostname.rm1</name>  
      <value>cdh1</value>  
 </property>  
 <!-- 配置ResourceManager rm1 hostname -->  
 <property>  
      <name>yarn.resourcemanager.hostname.rm2</name>  
      <value>cdh2</value>  
 </property>  
 <!-- 配置ResourceManager rm2 hostname -->  
 <property>  
       <name>yarn.resourcemanager.recovery.enabled</name>  
      <value>true</value>  
 </property>  
 <!-- 啓用resourcemanager 自動恢復 -->  
 <property>  
      <name>yarn.resourcemanager.zk.state-store.address</name>  
       <value>cdh3:2181,cdh4:2181,cdh5:2181</value>  
 </property>  
 <!-- 配置Zookeeper地址 -->  
 <property>  
       <name>yarn.resourcemanager.zk-address</name>  
      <value>cdh3:2181,cdh4:2181,cdh5:2181</value>  
 </property>  
 <!-- 配置Zookeeper地址 -->  
 <property>  
       <name>yarn.resourcemanager.address.rm1</name>  
      <value>cdh1:8032</value>  
 </property>  
 <!--  rm1端口號 -->  
 <property>  
      <name>yarn.resourcemanager.scheduler.address.rm1</name>  
      <value>cdh1:8034</value>  
 </property>  
 <!-- rm1調度器的端口號 -->  
 <property>  
      <name>yarn.resourcemanager.webapp.address.rm1</name>  
      <value>cdh1:8088</value>  
 </property>  
 <!-- rm1 webapp端口號 -->  
 <property>  
      <name>yarn.resourcemanager.address.rm2</name>  
 <value>cdh2:8032</value>  
 </property>  
 <!-- rm2端口號 -->  
 <property>  
      <name>yarn.resourcemanager.scheduler.address.rm2</name>  
      <value>cdh2:8034</value>  
 </property>  
 <!-- rm2調度器的端口號 -->  
 <property>  
      <name>yarn.resourcemanager.webapp.address.rm2</name>  
      <value>cdh2:8088</value>  
 </property>  
 <!-- rm2 webapp端口號 -->  
 <property>  
       <name>yarn.nodemanager.aux-services</name>  
      <value>mapreduce_shuffle</value>  
 </property>  
 <property>  
       <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>  
      <value>org.apache.hadoop.mapred.ShuffleHandler</value>  
 </property>  
 <!-- 執行MapReduce須要配置的shuffle過程 -->

 

 

 

 

第六步,在cdh1上經過命令deploy.sh將Hadoop安裝目錄拷貝到其餘四個節點

查看cdh2的~/app目錄

 

在cdh1的~/tools目錄下執行deploy.sh批處理命令 

#./deploy.sh ~/app/hadoop-2.6.0-cdh5.4.5/ ~/app/ slave

 

 

驗證cdh2的~/app目錄

 

第七步,在cdh1的~/tools目錄下經過遠程命令runRemoteCmd.sh在全部節點按照目錄的規劃建立存儲數據目錄 (cdh1-cdh5)

#./runRemoteCmd.sh "mkdir -p /home/hadoop/data/name" all
#./runRemoteCmd.sh "mkdir -p /home/hadoop/data/hdfs/edits" all
#./runRemoteCmd.sh "mkdir -p /home/hadoop/data/datanode" all
#./runRemoteCmd.sh "mkdir -p /home/hadoop/data/journaldata/jn" all
#./runRemoteCmd.sh "mkdir -p /home/hadoop/data/tmp/dfs/name " all
#./runRemoteCmd.sh "touch /home/hadoop/app/hadoop-2.6.0-cdh5.4.5/etc/hadoop/excludes" all
#./runRemoteCmd.sh "mkdir -p /home/hadoop/data/pid" all

在cdh1的~/tools目錄下執行以上批處理命令

 

在其餘節點上驗證是否建立成功,以cdh2爲例

 

當初始化過程當中出錯時,要把相關目錄的文件刪除,而後再從新初始化

在cdh1的~/tools目錄下執行以上批處理命令:

#./runRemoteCmd.sh "rm -rf /home/hadoop/data/name/*" all
#./runRemoteCmd.sh "rm -rf /home/hadoop/data/hdfs/edits/*" all
#./runRemoteCmd.sh "rm -rf /home/hadoop/data/datanode/*" all
#./runRemoteCmd.sh "rm -rf /home/hadoop/data/journaldata/jn/*" all
#./runRemoteCmd.sh "rm -rf /home/hadoop/data/tmp/*" all

第八步,集羣初始化

啓動全部節點上面的Zookeeper進程

在cdh3的~/tools目錄下執行以上批處理命令:

#./runRemoteCmd.sh "~/app/zookeeper-3.4.5-cdh5.4.5/bin/zkServer.sh start" zookeeper

 

 

查看zookeeper進程

# ./runRemoteCmd.sh "jps" zookeeper

 

 

啓動全部節點上面的journalnode進程

在cdh1的~/tools目錄下執行以上批處理命令:

# ./runRemoteCmd.sh "~/app/hadoop-2.6.0-cdh5.4.5/sbin/hadoop-daemon.sh start journalnode" all

 

 

查看journalnode進程

# ./runRemoteCmd.sh "jps" all

 

 

在主節點上(cdh1)執行格式化

進入腳本目錄(如下命令從文檔直接複製若是出錯,則手動輸入便可)

# cd ~/app/hadoop-2.6.0-cdh5.4.5/bin/

 

Namenode格式化

# hdfs namenode –format

 

格式化高可用

hdfs zkfc –formatZK

 

啓動namenode

hdfs namenode

 

 

執行完上述命令後,cdh1程序就會處於等待狀態

 

在cdh1等待過程當中,進入cdh2執行#hdfs namenode –bootstrapStandby進行數據同步,等到cdh2執行完成後,返回cdh1按住ctrl+c退出便可。

 

進入~/tools目錄,關閉全部journalnode節點

./runRemoteCmd.sh "~/app/hadoop-2.6.0-cdh5.4.5/sbin/hadoop-daemon.sh stop journalnode" all

 

 

第九步,若是上面操做沒有問題,接着能夠一鍵啓動hdfs全部相關進程

進入/home/hadoop/app/hadoop-2.6.0-cdh5.4.5/sbin目錄,執行如下命令

#./start-dfs.sh

 

 

第十步,查看Hadoop進程

進入~/tools目錄下,執行

./runRemoteCmd.sh "jps" all

 

 

第十一步,殺掉active的namenode,驗證是否能夠完成namenode的切換

在本地(window系統)C:\Windows\System32\drivers\etc\hosts目錄下添加:

192.168.150.101 cdh1
192.168.150.102 cdh2
192.168.150.103 cdh3
192.168.150.104 cdh4
192.168.150.105 cdh5

在瀏覽器輸入:http://cdh1:50070/和http://cdh2:50070/

查看兩個namenode的狀態

 

 

查看cdh1節點namenode的進程號

#jps

 

殺掉active狀態的cdh1節點的namenode 

#kill -9 進程id

 

 

刷新http://cdh1:50070/和http://cdh2:50070/頁面

 

 

由上看出,cdh1:50070已經沒法訪問了,說明cdh1的namenode已經掛掉了,cdh2:50070的namenode狀態已經變成了active,說明成功完成了切換。

 

從新啓動cdh1的namenode#hdfs namenode,而後查看cdh1和cdh2兩個節點namenode的狀態

 

 

 

 

由上看出,cdh1啓動後狀態變成了standby。

 

 

第十二步,環境測試

上傳文件到HDFS系統

首先新建一個文件:

 

 

在hdfs上建立一個文件目錄 

# hadoop dfs -mkdir /datafs

 

 

把world.txt上傳到hdfs 

#hadoop dfs -put ~/world.txt /datafs

 

 

查看world.txt是否上傳成功 

# hadoop dfs -ls /datafs

 

若是上面操做沒有問題說明hdfs配置成功。

 

 

第十三步,啓動YARN

在cdh2進入~/app/hadoop-2.6.0-cdh5.4.5/sbin/目錄,執行./start-yarn.sh

 

本步在啓動的時候,提示我cdh四、cdh5的known_hosts文件須要配置其餘節點的祕鑰,用scp known_hosts hadoop@cdh3:~/.ssh/拷貝一份到這兩個節點便可。

 

在cdh1進入~/app/hadoop-2.6.0-cdh5.4.5/sbin/目錄,執行./yarn-daemon.sh start resourcemanager(啓動完成後cdh1和cdh2的resourcemanager就都起來了)

 

打開http://cdh1:8088和http://cdh2:8088兩個web界面

在打開cdh1:8088界面時,會首先提示「此爲standby的RM,將跳轉到active的cdh2:8088」,而後會自動跳轉到cdh2:8088界面

 

 

經過上述web界面提示能夠看出,cdh1是RM的standby,因此殺掉cdh2的resourcemanager進程,看一下效果

# ./yarn-daemon.sh stop resourcemanager

 

從新查看cdh1:8088界面

 

 

從新啓動cdh2的RM 

#./yarn-daemon.sh start resourcemanager

而後在cdh1和cdh2上查看ResourceManager狀態  

#yarn rmadmin -getServiceState rm1

 

 

 

 

由上能夠看出,cdh1變成了active,說明resourcemanager完成了切換。

 

 

第十四步,Wordcount示例測試

在cdh1上執行如下語句

#  hadoop jar /home/hadoop/app/hadoop-2.6.0-cdh5.4.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.4.5.jar wordcount /datafs/world.txt /datafs/out/

 

 

登陸http://cdh2:50070查看執行結果

 

 

 

 

 

 

 

 

 

第十五步,集羣關啓順序
關閉cdh1的resourcemanager,進入cdh1節點的~/app/hadoop-2.6.0-cdh5.4.5/sbin目錄,執行./yarn-daemon.sh stop resourcemanager  
#cd ~/app/hadoop-2.6.0-cdh5.4.5/sbin
#./yarn-daemon.sh stop resourcemanager


關閉yarn(也會關閉cdh2的resourcemanager),進入cdh2節點的~/app/hadoop-2.6.0-cdh5.4.5/sbin目錄,執行./stop-yarn.sh  
#cd ~/app/hadoop-2.6.0-cdh5.4.5/sbin
# ./stop-yarn.sh


關閉HDFS,進入cdh1節點的~/app/hadoop-2.6.0-cdh5.4.5/sbin目錄,執行./stop-dfs.sh 
# cd ~/app/hadoop-2.6.0-cdh5.4.5/sbin
#./stop-dfs.sh


關閉zookeeper,進入cdh3節點的~/tools目錄
#cd ~/tools/
#./runRemoteCmd.sh "~/app/zookeeper-3.4.5-cdh5.4.5/bin/zkServer.sh stop" zookeeper


查看進程,進入cdh1的~/tools目錄下
#cd ~/tools/
#./runRemoteCmd.sh "jps" all


再次啓動集羣
啓動zookeeper,進入cdh3節點的~/tools目錄
#cd ~/tools/
#./runRemoteCmd.sh "~/app/zookeeper-3.4.5-cdh5.4.5/bin/zkServer.sh start" zookeeper



啓動HDFS,進入cdh1節點的~/app/hadoop-2.6.0-cdh5.4.5/sbin目錄,執行./start-dfs.sh  
# cd ~/app/hadoop-2.6.0-cdh5.4.5/sbin
#./start-dfs.sh


啓動YARN,進入cdh1節點的~/app/hadoop-2.6.0-cdh5.4.5/sbin目錄,執行./start-yarn.sh  
# cd ~/app/hadoop-2.6.0-cdh5.4.5/sbin
#./start-yarn.sh



啓動resourcemanager,進入cdh2節點的~/app/hadoop-2.6.0-cdh5.4.5/sbin目錄
# cd ~/app/hadoop-2.6.0-cdh5.4.5/sbin
# ./yarn-daemon.sh start resourcemanager




查看進程,進入cdh1的~/tools目錄下
#cd ~/tools/
#./runRemoteCmd.sh "jps" all

 

至此,hadoop 的徹底分佈式集羣搭建完畢。

 

 

完成!

相關文章
相關標籤/搜索