5節點Hadoop-2.6.0-cdh5.14.2 HA集羣搭建

目錄

一、集羣規劃

二、五節點Hadoop HA搭建

1. 虛擬機環境準備

2. 安裝ZooKeeper集羣

3. 五節點Hadoop HA搭建

3.1 解壓hadoop壓縮包

3.2 修改hadoop-env.sh

3.3 修改core-site.xml

3.4 修改hdfs-site.xml

3.5 修改mapred-site.xml

3.6 修改yarn-site.xml

3.7 修改slaves

3.8 遠程拷貝hadoop文件夾

3.9 修改兩個RM的yarn-site.xml

3.10 配置環境變量

4. 啓動與初始化hadoop集羣

4.1 啓動zookeeper集羣

4.2 啓動HDFS

4.3 啓動YARN 

4.4 啓動JobHistory

5. 驗證集羣是否可用

5.1 驗證HDFS HA

5.2 驗證Yarn HA

6. 集羣常用命令

6.1 關閉Hadoop HA集羣

6.2 常用命令


一、集羣規劃

說明:

  • 集羣共5個節點,主機名分別是node01、node02、node03、node04、node05

  • 初始啓動集羣

    • node01上運行active namenode即主namenode;node02上運行standby namenode即從namenode

    • node04上運行主resourcemanager;node05上運行從resourcemanager

  • 每個節點運行的進程如下表

機器名

運行進程
node01 NameNode/zkfc/Zookeeper/Journalnode/DataNode/NodeManager
node02 NameNode/zkfc/Zookeeper/Journalnode/DataNode/NodeManager
node03 Zookeeper/Journalnode/DataNode/NodeManager/JobHistoryServer
node04 ResourceManager
node05 ResourceManager

二、五節點Hadoop HA搭建

1. 虛擬機環境準備

  • 準備5臺虛擬機

  • 在做五節點hadoop HA集羣搭建之前,要求先完成每臺虛擬機的基本環境準備

    • 每個節點都要做好“在node01上開始解壓hadoop的tar.gz包之前的環境配置”

    • 主要包括如下步驟(三節點Hadoop集羣搭建時已講解過,不再贅述)

      • windows|mac安裝VMWare虛擬化軟件

      • VMWare下安裝CenoOS7

      • 虛擬機關閉防火牆

      • 禁用selinux

      • 配置虛擬網卡

      • 配置虛擬機網絡

      • 安裝JDK

      • 配置時間同步

      • 修改主機名

      • 修改ip地址

      • 修改/etc/hosts

      • 各節點免密鑰登陸

      • 重啓虛擬機

 

2. 安裝ZooKeeper集羣

Hadoop高可用集羣需要使用ZooKeeper集羣做分佈式協調;所以先安裝ZooKeeper集羣

  • 在node01、node02、node03上安裝ZooKeeper集羣(不再贅述)

 

3. 五節點Hadoop HA搭建

注意:

①3.1到3.8在node01上操作

此文檔使用普通用戶操作,如hadoop

hadoop安裝到用戶主目錄下,如/kkb/install

請根據自己的實際情況修改

 

3.1 解壓hadoop壓縮包

  • hadoop壓縮包hadoop-2.6.0-cdh5.14.2_after_compile.tar.gz上傳到node01的/kkb/soft路徑中

  • 解壓hadoop壓縮包到/kkb/install

#解壓hadoop壓縮包到/kkb/install
[hadoop@node01 ~]$ cd
[hadoop@node01 ~]$ cd /kkb/soft/
[hadoop@node01 soft]$ tar -xzvf hadoop-2.6.0-cdh5.14.2_after_compile.tar.gz -C /kkb/install/

 

3.2 修改hadoop-env.sh

  • 進入hadoop配置文件路徑$HADOOP_HOME/etc/hadoop

[hadoop@node01 soft]$ cd /kkb/install/hadoop-2.6.0-cdh5.14.2/
[hadoop@node01 hadoop-2.6.0-cdh5.14.2]$ cd etc/hadoop/
  • 修改hadoop-env.sh,修改JAVA_HOME值爲jdk解壓路徑;保存退出

