1. 程式人生 > >HDFS HA完全分散式搭建

HDFS HA完全分散式搭建

叢集規劃

在這裡插入圖片描述

配置免密登入

node01->node01 node01->node02 node01->node03 node01->node04 node02->node01 在node02節點執行,將node01的公鑰加入到其他節點的白名單中 ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

所有節點配置JDK

  1. 解除安裝舊有jdk
	rpm -qa|grep java
	rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
	rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
	rpm -e --nodeps tzdata-java-2013g-1.el6.noarch
  1. 配置新jdk
	#vi /etc/profile 加入如下內容:
	export JAVA_HOME=/opt/software/jdk/jdk1.8.0_151
	export PATH=$PATH:$JAVA_HOME/bin 

配置hadoop

  1. 修改hdfs-site.xml配置檔案
	<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>node01:8020</value>
	</property>
	<property>
	  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
	  <value>node02:8020</value>
	</property>
	<property>
	  <name>dfs.namenode.http-address.mycluster.nn1</name>
	  <value>node01:50070</value>
	</property>
	<property>
	  <name>dfs.namenode.http-address.mycluster.nn2</name>
	  <value>node02:50070</value>
	</property>
	<property>
	  <name>dfs.namenode.shared.edits.dir</name>
	  <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
	</property>
	<property>
	  <name>dfs.journalnode.edits.dir</name>
	  <value>/var/sxt/hadoop/ha/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</value>
	</property>
	<property>
	  <name>dfs.ha.fencing.ssh.private-key-files</name>
	  <value>/root/.ssh/id_rsa</value>
	</property>
	<property>
	   <name>dfs.ha.automatic-failover.enabled</name>
	   <value>true</value>
	 </property>


  1. 修改core-site.xml配置檔案
	<property>
	   <name>fs.defaultFS</name>
	   <value>hdfs://mycluster</value>
	</property>
	<property>
	   <name>ha.zookeeper.quorum</name>
	   <value>node02:2181,node03: 	,node04:2181</value>
	</property>


  1. 修改slaves檔案
node01
node02
node03
  1. 將配置好的HDFS安裝包拷貝到node02 node03 node04
	scp -r hadoop-2.6.5 [email protected]:/opt/software/hadoop/
	scp -r hadoop-2.6.5 [email protected]:/opt/software/hadoop/
	scp -r hadoop-2.6.5 [email protected]:/opt/software/hadoop/

搭建zookeeper叢集

  1. 解壓zookeeper-3.4.10 以我為例,解壓到了/opt/software/hadoop,跟/opt/software/hadoop/hadoop-2.6.5在同級目錄
  2. 修改conf目錄下的zoo_sample.cfg
	#重新命名,改為zoo.cfg
	mv zoo_sample.cfg zoo.cfg
	#修改zoo.cfg
	dataDir=/var/zfg/zookeeper
	server.1=node02:2888:3888
	server.2=node03:2888:3888
	server.3=node04:2888:3888

  1. 在dataDir目錄下建立一個myid檔案,在這個檔案中寫上當前節點ID號 比如我這裡在node02節點上是ID號是1 在這裡插入圖片描述
  2. 將配置好的zookeeper安裝包拷貝到node03 node04
  3. 拷貝完畢後,在各自節點上建立myid號,ID號要依次遞增

格式化

  1. 啟動 journalnode 在node01、node02、node03分別執行如下命令在node01、node02、node03分別執行如下命令

     hadoop-daemon.sh start journalnode
    
  2. 隨機選擇一臺NameNode執行,我這裡在node01節點即NameNode1上執行

    hdfs namenode -format
    hadoop-daemon.sh start namenode
    
  3. 另外一臺NameNode節點執行

     hdfs namenode  -bootstrapStandby
    
  4. 啟動zkfc服務

      hdfs zkfc -formatZKhdfs zkfc -formatZK
    
  5. 關閉所有節點上的程序

     stop-dfs.sh
    
  6. 啟動HDFS

     start-dfs.sh
    

驗證HA故障自動切換

可以看到NameNode1和NameNode2現在分別為active和standby狀態 在這裡插入圖片描述 在這裡插入圖片描述 在NameNode1所在的node01節點上,kill掉NameNode1程序 在這裡插入圖片描述 再檢視兩個NameNode2狀態,可以看到已轉為active狀態 在這裡插入圖片描述

注意點

要先啟動zookeeper服務再進行NameNode初始化