CDH中配置HDFS HA 及shell 指令碼

來源:互聯網
上載者:User

最近又安裝 hadoop 叢集, 故嘗試了一下配置 HDFS 的 HA,CDH4支援Quorum-based Storage和shared storage using NFS兩種HA方案,而CDH5隻支援第一種方案,即 QJM 的 HA 方案。

關於 hadoop 叢集的安裝部署過程你可以參考 使用yum安裝CDH Hadoop叢集 或者 手動安裝 hadoop 叢集的過程。 叢集規劃

我一共安裝了三個節點的叢集,對於 HA 方案來說,三個節點準備安裝如下服務: cdh1:hadoop-hdfs-namenode(primary) 、hadoop-hdfs-journalnode、hadoop-hdfs-zkfc cdh2:hadoop-hdfs-namenode(standby)、hadoop-hdfs-journalnode、hadoop-hdfs-zkfc cdh3: hadoop-hdfs-journalnode

根據上面規劃,在對應節點上安裝相應的服務。 安裝步驟 停掉叢集

停掉叢集上所有服務。

$ sh /opt/cmd.sh ' for x in `ls /etc/init.d/|grep spark` ; do service $x stop ; done'$ sh /opt/cmd.sh ' for x in `ls /etc/init.d/|grep impala` ; do service $x stop ; done'$ sh /opt/cmd.sh ' for x in `ls /etc/init.d/|grep hive` ; do service $x stop ; done'$ sh /opt/cmd.sh ' for x in `ls /etc/init.d/|grep hbase` ; do service $x stop ; done'$ sh /opt/cmd.sh ' for x in `ls /etc/init.d/|grep hadoop` ; do service $x stop ; done'

cmd.sh代碼內容見Hadoop叢集部署許可權總結一文中的/opt/shell/cmd.sh。 停止用戶端程式

停止服務叢集的所有用戶端程式,包括定時任務。 備份 hdfs 中繼資料

a,尋找本地配置的檔案目錄(屬性名稱為 dfs.name.dir 或者 dfs.namenode.name.dir或者hadoop.tmp.dir )

grep -C1 hadoop.tmp.dir /etc/hadoop/conf/hdfs-site.xml#或者grep -C1 dfs.namenode.name.dir /etc/hadoop/conf/hdfs-site.xml

通過上面的命令,可以看到類似以下資訊:

<property><name>hadoop.tmp.dir</name><value>/data/dfs/nn</value></property>

b,對hdfs資料進行備份

cd /data/dfs/nntar -cvf /root/nn_backup_data.tar .
安裝服務

在 cdh1、cdh2、cdh3 上安裝 hadoop-hdfs-journalnode

$ ssh cdh1 'yum install hadoop-hdfs-journalnode -y '$ ssh cdh2 'yum install hadoop-hdfs-journalnode -y '$ ssh cdh3 'yum install hadoop-hdfs-journalnode -y '

在 cdh1、cdh2 上安裝 hadoop-hdfs-zkfc:

ssh cdh1 "yum install hadoop-hdfs-zkfc -y "ssh cdh2 "yum install hadoop-hdfs-zkfc -y "
修改設定檔

修改/etc/hadoop/conf/core-site.xml,做如下修改:

<property><name>fs.defaultFS</name><value>hdfs://mycluster:8020</value></property><property><name>ha.zookeeper.quorum</name><value>cdh1:21088,cdh2:21088,cdh3:21088</value></property>

修改/etc/hadoop/conf/hdfs-site.xml,刪掉一些原來的 namenode 配置,增加如下:

<!--  hadoop  HA --><property><name>dfs.nameservices</name><value>mycluster</value></property><property><name>dfs.ha.namenodes.mycluster</name><value>nn1,nn2</value></property><property><name>dfs.namenode.rpc-address.mycluster.nn1</name><value>cdh1:8020</value></property><property><name>dfs.namenode.rpc-address.mycluster.nn2</name><value>cdh2:8020</value></property><property><name>dfs.namenode.http-address.mycluster.nn1</name><value>cdh1:50070</value></property><property><name>dfs.namenode.http-address.mycluster.nn2</name><value>cdh2:50070</value></property><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://cdh1:8485,cdh2:8485,cdh3:8485/mycluster</value></property><property><name>dfs.journalnode.edits.dir</name><value>/data/dfs/jn</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(hdfs)</value></property><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/var/lib/hadoop-hdfs/.ssh/id_rsa</value></property><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property>
同步設定檔

將設定檔同步到叢集其他節點:

$ sh /opt/syn.sh /etc/hadoop/conf /etc/hadoop/

在journalnode的三個節點上建立目錄:

$ ssh cdh1 'mkdir -p /data/dfs/jn ; chown -R hdfs:hdfs /data/dfs/jn'$ ssh cdh2 'mkdir -p /data/dfs/jn ; chown -R hdfs:hdfs /data/dfs/jn'$ ssh cdh3 'mkdir -p /data/dfs/jn ; chown -R hdfs:hdfs /data/dfs/jn'
配置無密碼登陸