export JAVA_HOME=/kkb/install/jdk1.8.0_141

注意:JAVA_HOME值修改爲自己jdk的實際目錄

3.3 修改core-site.xml

注意:

情況一:值/kkb/install/hadoop-2.6.0-cdh5.14.2/tmp根據實際情況修改

情況二:值node01:2181,node02:2181,node03:2181根據實際情況修改,修改成安裝了zookeeper的虛擬機的主機名

<configuration>
	<!-- 指定hdfs的nameservice id爲ns1 -->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://ns1</value>
	</property>
	<!-- 指定hadoop臨時文件存儲的基目錄 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/kkb/install/hadoop-2.6.0-cdh5.14.2/tmp</value>
	</property>
	<!-- 指定zookeeper地址,ZKFailoverController使用 -->
	<property>
		<name>ha.zookeeper.quorum</name>
		<value>node01:2181,node02:2181,node03:2181</value>
	</property>
</configuration>

3.4 修改hdfs-site.xml

注意:

情況一:屬性值qjournal://node01:8485;node02:8485;node03:8485/ns1中的主機名,修改成實際安裝zookeeper的虛擬機的主機名

情況二:屬性值/kkb/install/hadoop-2.6.0-cdh5.14.2/journal中”/kkb/install/hadoop-2.6.0-cdh5.14.2”替換成實際hadoop文件夾的路徑

情況三:屬性值/home/hadoop/.ssh/id_rsa中/home/hadoop根據實際情況替換

<configuration>
	<!--指定hdfs的nameservice列表,多個之前逗號分隔;此處只有一個ns1,需要和core-site.xml中的保持一致 -->
	<property>
		<name>dfs.nameservices</name>
		<value>ns1</value>
	</property>
	<!-- ns1下面有兩個NameNode,分別是nn1,nn2 -->
	<property>
		<name>dfs.ha.namenodes.ns1</name>
		<value>nn1,nn2</value>
	</property>
	<!-- nn1的RPC通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.ns1.nn1</name>
		<value>node01:8020</value>
	</property>
	<!-- nn1的http通信地址,web訪問地址 -->
	<property>
		<name>dfs.namenode.http-address.ns1.nn1</name>
		<value>node01:50070</value>
	</property>
	<!-- nn2的RPC通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.ns1.nn2</name>
		<value>node02:8020</value>
	</property>
	<!-- nn2的http通信地址,web訪問地址 -->
	<property>
		<name>dfs.namenode.http-address.ns1.nn2</name>
		<value>node02:50070</value>
	</property>
	<!-- 指定NameNode的元數據在JournalNode上的存放位置 -->
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://node01:8485;node02:8485;node03:8485/ns1</value>
	</property>
	<!-- 指定JournalNode在本地磁盤存放數據的位置 -->
	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/kkb/install/hadoop-2.6.0-cdh5.14.2/journal</value>
	</property>
	<!-- 開啓NameNode失敗自動切換 -->
	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
	<!-- 此類決定哪個namenode是active,切換active和standby -->
	<property>
		<name>dfs.client.failover.proxy.provider.ns1</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>/home/hadoop/.ssh/id_rsa</value>
	</property>
	<!-- 配置sshfence隔離機制超時時間 -->
	<property>
		<name>dfs.ha.fencing.ssh.connect-timeout</name>
		<value>30000</value>
	</property>
</configuration>

3.5 修改mapred-site.xml

  • 重命名文件

[hadoop@node01 hadoop]$ mv mapred-site.xml.template mapred-site.xml
  • 修改mapred-site.xml

<configuration>
	<!-- 指定運行mr job的運行時框架爲yarn -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
    <!-- MapReduce JobHistory Server IPC host:port -->
	<property>
		<name>mapreduce.jobhistory.address</name>
		<value>node03:10020</value>
	</property>
	<!-- MapReduce JobHistory Server Web UI host:port -->
	<property>
		<name>mapreduce.jobhistory.webapp.address</name>
		<value>node03:19888</value>
	</property>
