Hadoop2的HA安裝(high availability):JournalNode+ zookeeper


前面介紹過使用NFS+zookeeper來解決namenode單點失敗問題,因為NFS可能也會存在單點問題,所以hadoop提供了一種叫做JournalNode技術,這項技術可以在JournalNode節點間共享數據

我們來介紹這一種技術:JournalNode+ zookeeper

Hadoop 版本:2.2.0

OS 版本: Centos6.4

Jdk 版本: jdk1.6.0_32

環境配置

機器名

Ip地址

功能

Hadoop1

192.168.124.135

NameNode, DataNode,

ResourceManager, NodeManager

Zookeeper

Zkfc

JournalNode

Hadoop2

192.168.124.136

NameNode

DataNode, NodeManager

Zookeeper

Zkfc

JournalNode

Hadoop3

192.168.124.137

DataNode, NodeManager

Zookeeper

Zkfc

JournalNode

在這里就不介紹安裝zookeeper,直接使用前面nfs+zookeeper安裝好的zookeeper

JournalNode也不需要安裝,通過配置就可以。

直接配置hadooper

vi etc/hadoop/hadoop-env.sh 修改jdk位置
export JAVA_HOME=/home/hadoop/jdk1.6.0_32

 

vi etc/hadoop/mapred-env.sh修改jdk位置

export JAVA_HOME=/home/hadoop/jdk1.6.0_32

 

vi etc/hadoop/yarn-env.sh修改jdk位置

export JAVA_HOME=/home/hadoop/jdk1.6.0_32

 

vi etc/hadoop/core-site.xml

<configuration>

    <property>

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

        <value>/home/hadoop/repo3/tmp</value>

        <description>A base for other temporary directories.</description>

    </property>

    <property>

        <name>fs.defaultFS</name>

        <value>hdfs://mycluster</value>

    </property>

    <property>

        <name>dfs.journalnode.edits.dir</name>

        <value>/home/hadoop/repo3/journal</value>

    </property>

    <property>

        <name>ha.zookeeper.quorum</name>

        <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>

    </property>

</configuration>

 

vi etc/hadoop/hdfs-site.xml

<configuration>

    <property>

        <name>dfs.replication</name>

        <value>2</value>

    </property>

    <property>

        <name>dfs.namenode.name.dir</name>

        <value>/home/hadoop/repo3/name</value>

    </property>

    <property>

        <name>dfs.datanode.data.dir</name>

        <value>/home/hadoop/repo3/data</value>

    </property>

        <property>

        <name>dfs.nameservices</name>

        <value>mycluster</value>

    </property>

        <property>

        <name>dfs.ha.namenodes.mycluster</name>

        <value>hadoop1,hadoop2</value>

    </property>

        <property>

        <name>dfs.namenode.rpc-address.mycluster.hadoop1</name>

        <value>hadoop1:9000</value>

    </property>

        <property>

        <name>dfs.namenode.http-address.mycluster.hadoop1</name>

        <value>hadoop1:50070</value>

    </property>

        <property>

        <name>dfs.namenode.rpc-address.mycluster.hadoop2</name>

        <value>hadoop2:9000</value>

    </property>

        <property>

        <name>dfs.namenode.http-address.mycluster.hadoop2</name>

        <value>hadoop2:50070</value>

    </property>

    <property>

      <name>dfs.namenode.shared.edits.dir</name>

      <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster</value>

    </property>

    <property>

        <name>dfs.client.failover.proxy.provider.mycluster</name>        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

    </property>

    <property>

        <name>dfs.ha.fencing.methods</name>

        <value>sshfence</value>

    </property>

        <property>

        <name>dfs.ha.fencing.ssh.private-key-files</name>

        <value>/home/hadoop/.ssh/id_rsa</value>

    </property>

        <property>

        <name>dfs.ha.automatic-failover.enabled</name>

        <value>true</value>

    </property>

</configuration>

 

vi etc/hadoop/yarn-site.xml

<configuration>

    <property>

        <description>the valid service name</description>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

    </property>

    <property>

        <description>The hostname of the RM.</description>

        <name>yarn.resourcemanager.hostname</name>

        <value>hadoop1</value>

    </property>

</configuration>

 

vi etc/hadoop/mapred-site.xml

<configuration>

    <property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

    </property>

</configuration>

 

vi etc/hadoop/slaves

hadoop1

hadoop2

hadoop3

運行hadoop

啟動zookeeper,在hadoop1 ,hadoop2, hadoop3上運行

cd /home/hadoop/zookeeper-3.4.5/bin

./zkServer.sh  start

 

格式化namenode和failovercontroler

failovercontroler也需要格式化: bin/hdfs zkfc -formatZK

在hadoop1節點上運行: bin/hdfs namenode -format -clusterid mycluster

在hadoop2節點上的namenode信息需要與hadoop1節點同步,不能通過簡單的格式化做到,hadoop2節點上的namenode需要向hadoop1的namenode發送數據請求。因此我們還需要啟動hadoop1上的namenode.

  在hadoop1上運行: bin/hdfs namenode

  在hadoop3上運行:bin/hdfs namenode  -bootstrapStandby

最后關閉hadoop1上的namenode,然后啟動整個hadoop集群。

啟動hadoop集群

cd /home/hadoop/hadoop-2.2.0

sbin/start-all.sh

從圖上可以看出,先啟動namenode,再啟動datanode, 再啟動journalnode, 再啟動ZK failover controller, 再啟動resourcemanger, 最后啟動nodemanager。

使用jps查看啟動的進程

在hadoop1上運行jps

在hadoop2上運行jps

在hadoop3上運行jps

查看namenode的狀態

  bin/hdfs haadmin -getServiceState hadoop1

 

  bin/hdfs haadmin -getServiceState hadoop2

從圖上可以看出hadoop2上的namenode處於active狀態,而hadoop1上的namenode處於standby狀態

這些信息也可以通過Hadoop的web界面得到。

在瀏覽器里輸入:http://hadoop1:50070

 

在瀏覽器里輸入:http://hadoop2:50070

 

這里就不介紹failover后,有興趣的可以看看nfs+zookeeper相關的內容


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM