我一共安裝了三個節點的叢集,對于 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
根據上面規劃,在對應節點上安裝相應的服務。
停掉叢集上所有服務。
停止服務叢集的所有用戶端程式,包括定時任務。
a,查找本地配置的檔案目錄(屬性名為 dfs.name.dir 或者 dfs.namenode.name.dir或者hadoop.tmp.dir )
通過上面的指令,可以看到類似以下資訊:
b,對hdfs資料進行備份
在 cdh1、cdh2、cdh3 上安裝 hadoop-hdfs-journalnode
在 cdh1、cdh2 上安裝 hadoop-hdfs-zkfc:
修改/etc/hadoop/conf/core-site.xml,做如下修改:
修改/etc/hadoop/conf/hdfs-site.xml,删掉一些原來的 namenode 配置,增加如下:
将配置檔案同步到叢集其他節點:
在journalnode的三個節點上建立目錄:
在兩個nn上配置hdfs使用者間無密碼登陸:
對于 cdh1:
對于 cdh2:
啟動cdh1、cdh2、cdh3上的 hadoop-hdfs-journalnode 服務
在namenode上初始化共享存儲,如果沒有格式化,則先格式化:
啟動namenode:
cdh2作為 standby namenode,在該節點上先安裝namenode服務
再運作:
如果是使用了kerberos,則先擷取hdfs的ticket再執行:
然後,啟動 standby namenode:
在兩個namenode上,即cdh1和cdh2,安裝hadoop-hdfs-zkfc
在任意一個namenode上下面指令,其會建立一個znode用于自動故障轉移。
然後再兩個 namenode 節點上啟動zkfc:
分别通路 http://cdh1:50070/ 和 http://cdh2:50070/ 檢視誰是 active namenode,誰是 standyby namenode。
檢視某namenode的狀态:
執行手動切換:
再次通路 http://cdh1:50070/ 和 http://cdh2:50070/ 檢視誰是 active namenode,誰是 standyby namenode。
先停掉 hbase,然後修改/etc/hbase/conf/hbase-site.xml,做如下修改:
在 zookeeper 節點上運作/usr/lib/zookeeper/bin/zkcli.sh
最後啟動 hbase 服務。
運作下面指令将hive的metastore的root位址的hdfs nameservice。
不需要做什麼修改,但是一定要記住 core-site.xml 中 <code>fs.defaultfs</code> 參數值要帶上端口号,在cdh中為 8020。