</configuration>

3.6 修改yarn-site.xml

注意:

情況一:屬性yarn.resourcemanager.hostname.rm1的值node04根據實際情況替換

情況二:屬性yarn.resourcemanager.hostname.rm2的值node05根據實際情況替換

情況三:屬性值node01:2181,node02:2181,node03:2181根據實際情況替換;替換成實際安裝zookeeper的虛擬機的主機名

<configuration>
    <!-- 是否啓用日誌聚合.應用程序完成後,日誌彙總收集每個容器的日誌,這些日誌移動到文件系統,例如HDFS. -->
	<!-- 用戶可以通過配置"yarn.nodemanager.remote-app-log-dir"、"yarn.nodemanager.remote-app-log-dir-suffix"來確定日誌移動到的位置 -->
	<!-- 用戶可以通過應用程序時間服務器訪問日誌 -->
	<!-- 啓用日誌聚合功能,應用程序完成後,收集各個節點的日誌到一起便於查看 -->
	<property>
			<name>yarn.log-aggregation-enable</name>
			<value>true</value>
	</property>
	<!-- 開啓RM高可靠 -->
	<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
	</property>
	<!-- 指定RM的cluster id爲yrc,意爲yarn cluster -->
	<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>node04</value>
	</property>
    <!-- 指定第二個RM的地址 -->
	<property>
		<name>yarn.resourcemanager.hostname.rm2</name>
		<value>node05</value>
	</property>
    <!-- 配置第一臺機器的resourceManager通信地址 -->
	<!--客戶端通過該地址向RM提交對應用程序操作-->
	<property>
		<name>yarn.resourcemanager.address.rm1</name>
		<value>node04:8032</value>
	</property>
	<!--向RM調度資源地址--> 
	<property>
		<name>yarn.resourcemanager.scheduler.address.rm1</name>
		<value>node04:8030</value>
	</property>
	<!--NodeManager通過該地址交換信息-->
	<property>
		<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
		<value>node04:8031</value>
	</property>
	<!--管理員通過該地址向RM發送管理命令-->
	<property>
		<name>yarn.resourcemanager.admin.address.rm1</name>
		<value>node04:8033</value>
	</property>
	<!--RM HTTP訪問地址,查看集羣信息-->
	<property>
		<name>yarn.resourcemanager.webapp.address.rm1</name>
		<value>node04:8088</value>
	</property>
	<!-- 配置第二臺機器的resourceManager通信地址 -->
	<property>
		<name>yarn.resourcemanager.address.rm2</name>
		<value>node05:8032</value>
	</property>
	<property>
		<name>yarn.resourcemanager.scheduler.address.rm2</name>
		<value>node05:8030</value>
	</property>
	<property>
		<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
		<value>node05:8031</value>
	</property>
	<property>
		<name>yarn.resourcemanager.admin.address.rm2</name>
		<value>node05:8033</value>
	</property>
	<property>
		<name>yarn.resourcemanager.webapp.address.rm2</name>
		<value>node05:8088</value>
	</property>
    <!--開啓resourcemanager自動恢復功能-->
	<property>
		<name>yarn.resourcemanager.recovery.enabled</name>
		<value>true</value>
	</property>	
    <!--在node4上配置rm1,在node5上配置rm2,注意:一般都喜歡把配置好的文件遠程複製到其它機器上,但這個在YARN的另一個機器上一定要修改,其他機器上不配置此項-->
	<!--
    <property>       
		<name>yarn.resourcemanager.ha.id</name>
		<value>rm1</value>
	   <description>If we want to launch more than one RM in single node, we need this configuration</description>
	</property>
	-->
	<!--用於持久存儲的類。嘗試開啓-->
	<property>
		<name>yarn.resourcemanager.store.class</name>
		<!-- 基於zookeeper的實現 -->
		<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
	</property>
    <!-- 單個任務可申請最少內存,默認1024MB -->
	<property>
		<name>yarn.scheduler.minimum-allocation-mb</name>
		<value>512</value>
	</property>
	<!--多長時間聚合刪除一次日誌 此處-->
	<property>
		<name>yarn.log-aggregation.retain-seconds</name>
		<value>2592000</value><!--30 day-->
	</property>
	<!--時間在幾秒鐘內保留用戶日誌。只適用於如果日誌聚合是禁用的-->
	<property>
		<name>yarn.nodemanager.log.retain-seconds</name>
		<value>604800</value><!--7 day-->
	</property>
	<!-- 指定zk集羣地址 -->
	<property>
		<name>yarn.resourcemanager.zk-address</name>
		<value>node01:2181,node02:2181,node03:2181</value>
	</property>
    <!-- 逗號隔開的服務列表,列表名稱應該只包含a-zA-Z0-9_,不能以數字開始-->
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
</configuration>

