四節點搭建Hadoop HA(高可用)叢集模式
準備工作: 四個節點間的ssh互通,(至少兩個NN節點和其他節點ssh互通); JDK 1.7+,環境變數配置,各節點保持一致; /etc/hosts 節點名對映,各節點保持一致; 保證各元件版本間相容性,推薦使用cdh的jar包
datas : 當做所有軟體的安裝目錄
jars:當做提交jar包的目錄。 文字資料目錄;
software:軟體包目錄
workdata: 軟體包的資料存放目錄
一、關閉防火牆 (永久關閉) chkconfig iptables off chkconfig iptables on 二、解壓Hadoop包,到datas目錄 三、修改配置檔案
1)JAVA環境變數的一些配置(有些是可有可無的)
2)hdfs-site.xml
<!--指定hdfs的nameservice為st,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> . <value>st</value> </property> <!--bi下面有兩個NameNode,分別是nn1,nn2,這兒的nn1,nn2也是邏輯名字,可以自己指定,但是指定後下面的也要隨之改變--> <property> <name>dfs.ha.namenodes.st</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.st.nn1</name> <value>node1:9000</value> </property> <!-- nn1的http通訊地址 --> <property> <name>dfs.namenode.http-address.st.nn1</name> <value>node1:50070</value> </property> <!-- nn2的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.st.nn2</name> <value>node2:9000</value> </property> <!-- nn2的http通訊地址 --> <property> <name>dfs.namenode.http-address.st.nn2</name> <value>node2:50070</value> </property> <!-- 指定NameNode的edits元資料在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node2:8485;node3:8485;node4:8485/st</value> </property> <!-- 指定JournalNode在本地磁碟存放資料的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/root/journaData</value> </property> <!-- 開啟NameNode失敗自動切換 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失敗自動切換實現方式 --> <property> <name>dfs.client.failover.proxy.provider.bi</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔離機制方法,多個機制用換行分割,即每個機制暫用一行--> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence shell(/bin/true)</value> </property> <!-- 使用sshfence隔離機制時需要ssh免登陸 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_dsa</value> </property> <!-- 配置sshfence隔離機制超時時間 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property>
3)mapred-site.xml
<!-- 指定mr框架為yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
4)core-site.xml
<!-- 這兒的st表示兩個namenode組建成的邏輯名字 --> <property> <name>fs.defaultFS</name> <value>hdfs://st/</value> </property> <!-- 指定hadoop臨時目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/root/hadoopdata</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>node1:2181,node2:2181,node3:2181</value> </property>
5)yarn-site.xml
<!-- 開啟RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value> </property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分別指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node2</value>
</property>
<!-- 指定zookeeper叢集地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--配置RM 啟動後自動恢復狀態 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--指定應該通過什麼方式儲存 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>108600</value>
</property>
四、配置檔案分發
scp /usr/cdh/datas/hadoop-2.5.0/etc/hadoop/* [email protected]:/usr/cdh/datas/hadoop-2.5.0/etc/hadoop
scp /usr/cdh/datas/hadoop-2.5.0/etc/hadoop/* [email protected]:/usr/cdh/datas/hadoop-2.5.0/etc/hadoop
scp /usr/cdh/datas/hadoop-2.5.0/etc/hadoop/* [email protected]:/usr/cdh/datas/hadoop-2.5.0/etc/hadoop
五、zookeeper叢集配置並啟動(之前的部落格寫過,這裡梳理下步驟)
1)解壓 2)配置zoo.cfg 3)建立myid檔案 4)啟動 5)檢驗 jps bin/zkServer.sh status 用zkCli.sh檢驗資料
六、Hadoop啟動前初始化: 1)在各個JournalNode節點下,輸入命令啟動journalnode服務: sbin/hadoop-daemon.sh start journalnode 2) 在第一個NN節點,格式化原始檔;成功後啟動。 sbin/hdfs namenode -format sbin/hadoop-daemon.sh start namenode 3)去第二個NN節點,同步第一個NN節點的源資料檔案; bin/hdfs namenode -bootstrapStandby 成功後,關閉所有的節點任務。重新啟動JN,然後是NN, ps: 主備切換命令: bin/hdfs haadmin -transitionToActive nn1(nn2) 4)在active節點的NN上,啟動所有DN sbin/hadoop-daemon.sh start datanode -----------------以後可以直接用一條命令啟動hdfs ----------------------------------------------
手動殺掉NN1的程序,實驗主動切換是否生效:
完成了自動故障轉移,切換了NN的active節點。手動恢復後的NN,已經變成了備用節點了
--------------------------------------------------------------------------------------------------- 5)HA yarn啟動前的準備工作 a、關閉HDFS的所有服務(比較煩,沒辦法)cmd: sbin/stop-dfs.sh b、初始化HA 在zookeeper上的狀態 cmd: bin/hdfs zkfc -formatZK
c、啟動所有的hdfs,可以用start-dfs.sh指令碼啟動(它會自動啟動zkfc) d、如果是組個啟動的話,哪臺叢集的zkfc先啟動,就會是active的NN,這個zookeeper的選舉機制有關 e、啟動yarn cmd:sbin/start-yarn.sh
(內容直接從我筆記裡粘出來的,在這裡不太好編輯,我把原筆記上傳到資源裡。如果部落格看到不太舒服,可以去下載看)