hadoop2.5.2HA高可靠性集群搭建(zookeeper3.4.6+hbase0.98.11)

xmnx 9年前發布 | 22K 次閱讀 Hadoop 分布式/云計算/大數據

在hadoop2中新的NameNode不再是只有一個,可以有多個(目前只支持2個)。每一個都有相同的職能。 一個是active狀態的,一個是standby狀態的。當集群運行時,只有active狀態的NameNode是正常工作的,standby狀態的 NameNode是處于待命狀態的,時刻同步active狀態NameNode的數據。一旦active狀態的NameNode不能工作,通過手工或者自 動切換,standby狀態的NameNode就可以轉變為active狀態的,就可以繼續工作了。這就是高可靠。 在這里,2個NameNode的數據其實是實時共享的。新HDFS采...

    在hadoop2中新的NameNode不再是只有一個,可以有多個(目前只支持2個)。每一個都有相同的職能。

    一個是active狀態的,一個是standby狀態的。當集群運行時,只有active狀態的NameNode是正常工作的,standby狀態的NameNode是處于待命狀態的,時刻同步active狀態NameNode的數據。一旦active狀態的NameNode不能工作,通過手工或者自動切換,standby狀態的NameNode就可以轉變為active狀態的,就可以繼續工作了。這就是高可靠。

    在這里,2個NameNode的數據其實是實時共享的。新HDFS采用了一種共享機制,JournalNode集群或者NFS進行共享。NFS是操作系統層面的,JournalNode是hadoop層面的,我們這里使用JournalNode集群進行數據共享。

    這就需要使用ZooKeeper集群進行選擇了。HDFS集群中的兩個NameNode都在ZooKeeper中注冊,當active狀態的NameNode出故障時,ZooKeeper能檢測到這種情況,它就會自動把standby狀態的NameNode切換為active狀態。


一、配置前準備

1、SSH免登陸(略)

2、文件/etc/profile

export PATH=.:$PATH
export CLASSPATH=.:$CLASSPATH

#java
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin

#zookeeper
export ZOOKEEPER_HOME=/home/mars/zookeeper
export CLASSPATH=$CLASSPATH:$ZOOKEEPER_HOME/lib
export PATH=$PATH:$ZOOKEEPER_HOME/bin

#hadoop
export HADOOP_HOME=/home/mars/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop/
export CLASSPATH=$CLASSPATH:$HADOOP_HOME/lib
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin  

#hbase
export HBASE_HOME=/home/mars/hbase
export CLASSPATH=$CLASSPATH:$HBASE_HOME/lib
export PATH=$PATH:$HADOOP_HOME/bin

配置后需要執行

source /etc/profile

才會生效

3、文件/etc/host

127.0.0.1       localhost
192.168.16.217 os1
192.168.16.218 os2
192.168.16.212 os3
192.168.16.213 os4
192.168.16.214 os5

配置后需要執行

source /etc/hosts

才會生效


二、配置詳細

1、各機器職責

    機器有限,我這里選用5臺機器配置,各自職責如下


進程 os1 os2 os3 os4 os5
NN NameNode 不是 不是 不是
DN DateNode
JN JournalNode 不是 不是
Zoo QuorumPeerMain 不是 不是
yarn ResourceManager 不是 不是 不是 不是

NodeManager
hbase HMaster 不是 不是 不是 不是

HRegionServer
ZKFC DFSZKFailoverController 不是 不是 不是


     配置文件一共包括6個,分別是hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和slaves。

2、文件hadoop-env.sh

修改一行配置

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

3、文件core-site.xml

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://whcx</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/mars/hadoop/tmp</value>
        </property>
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>os1:2181,os2:2181,os3:2181</value>
        </property>
</configuration>


4、文件hdfs-site.xml

<configuration>
    <property>
        <name>dfs.name.dir</name>
        <value>/home/mars/hadoop/tmp/name</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/home/mars/hadoop/tmp/data,/sas/hadoop/data</value>
        <!-- /sas/hadoop/data 這臺電腦掛載了另一個盤 -->
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.nameservices</name>
        <value>whcx</value>
    </property>
    <property>
        <name>dfs.ha.namenodes.whcx</name>
        <value>os1,os2</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.whcx.os1</name>
        <value>os1:9000</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.whcx.os1</name>
        <value>os1:50070</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.whcx.os2</name>
        <value>os2:9000</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.whcx.os2</name>
        <value>os2:50070</value>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://os1:8485;os2:8485;os3:8485/whcx</value>
    </property>
         <property>
        <name>dfs.ha.automatic-failover.enabled.whcx</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.whcx</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/home/mars/hadoop/tmp/journal</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/mars/.ssh/id_rsa</value>
    </property>