3.7 修改slaves

node01、node02、node03上運行了datanode、nodemanager,所以修改slaves內容替換爲:

node01
node02
node03

3.8 遠程拷貝hadoop文件夾

拷貝到node02~node05

[hadoop@node01 hadoop]$ scp -r /kkb/install/hadoop-2.6.0-cdh5.14.2/ node02:/kkb/install/
[hadoop@node01 hadoop]$ scp -r /kkb/install/hadoop-2.6.0-cdh5.14.2/ node03:/kkb/install/
[hadoop@node01 hadoop]$ scp -r /kkb/install/hadoop-2.6.0-cdh5.14.2/ node04:/kkb/install/
[hadoop@node01 hadoop]$ scp -r /kkb/install/hadoop-2.6.0-cdh5.14.2/ node05:/kkb/install/

3.9 修改兩個RM的yarn-site.xml

node04上,找到屬性yarn.resourcemanager.ha.id去除註釋①、②

[hadoop@node04 ~]$ cd /kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop
[hadoop@node04 hadoop]$ vim yarn-site.xml 

node05

  • 找到屬性yarn.resourcemanager.ha.id去除註釋①、②

  • 修改成rm2

[hadoop@node05 ~]$ cd /kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop/
[hadoop@node05 hadoop]$ vim yarn-site.xml

修改後,結果如下

3.10 配置環境變量

  • node01到node05五個節點都配置環境變量

#將hadoop添加到環境變量中
vim /etc/profile

添加內容如下(注意:若HADOOP_HOME已經存在,則修改):

export HADOOP_HOME=/kkb/install/hadoop-2.6.0-cdh5.14.2/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

編譯文件,使新增環境變量生效

source /etc/profile

4. 啓動與初始化hadoop集羣

注意:嚴格按照下面的步驟 先檢查各臺hadoop環境變量是否設置好

4.1 啓動zookeeper集羣

注意:根據zookeeper實際安裝情況,啓動zookeeper

分別在node01、node02、node03上啓動zookeeper

zkServer.sh start

#查看狀態:一個爲leader,另外兩個爲follower

zkServer.sh status

 

4.2 啓動HDFS

4.2.1 格式化ZK 

node01上執行即可

  • 集羣有兩個namenode,分別在node01、node02上

  • 每個namenode對應一個zkfc進程;

  • 在主namenode node01上格式化zkfc

hdfs zkfc -formatZK

 4.2.2 啓動journalnode 啓動journalnode

  • node01上執行

    • 會啓動node01、node02、node03上的journalnode

    • 因爲使用的是hadoop-daemons.sh

hadoop-daemons.sh start journalnode
  • 運行jps命令檢驗,node01、node02、node03上多了JournalNode進程

4.2.3 格式化HDFS

  • 在node01上執行
  • 根據集羣規劃node01、node02上運行namenode;所以只在主namenode節點即node01上執行命令:

    • 此命令慎用;只在集羣搭建(初始化)時使用一次;

    • 一旦再次使用,會將HDFS上之前的數據格式化刪除掉

hdfs namenode -format
  • 下圖表示格式化成功

4.2.4 初始化元數據、啓動主NN

  • node01上執行(主namenode)

hdfs namenode -initializeSharedEdits -force
#啓動HDFS
start-dfs.sh

