大數據與人工智能入門到放棄(04 回顧篇 hadoop高可用【HA】的搭建)

記:

最近公司任務比較多,所以小忙之中,在晚上抽出一丟丟時間來搭建Hadoop的高可用集羣。

集羣規劃準備

此次搭建是在03篇中搭建好完全分佈式的情況下進行修改。因爲機器配置受限,但是爲了能搭建出來高可用的集羣效果。所以把主、備NameNode啓動在節點爲master,node1的機器上,master,node1,node2上都配置啓動了JournalNodes進程(爲了兩個NameNode同步數據);zookeeper啓動在master,node1,node2上。

此次Hadoop搭建高可用集羣參考的是官方的文檔(http://hadoop.apache.org/docs/r2.7.6/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html#Configuration_overview

修改配置文件(以主機master爲例)

1)hdfs-site.xml的配置如下:


<configuration>
        <!-- 副本數 -->
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <!-- 邏輯名稱 -->
        <property>
                <name>dfs.nameservices</name>
                <value>mycluster</value>
        </property>
        <!-- 邏輯名稱下的兩個節點的邏輯名稱 -->
        <property>
                <name>dfs.ha.namenodes.mycluster</name>
                <value>nn1,nn2</value>
        </property>
        <!-- 兩臺實現遠程調用的namenode主機 -->
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn1</name>
                <value>master:8020</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn2</name>
                <value>node1:8020</value>
        </property>
        <!-- 瀏覽器的訪問主機和端口 -->
        <property>
                <name>dfs.namenode.http-address.mycluster.nn1</name>
                <value>master:50070</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn2</name>
                <value>node1:50070</value>
        </property>
        <!-- 啓動journalNode服務的節點 -->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://master:8485;node1:8485;node2:8485/mycluster</value>
        </property>
        <!-- 代理類,確定哪個NameNode正在提供服務 -->
        <property>
                <name>dfs.client.failover.proxy.provider.mycluster</name>      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <!-- 選用ssh的方式,到active中的NameNode殺死進程 -->
        <property>
                <name>dfs.ha.fencing.methods</name>
                <value>sshfence</value>
        </property>

        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/root/.ssh/id_rsa</value>
        </property>
        
        <!-- journalnode存放的數據會扔到這個目錄文件下 -->
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/var/junxi/hadoop/ha/journalnode</value>
        </property>
        <!-- 開啓故障自動切換功能 -->
         <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
</configuration>

2)修改core-site.xml

<configuration>
        <!-- mycluster是邏輯名稱,它必須與hdfs-site.xml所配置的邏輯名稱相同 -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://mycluster</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/var/junxi/hadoop/ha</value>
        </property>

        <!-- 指定zookeeper的節點地址 -->
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>master:2181,node1:2181,node2:2181</value>
        </property>
</configuration>

將修改的這兩個文件拷貝到主機node1和node2上,命令爲:

#注意,以下命令是在路徑爲:/opt/xige/hadoop-2.7.5/etc/hadoop目錄下執行的

scp core-site.xml hdfs-site.xml node1:`pwd`
scp core-site.xml hdfs-site.xml node2:`pwd`

Zookeeper配置

上傳zookeeper的壓縮包(zookeeper-3.4.12.tar.gz),解壓到路徑爲/opt/xige目錄下;

tar -zxf zookeeper-3.4.12.tar.gz -C /opt/xige

修改zookeeper的conf目錄下的目錄文件,將zoo_sample.cfg改名爲zoo.cfg,並且進入zoo.cfg文件中進行文本編輯。

#修改一下dataDir,改成自己想存放的路徑
dataDir=/var/junxi/zk
#配置zookeeper的服務節點,2888端口表示主從節點間的端口,3888是當發生主掛掉之後,它的選舉機制採用的端口
server.1=master:2888:3888
server.2=node1:2888:3888
server.3=node2:2888:3888

配置好之後,把zookeeper分發給node1和node2。

scp -r zookeeper-3.4.12/ node1:`pwd`
scp -r zookeeper-3.4.12/ node2:`pwd`

分別在master,node1,node2創建剛剛在配置文件中設置的dataDir路徑 mkdir -p /var/junxi/zk;創建完成之後,設置每臺機器的myid,即可以理解爲zookeeper的機器標識,master爲1,node1爲2,node2爲三,以master爲例子,命令如下:

echo 1 > /var/junxi/zk/myid

配置zookeeper環境變量,修改/etc/profile文件,第三行和第四行最後一個冒號開始部門就是新加入的內容,配置完要source一下這個文件,纔會生效。

export JAVA_HOME=/usr/java/jdk1.8.0_191
export HADOOP_HOME=/opt/xige/hadoop-2.7.5
export ZOOKEEPER_HOME=/opt/xige/zookeeper-3.4.12
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin

然後就是進行分發,分發到node1和node2機器上,命令:

scp -r /etc/profile node1:/etc/

scp -r /etc/profile node2:/etc/

在每臺機器上輸入zookeeper啓動命令:zkServer.sh start。zookeeper啓動完成之後;

第二步,爲了解決兩臺namenode數據同步問題,啓動journalnode,分別在每臺機器上輸入命令爲:hadoop-daemon.sh start journalnode,可以通過jps驗證一下是否啓動服務成功。

第三步,選一臺namenode進行格式化,這裏我選擇master,輸入命令爲:hdfs namenode -format。

第四步,要在另一臺未格式化的機器上進行元數據同步,所以要在剛剛格式化的那臺機器先啓動namenode,命令爲:hadoop-daemon.sh start namenode;之後在另外一臺未格式化的namenode上執行以下命令即爲(node1機器):hdfs namenode -bootstrapStandby。

第五步,在master上(啓動了namenode的機器上)進行zookeeper的格式化,命令爲: hdfs zkfc -formatZK;可以通過進入zookeeper客戶端進去查看是否產生了hadoop-ha的目錄(這個操作很簡單,百度一下)。

第六步,在master節點輸入:start-dfs.sh

到目前HA已經搭建完畢。最後,說一下啓動順序,先啓動zookeeper,再啓動journalnode,最後再啓動文件系統,即命令順序爲:

zkServer.sh start    #每臺機器上都需要輸入這個啓動命令

start-dfs.sh    只需要master輸入就行

關閉的時候可以按照啓動順序的操作來關閉。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章