1. 程式人生 > >大資料(六) --高可用完全分散式搭建

大資料(六) --高可用完全分散式搭建

說明

    搭建之前, 先根據HDFS三種模式一文將叢集的初始環境配置OK.

高可用完全分散式搭建

叢集規劃

NN(active) NN(standby) DN ZK ZKFC JNN
node01
node02
node03
node04
  1. 在node01節點上將上傳的Hadoop壓縮包解壓

這裡我將檔案解壓到/opt/software/hadoop資料夾下. tar -zxf hadoop-2.6.5.tar.gz -C /opt/software/hadoop

進入配置檔案修改目錄 cd /opt/software/hadoop/hadoop-2.6.5/etc/hadoop/

  1. 修改hdfs-site.xml配置

vim hdfs-site.xml   編輯檔案, 在configuration標籤對中插入:

<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配置

vim core-site.xml   編輯檔案, 在configuration標籤對中插入

<property>
   		<name>fs.defaultFS</name>
   		<value>hdfs://mycluster</value>
</property>
<property>
   		<name>ha.zookeeper.quorum</name>
   		<value>node02:2181,node03:2181,node04:2181</value>
</property>

  其中fs.defaultFS配置的是hdfs檔案目錄的字首, 此處的mycluster為hdfs-site.xml中配置的叢集服務名.

  ha.zookeeper.quorum配置的是叢集協調服務程序zookeeper.

  1. 修改slaves配置檔案
vim slaves

編輯slaves, 在檔案中寫入:

node02
node03
node04

  slaves中配置的是從節點(DataNode)主機名(hostname), 高可用完全分散式, 我們設計的也是三個DN節點.

  在編輯檔案時, 要注意縱向寫的格式, 主機名後也不可以帶空格, 否則可能會導致主機解析失敗.

  1. 安裝包分發

  根據上述步驟配置好之後, 需要將配置好的檔案發到其他三個節點上.

cd /opt/software/hadoop		將hadoop下的hadoop-2.6.5包傳送

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/

或使用一種更簡單的指令
scp -r hadoop-2.6.5 node02:`pwd`
scp -r hadoop-2.6.5 node03:`pwd`
scp -r hadoop-2.6.5 node04:`pwd`

  傳送時, 如果其他節點上沒有/opt/software/hadoop/目錄, 那麼需要自己建立之後再發送. 傳送完畢之後要保證所有節點的hadoop目錄所在路徑都是一致的.

  1. 修改hadoop-evn.sh檔案

  此步可先跳過, 該檔案可以不修改. 當啟動hdfs出現" JAVA_HOME cannot find or set" 類似的說明java_home沒有配置的提示時, 可再手動配置(前提是執行java -version成功在顯示器列印java版本).

vim hadoop-evn.sh

編輯檔案, 找到export JAVA_HOME=${JAVA_HOME}那一行

將 = 後的內容改為JAVA_HOME的確切路徑, 可使用 echo $JAVA_HOME檢視
export JAVA_HOME=/usr/local/jdk1.8.0_181

  修改完成之後還要使用scp命令將修改的檔案傳送到各個節點上:

scp hadoop-evn.sh node02:`pwd`
scp hadoop-evn.sh node03:`pwd`
scp hadoop-evn.sh node04:`pwd`
  1. 將hadoop配置到使用者環境變數中

  此處配置好後, 可以在任意位置使用hdfs的指令.

vim ~/.bashrc
在檔案最後插入
export PATH=$PATH:/opt/software/hadoop/hadoop-2.6.5/bin:/opt/software/hadoop/hadoop-2.6.5/sbin
  1. 搭建zookeeper叢集

  zookeeper節點規劃在node02, node03 ,node04 節點上

首先, 在 node02 上解壓zookeeper的壓縮包
tar -zxf zookeeper-3.4.10.tar.gz -C /opt/software/zookeeper

進入解壓檔案, 修改conf目錄下的zoo_sample.cfg
mv zoo_sample.cfg zoo.cfg		重新命名

  修改zoo.cfg檔案

vim zoo.cfg		

修改dataDir的值
dataDir=/var/qb/zookeeper		設定zookeeper目錄, 路徑任意, 需自己建立

在檔案最後加入zookeeper節點的服務位置
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888

  傳送安裝包, 將zookeeper安裝包傳送到node03, node04節點上

cd /opt/software/zookeeper

scp -r zookeeper-3.4.10 node03:`pwd`
scp -r zookeeper-3.4.10 node04:`pwd`

  在各個zookeeper節點的dataDir設定的目錄下建立myid檔案, 修改檔案內容

vim /var/qb/zookeeper/myid	在各個節點的myid中寫入相應ID號
1			對應node02節點
2			對應node03節點
3			對應node04節點

  最後, 啟動zookeeper程序

cd /opt/software/zookeeper/zookeeper-3.4.10/bin

./zkServer.sh start
  1. 格式化NameNode

  在node01, node02, node03 上分別執行啟動journalnode的命令.

hadoop-daemon.sh start journalnode

  隨便選一臺NameNode(node01 || node02)作為active節點進行格式化.

hdfs namenode -format	
hadoop-daemon.sh start namenode

  另一臺NameNode節點執行

hdfs namenode  -bootstrapStandby

  格式化ZKFC程序

hdfs zkfc -formatZK
  1. 啟動HDFS

  關閉所有節點上的程序

stop-dfs.sh

  啟動HDFS

start-dfs.sh
  1. 檢視啟動程序
jps
  1. 操作HDFS檔案系統
建立目錄 hdfs dfs -mkdir -p /abc/cba
上傳檔案 hdfs dfs -D dfs.blocksize=1048576 -put  text.txt
...
  1. 關閉HDFS
stop-dfs.sh
或
killall java

注:下次啟動時, 要先啟動zookeeper程序, 再啟動hdfs