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

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

    一個是active狀態的,一個是standby狀態的。當集羣運行時,只有active狀態的NameNode是正常工做的,standby狀態的NameNode是處於待命狀態的,時刻同步active狀態NameNode的數據。一旦active狀態的NameNode不能工做,經過手工或者自動切換,standby狀態的NameNode就能夠轉變爲active狀態的,就能夠繼續工做了。這就是高可靠。node

    在這裏,2個NameNode的數據實際上是實時共享的。新HDFS採用了一種共享機制,JournalNode集羣或者NFS進行共享。NFS是操做系統層面的,JournalNode是hadoop層面的,咱們這裏使用JournalNode集羣進行數據共享。apache

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


1、配置前準備ssh

一、SSH免登錄(略)
jvm

二、文件/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

配置後須要執行ide

source /etc/profile

纔會生效oop

三、文件/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

纔會生效


2、配置詳細

一、各機器職責

    機器有限,我這裏選用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。

二、文件hadoop-env.sh

修改一行配置

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


三、文件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>


四、文件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>


五、mapred-site.xml

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


六、yarn-site.xml

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


七、slaves

os1
os2
os3
os4
os5


八、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目錄,在data目錄下新建文件myid

和zoo.cnf中的配置保持一致,os1中的myid編輯爲1,os2中的myid編輯爲2,os3中的myid編輯爲3


九、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>


3、啓動過程

一、啓動Zookeeper集羣

分別在os一、os二、os3上執行

zkServer.sh start

而後執行

zkServer.sh status

查看是否啓動,確保啓動後執行後面的步驟

三個節點都啓動後,執行

zkCli.sh

而後執行

ls /

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


二、格式化Zookeeper集羣,目的是在Zookeeper集羣上創建HA的相應節點

在os1上執行

hdfs zkfc –formatZK

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

格式化後驗證,執行

zkCli.sh

在執行

ls /

會出現下圖中紅色部分

則表示格式化成功

ls /hadoop-ha

會出現咱們配置的HA集羣名稱


三、啓動Journal集羣

分別在os一、os二、os3上執行

hadoop-daemon.sh start journalnode


四、格式化集羣上的一個NameNode

os1os2上任選一個便可,這裏我是在os1

hdfs namenode -format -clusterId ss


五、啓動集羣中步驟4中的NameNode

啓動os1上的NameNode

hadoop-daemon.sh start namenode


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

把NameNode的數據同步到os2上

hdfs namenode –bootstrapStandby

這條命令依舊須要手動敲


同步數據還有另外一種方法

直接copy數據到os2上

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

若是第一種方法同步失敗能夠採用第二種同步方法


七、啓動另個一NameNode

在os2上執行

hadoop-daemon.sh start namenode


八、啓動全部的DataNode

hadoop-daemons.sh start datanode


九、啓動Yarn

start-yarn.sh


十、啓動Hbase

start-hbase.sh


十一、啓動ZKFC

分別在os一、os2上執行

hadoop-daemon.sh start zkfc



至此配置成功


結束語

因爲是測試環境,且機器有限,每一個機器上職責重,若是是在實際生產中,我的認爲,做爲任務的分發分配,應該給ResourceManager分配一臺機器,這臺機器只僅僅只運行ResourceManager,journal集羣也該分配三臺機器來共享元數據。我這裏的主節點同時也是從節點,實際生產中不會這麼作。

相關文章
相關標籤/搜索