</configuration>


5、mapred-site.xml

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>


6、yarn-site.xml

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>os1</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>


7、slaves

os1
os2
os3
os4
os5

8、zookeeper配置

zookeeper中/conf/zoo.cnf

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/mars/zookeeper/data
clientPort=2181
server.1=os1:2888:3888
server.2=os2:2888:3888
server.3=os3:2888:3888

zookeeper中新建data目錄,新建文件myid

os1中的myid編輯為1,os2中的myid編輯為2,os3中的myid編輯為3


9、hbase配置

文件hbase-site.xml

<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://whcx/hbase</value><!--這里必須跟core-site.xml中的配置一樣-->
        </property>
        <!-- 開啟分布式模式 -->
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <!--    這里是對的,只配置端口,為了配置多個HMaster -->
        <property>
                <name>hbase.master</name>
                <value>os2:60000</value>
        </property>

    <property>
                <name>hbase.tmp.dir</name>
                <value>/home/mars/hbase/tmp</value>
    </property>
        <!-- Hbase的外置zk集群時,使用下面的zk端口 -->
    <property>
                <name>hbase.zookeeper.quorum</name>
                <value>os1:2181,os2:2181,os3:2181</value>
    </property>
</configuration>


三、啟動過程

1、啟動Zookeeper集群

分別在os1、os2、os3上執行

zkServer.sh start

然后執行

zkServer.sh status

查看是否啟動,確保啟動后執行后面的步驟

三個節點都啟動后,執行

zkCli.sh

然后執行

ls /

查看Zookeeper集群中是否有HA節點


2、格式化Zookeeper集群,目的是在Zookeeper集群上建立HA的相應節點

在os1上執行

hdfs zkfc –formatZK

(注意,這條命令最好手動輸入,直接copy執行有可能會有問題)

格式化后驗證,執行

zkCli.sh

在執行

ls /

會出現下圖中紅色部分

hadoop2.5.2HA高可靠性集群搭建(zookeeper3.4.6+hbase0.98.11)

則表示格式化成功

ls /hadoop-ha

會出現我們配置的HA集群名稱

hadoop2.5.2HA高可靠性集群搭建(zookeeper3.4.6+hbase0.98.11)


3、啟動Journal集群

分別在os1、os2、os3上執行

hadoop-daemon.sh start journalnode

4、格式化集群上的一個NameNode

os1os2上任選一個即可,這里我是在os1

hdfs namenode -format -clusterId ss

5、啟動集群中步驟4中的NameNode

啟動os1上的NameNode

hadoop-daemon.sh start namenode

6、把NameNode的數據同步到另一個NameNode上

把NameNode的數據同步到os2上

hdfs namenode –bootstrapStandby

這條命令依舊需要手動敲


同步數據還有另一種方法

直接copy數據到os2上

scp -r /home/mars/hadoop/tmp mars@os2:/home/mars/hadoop/tmp

如果第一種方法同步失敗可以采用第二種同步方法


7、啟動另個一NameNode

在os2上執行

hadoop-daemon.sh start namenode

8、啟動所有的DataNode

hadoop-daemon.sh start namenode


9、啟動Yarn

start-yarn.sh


10、啟動Hbase

start-hbase.sh


11、啟動ZKFC

分別在os1、os2上執行

hadoop-daemon.sh start zkfc

hadoop2.5.2HA高可靠性集群搭建(zookeeper3.4.6+hbase0.98.11)

hadoop2.5.2HA高可靠性集群搭建(zookeeper3.4.6+hbase0.98.11)

hadoop2.5.2HA高可靠性集群搭建(zookeeper3.4.6+hbase0.98.11)


至此配置成功


結束語

由于是測試環境,且機器有限,每個機器上職責重,如果是在實際生產中,個人認為,作為任務的分發分配,應該給ResourceManager分配一臺機器,這臺機器只僅僅只允許ResourceManager,journal集群也該分配三臺機器來共享元數據。我這里的主節點同時也是從節點,實際生產中不會這么做。


 本文由用戶 xmnx 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!