在兩個NN上配置hdfs使用者間無密碼登陸:

對於 cdh1:

$ passwd hdfs$ su - hdfs$ ssh-keygen$ ssh-copy-id  cdh2

對於 cdh2:

$ passwd hdfs$ su - hdfs$ ssh-keygen$ ssh-copy-id   cdh1
啟動journalnode

啟動cdh1、cdh2、cdh3上的 hadoop-hdfs-journalnode 服務

$ ssh cdh1 'service hadoop-hdfs-journalnode start'$ ssh cdh2 'service hadoop-hdfs-journalnode start'$ ssh cdh3 'service hadoop-hdfs-journalnode start'
初始化共用儲存

在namenode上初始化共用儲存,如果沒有格式化,則先格式化:

hdfs namenode -initializeSharedEdits

啟動NameNode:

$ service hadoop-hdfs-namenode start
同步 Standby NameNode

cdh2作為 Standby NameNode,在該節點上先安裝namenode服務

$ yum install hadoop-hdfs-namenode -y

再運行:

$ sudo -u hdfs hadoop namenode -bootstrapStandby

如果是使用了kerberos,則先擷取hdfs的ticket再執行:

$ kinit -k -t /etc/hadoop/conf/hdfs.keytab hdfs/cdh1@JAVACHEM.COM$ hadoop namenode -bootstrapStandby

然後,啟動 Standby NameNode:

$ service hadoop-hdfs-namenode start
配置自動切換

在兩個NameNode上,即cdh1和cdh2,安裝hadoop-hdfs-zkfc

$ ssh cdh1 'yum install hadoop-hdfs-zkfc -y'$ ssh cdh2 'yum install hadoop-hdfs-zkfc -y'

在任意一個NameNode上下面命令,其會建立一個znode用於自動容錯移轉。

$ hdfs zkfc -formatZK

如果你想對zookeeper的訪問進行加密,則請參考 Enabling HDFS HA 中 Securing access to ZooKeeper 這一節內容。

然後再兩個 NameNode 節點上啟動zkfc:

$ ssh cdh1 "service hadoop-hdfs-zkfc start"$ ssh cdh2 "service hadoop-hdfs-zkfc start"
測試

分別訪問 http://cdh1:50070/ 和 http://cdh2:50070/ 查看誰是 active namenode,誰是 standyby namenode。

查看某Namenode的狀態:

#查看cdh1狀態$ sudo -u hdfs hdfs haadmin -getServiceState nn1active#查看cdh2狀態$ sudo -u hdfs hdfs haadmin -getServiceState nn2standby

執行手動切換:

$ sudo -u hdfs hdfs haadmin -failover nn1 nn2Failover to NameNode at cdh2/192.168.56.122:8020 successful

再次訪問 http://cdh1:50070/ 和 http://cdh2:50070/ 查看誰是 active namenode,誰是 standyby namenode。 配置HBase HA

先停掉 hbase,然後修改/etc/hbase/conf/hbase-site.xml,做如下修改:

<!-- Configure HBase to use the HA NameNode nameservice --><property>    <name>hbase.rootdir</name>    <value>hdfs://mycluster:8020/hbase</value>         </property>

在 zookeeper 節點上運行/usr/lib/zookeeper/bin/zkCli.sh

$ ls /hbase/splitlogs$ rmr /hbase/splitlogs

最後啟動 hbase 服務。 配置 Hive HA

運行下面命令將hive的metastore的root地址的HDFS nameservice。

$ /usr/lib/hive/bin/metatool -listFSRoot Initializing HiveMetaTool..Listing FS Roots..hdfs://cdh1:8020/user/hive/warehouse  $ /usr/lib/hive/bin/metatool -updateLocation hdfs://mycluster hdfs://cdh1 -tablePropKey avro.schema.url -serdePropKey schema.url  $ metatool -listFSRoot Listing FS Roots..Initializing HiveMetaTool..hdfs://mycluster:8020/user/hive/warehouse
配置 Impala

不需要做什麼修改,但是一定要記住 core-site.xml 中 fs.defaultFS 參數值要帶上連接埠號碼,在CDH中為 8020。 配置 YARN

暫時未使用,詳細說明請參考 MapReduce (MRv1) and YARN (MRv2) High Availability。 配置 Hue

暫時未使用,詳細說明請參考 Hue High Availability 。 配置 Llama

暫時未使用,詳細說明請參考 Llama High Availability 。
原創文章,轉載請註明: 轉載自 JavaChen Blog,作者: JavaChen
本文連結地址: http://blog.javachen.com/2014/07/18/install-hdfs-ha-in-cdh.html
本文基於 署名2.5中國大陸許可協議發布,歡迎轉載、演繹或用於商業目的,但是必須保留本文署名和文章連結。 如您有任何疑問或者授權方面的協商,請郵件聯絡我。

CDH中配置HDFS HA

hadoop hadoop

喜歡取消愛好

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.