4.2.5 同步元數據信息、啓動從NN

  • node02上執行(從namenode)

  • 同步元數據信息,並且設置node02上namenode爲standBy狀態

hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode

4.2.5 JPS查看進程

  • node01上

  • node02上

  • node03上

4.3 啓動YARN 

4.6.1 主resourcemanager 

  • 把namenode和resourcemanager部署在不同節點,是因爲性能問題,因爲他們都要佔用大量資源
  • :在node04上啓動yarn之前,先依次從node04 ssh遠程連接到node01、node02、node03、node04、node05;因爲初次ssh時,需要交互,輸入yes,回車
start-yarn.sh

4.6.2 從resourcemanager

  • 從resourcemanagernode05上啓動rm
yarn-daemon.sh start resourcemanager

4.6.3 查看resourceManager狀態

  • node04上,它的resourcemanager的Id是rm1

yarn rmadmin -getServiceState rm1
  • node05上,它的resourcemanager的Id是rm2

yarn rmadmin -getServiceState rm2

4.4 啓動JobHistory

  • node03上執行

mr-jobhistory-daemon.sh start historyserver

 

5. 驗證集羣是否可用

5.1 驗證HDFS HA

5.1.1 訪問WEB UI

node01、node02一主一備

http://node01:50070

http://node02:50070

 

5.1.2 模擬主備切換

  • 在主namenode節點,運行

hadoop-daemon.sh stop namenode
  • 訪問之前爲"備namenode"的WEB UI;發現狀態更新爲active

  • 或者使用命令查看狀態

hdfs haadmin -getServiceState nn2

 

 

 

  • 啓動剛纔手動停掉的namenode

hadoop-daemon.sh start namenode
  • 訪問它的WEB UI,發現狀態更新爲standby

  • 或者使用命令查看狀態

hdfs haadmin -getServiceState nn1

5.2 驗證Yarn HA

node04、node05主備切換

5.2.1 訪問WEB UI

  • node04瀏覽器訪問

http://node04:8088/cluster/cluster

  • node05瀏覽器訪問
http://node05:8088/cluster/cluster

5.2.2 模擬主備切換

  • 在主resourcemanager節點,運行

yarn-daemon.sh stop resourcemanager
  • 訪問之前爲"備resourcemanager"的WEB UI;發現狀態更新爲active

  • 或者命令查看狀態

yarn rmadmin -getServiceState rm2

 

  • 啓動剛纔手動停掉的resourcemanager
yarn-daemon.sh start resourcemanager
  • 訪問它的WEB UI,發現狀態更新爲standby
  • 或者命令查看狀態
yarn rmadmin -getServiceState rm1

5.2.3 運行MR示例

  • 運行一下hadoop示例中的WordCount程序:

hadoop fs -put /kkb/install/hadoop-2.6.0-cdh5.14.2/LICENSE.txt /
hadoop jar /kkb/install/hadoop-2.6.0-cdh5.14.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar wordcount /LICENSE.txt /w0727

 

6. 集羣常用命令

6.1 關閉Hadoop HA集羣

正確指令執行順序如下

  • 主namenode上運行

stop-dfs.sh
  • 主resoucemanager上運行

stop-yarn.sh
  • 從resoucemanager上運行

yarn-daemon.sh stop resourcemanager
  • 關閉zookeeper集羣;每個zk服務器運行

zkServer.sh stop

6.2 常用命令

  • 單獨啓動namenode

hadoop-daemon.sh start namenode
  • 單獨啓動datanode
hadoop-daemon.sh start datanode
  • 單獨啓動journalnode
hadoop-daemon.sh start journalnode
  • 啓動zookeeper
./zkServer.sh start
  • 啓動hdfs
start-dfs.sh
  • 啓動yarn
start-yarn.sh
  • 單獨啓動resorucemanager
yarn-daemon.sh start resouremanger
  • 查看namenode狀態(namenode1)
hdfs haadmin -getServiceState nn1
  • 查看resourcemanager狀態(resourcemanager2)
yarn rmadmin -getServiceState rm2

 

 

 

 

 

 

 

 

 

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