(二)大數據生態圈集羣搭建之 --高可用(HA)完全分佈式搭建 & NameNode-WebUI界面操作

說明

  搭建之前, 先根據(一)Linux環境搭建一文將集羣的初始環境配置OK.

下載安裝包

  Apache-Hadoop 官網: https://hadoop.apache.org/
  Apache-Hadoop各個版本下載地址: https://archive.apache.org/dist/hadoop/common/
  點擊想要的版本, 選擇hadoop-x.x.x.tar.gz文件下載,本文使用hadoop-2.6.5
在這裏插入圖片描述


  Zookeeper官網: http://zookeeper.apache.org/
  Zookeeper下載地址: https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
  選擇想要的版本進入下載, 本文使用zookeeper-3.4.10
在這裏插入圖片描述

高可用完全分佈式搭建

一. 集羣規劃

NN(active) NN(standby) DN ZK ZKFC JNN
node01
node02
node03
node04

二. hadoop安裝配置

  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>
<!--  配置集羣兩個namenode節點的本地位置  -->
<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>
<!--  配置集羣兩個namenode節點的網絡位置  -->
<property>
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
<!--  配置集羣三個journalnode節點的位置  -->
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/var/sxt/hadoop/ha/jn</value>
</property>
<!--  配置JNN生成文件存放地址  -->
<property>
	<name>dfs.client.failover.proxy.provider.mycluster</name>
	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--  配置ZKFC代理  -->
<property>
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence</value>
</property>
<!--  配置zookeeper進程對非本節點操作時的連接方式  -->
<property>
	<name>dfs.ha.fencing.ssh.private-key-files</name>
	<value>/root/.ssh/id_rsa</value>
</property>
<!--  配置上述ssh連接密鑰所在位置  -->
<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
刪除localhost(如果有)
編輯slaves, 在文件中寫入:
node02
node03
node04

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

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

  1. 安裝包分發

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

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

scp -r hadoop-2.6.5 root@node02:/opt/software/hadoop/
scp -r hadoop-2.6.5 root@node03:/opt/software/hadoop/
scp -r hadoop-2.6.5 root@node04:/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

三. zookeeper安裝配置

  1. 搭建zookeeper集羣

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

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

進入解壓文件, 修改conf目錄下的zoo_sample.cfg
cd /opt/software/zookeeper/zookeeper-3.4.10/conf
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

六.訪問NameNode的WebUI頁面

  啓動Ha集羣之後, 在本地機打開一個瀏覽器, 在地址欄輸入active 狀態的namenode節點的ip地址+端口, 例如192.168.75.133:50070 , 也可在本地機中修改host文件, 配置域名node01, 就可以使用node01:50070 來訪問webUI的頁面. 如圖:
在這裏插入圖片描述

  查看集羣的狀態:
在這裏插入圖片描述

  點擊Live Nodes查看各個DataNode節點的詳細信息:
在這裏插入圖片描述

  此處, 可通過web頁面查看HDFS的文件目錄結構以及文件的部分元數據信息.輸入框中需要輸入HDFS文件路徑.
在這裏插入圖片描述

如果是一個文件, 點擊可以顯示該文件存在哪個block, ,blockId是多少, 以及各個備份所在的節點:
在這裏插入圖片描述

七.搭建Hadoop的client

  客戶端搭建十分簡單, 只需將配置好的Hadoop安裝包發送到client節點對應目錄的位置上即可.

  搭建好client之後, 啓動集羣, 就可以在client上操作HDFS或者提交MapReduce應用程序, 在client上的操作我們稱之爲集羣外操作.

  在集羣內一臺節點上操作稱爲集羣內操作, 不建議使用集羣內操作, 因爲如果每一次操作都選擇同一個節點, 就會導致該節點的磁盤以及網絡IO負載超過其他節點, 久而久之這個節點的磁盤以及網卡性能將會下降, 最終導致數據傾斜問題. 數據傾斜是大數據開發中應當儘量避免的問題.

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