1. 程式人生 > 其它 >Hadoop-HA 搭建高可用叢集Hadoop Zookeeper

Hadoop-HA 搭建高可用叢集Hadoop Zookeeper

Hadoop Zookeeper 搭建(一)

一、準備工作

VMWARE虛擬機器 CentOS 7 系統

虛擬機器1:master

虛擬機器2:node1

虛擬機器3:node2

  • 時間同步

    ntpdate ntp.aliyun.com
  • 調整時區

    cp  /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
  • jdk1.8(以1.8為例,目前大多數企業都是使用1.8版本,最穩定)

    java -version
  • 修改主機名

    三臺分別執行 vim /etc/hostname 並將內容指定為對應的主機名
  • 關閉防火牆:systemctl stop firewalld

    • 檢視防火牆狀態:systemctl status firewalld

    • 取消防火牆自啟:systemctl disable firewalld

  • 靜態IP配置

    • 直接使用圖形化介面配置(不推薦)

    • 手動編輯配置檔案進行配置

      1、編輯網路配置檔案
      vim /etc/sysconfig/network-scripts/ifcfg-ens33

      TYPE=Ethernet
      BOOTPROTO=static
      HWADDR=00:0C:29:E2:B8:F2
      NAME=ens33
      DEVICE=ens33
      ONBOOT=yes
      IPADDR=192.168.190.100
      GATEWAY=192.168.190.2
      NETMASK=255.255.255.0
      DNS1=192.168.190.2
      DNS2=223.6.6.6

      需要修改:HWADDR(mac地址,centos7不需要手動指定mac地址)
      IPADDR(根據自己的網段,自定義IP地址)
      GATEWAY(根據自己的網段填寫對應的閘道器地址)

      2、關閉NetworkManager,並取消開機自啟
      systemctl stop NetworkManager
      systemctl disable NetworkManager

      3、重啟網路服務
      systemctl restart network
  • 免密登入

    # 1、生成金鑰
    ssh-keygen -t rsa
    注意:連敲三次生成方格形狀的金鑰,在當前狀態下,配置免金鑰登陸。
    # 2、配置免密登入(三臺虛擬機器都需要進行免密操作,不要怕麻煩!!)
    ssh-copy-id master
    ssh-copy-id node1
    ssh-copy-id node2
    # 3、測試免密登入
    ssh node1
    ssh node2
    ssh master

     

  • 配置好對映檔案:/etc/hosts(三臺虛擬機器都需要配置)

    192.168.170.100 master
    192.168.170.101 node1
    192.168.170.102 node2
    注意:每個人的IP地址都是不一樣的,檢視自己的IP地址使用 ifconfig
    使用遠端複製
    cd /etc
    scp -r hosts/ node1:`pwd`
    scp -r hosts/ node2:`pwd`

 

二、 Zookeeper 搭建

1、上傳安裝包到master並解壓

    tar -xvf zookeeper-3.4.6.tar.gz
官網下載:
https://zookeeper.apache.org/

2、配置環境變數

vim /etc/profile

export ZOOKEEPER_HOME=/usr/local/soft/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin
儲存退出,執行
source /etc/profile

配置node1和node2的環境變數
scp /etc/profile node1:/etc/
scp /etc/profile node2:/etc/

在所有節點執行
source /etc/profile

3、修改配置檔案

cd /usr/local/soft/zookeeper-3.4.6/(解壓後的目錄)
​	cd conf
zoo_sample.cfg(是一個模板檔案,_sample字尾,不起任何效果,需要複製一份)
​	cp  zoo_sample.cfg zoo.cfg
修改
dataDir=/usr/local/soft/zookeeper-3.4.6/data

檔案最後位置增加
server.0=master:2888:3888
server.1=node1:2888:3888
server.2=node2:2888:3888

4、同步到其它節點

	scp -r zookeeper-3.4.6 node1:`pwd`
	scp -r zookeeper-3.4.6 node2:`pwd`

 

5、建立/usr/local/soft/zookeeper-3.4.6/data目錄,所有節點都要建立

mkdir /usr/local/soft/zookeeper-3.4.6/data

在data目錄下建立myid檔案
vim myid 
master,node1,node2分別加上0,1,2

6、啟動zk, zkServer.sh start 三臺都需要執行

zkServer.sh status 檢視狀態

當有一個leader的時候啟動成功

連線zk zkCli.sh

zk  是一個目錄結構 ,每個節點可以存資料,同時可以有子節點

zk shell

建立目錄
create /test test
create /test/a 1
獲取資料
get /test
 
ls /test

delete 只能刪除沒有子節點的節點
rmr /test  刪除節點

重置zk 1、殺掉所有zk程序 kiil -9 pid

2、刪除data目錄下的version檔案, 所有節點都要刪除 rm -rf /usr/local/soft/zookeeper-3.4.6/data/version-2

2、啟動zk zkServer.sh start

 

Hadoop -HA 高可用 搭建(二)

一、準備工作(做之前拍攝快照)

VMWARE虛擬機器 CentOS 7 系統

虛擬機器1:master

虛擬機器2:node1

虛擬機器3:node2

  • 時間同步

    ntpdate ntp.aliyun.com
  • 調整時區

    cp  /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
  • jdk1.8(以1.8為例,目前大多數企業都是使用1.8版本,最穩定)

    java -version
  • 修改主機名

    三臺分別執行 vim /etc/hostname 並將內容指定為對應的主機名
  • 關閉防火牆:systemctl stop firewalld

    • 檢視防火牆狀態:systemctl status firewalld

    • 取消防火牆自啟:systemctl disable firewalld

  • 靜態IP配置

    • 直接使用圖形化介面配置(不推薦)

    • 手動編輯配置檔案進行配置

      1、編輯網路配置檔案
      vim /etc/sysconfig/network-scripts/ifcfg-ens33

      TYPE=Ethernet
      BOOTPROTO=static
      HWADDR=00:0C:29:E2:B8:F2
      NAME=ens33
      DEVICE=ens33
      ONBOOT=yes
      IPADDR=192.168.190.100
      GATEWAY=192.168.190.2
      NETMASK=255.255.255.0
      DNS1=192.168.190.2
      DNS2=223.6.6.6

      需要修改:HWADDR(mac地址,centos7不需要手動指定mac地址)
      IPADDR(根據自己的網段,自定義IP地址)
      GATEWAY(根據自己的網段填寫對應的閘道器地址)

      2、關閉NetworkManager,並取消開機自啟
      systemctl stop NetworkManager
      systemctl disable NetworkManager

      3、重啟網路服務
      systemctl restart network
  • 免密登入

    # 1、生成金鑰
    ssh-keygen -t rsa
    注意:連敲三次生成方格形狀的金鑰,在當前狀態下,配置免金鑰登陸。
    # 2、配置免密登入(三臺虛擬機器都需要進行免密操作,不要怕麻煩!!)
    ssh-copy-id master
    ssh-copy-id node1
    ssh-copy-id node2
    # 3、測試免密登入
    ssh node1
    ssh node2
    ssh master

     

  • 配置好對映檔案:/etc/hosts(三臺虛擬機器都需要配置)

    192.168.170.100 master
    192.168.170.101 node1
    192.168.170.102 node2
    注意:每個人的IP地址都是不一樣的,檢視自己的IP地址使用 ifconfig
    使用遠端複製
    cd /etc
    scp -r hosts/ node1:`pwd`
    scp -r hosts/ node2:`pwd`

二、 Zookeeper 搭建(一中有詳細教程)

        ZK  NN  DN  RM  NM  JN  ZKFC
master 1 1 1 1 1
node1 1 1 1 1 1 1 1
node2 1 1 1 1

停止HDFS叢集:stop-dfs.sh

1、修改hadoop配置檔案

cd  /usr/local/soft/hadoop-2.7.6/etc/hadoop
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml

舉例檢視:

[root@master hadoop]# ll
總用量 156
-rw-r--r-- 1 20415  101  4436 4月  18 2018 capacity-scheduler.xml
-rw-r--r-- 1 20415  101  1335 4月  18 2018 configuration.xsl
-rw-r--r-- 1 20415  101   318 4月  18 2018 container-executor.cfg
-rw-r--r-- 1 20415  101  1100 5月  21 15:40 core-site.xml
-rw-r--r-- 1 20415  101  3670 4月  18 2018 hadoop-env.cmd
-rw-r--r-- 1 20415  101  4269 5月  21 17:38 hadoop-env.sh
-rw-r--r-- 1 20415  101  2598 4月  18 2018 hadoop-metrics2.properties
-rw-r--r-- 1 20415  101  2490 4月  18 2018 hadoop-metrics.properties
-rw-r--r-- 1 20415  101  9683 4月  18 2018 hadoop-policy.xml
-rw-r--r-- 1 20415  101   961 5月  21 15:43 hdfs-site.xml
-rw-r--r-- 1 20415  101  1449 4月  18 2018 httpfs-env.sh
-rw-r--r-- 1 20415  101  1657 4月  18 2018 httpfs-log4j.properties
-rw-r--r-- 1 20415  101    21 4月  18 2018 httpfs-signature.secret
-rw-r--r-- 1 20415  101   620 4月  18 2018 httpfs-site.xml
-rw-r--r-- 1 20415  101  3518 4月  18 2018 kms-acls.xml
-rw-r--r-- 1 20415  101  1527 4月  18 2018 kms-env.sh
-rw-r--r-- 1 20415  101  1631 4月  18 2018 kms-log4j.properties
-rw-r--r-- 1 20415  101  5540 4月  18 2018 kms-site.xml
-rw-r--r-- 1 20415  101 11801 4月  18 2018 log4j.properties
-rw-r--r-- 1 20415  101   951 4月  18 2018 mapred-env.cmd
-rw-r--r-- 1 20415  101  1383 4月  18 2018 mapred-env.sh
-rw-r--r-- 1 20415  101  4113 4月  18 2018 mapred-queues.xml.template
-rw-r--r-- 1 root  root  1116 5月  21 15:44 mapred-site.xml
-rw-r--r-- 1 20415  101   758 4月  18 2018 mapred-site.xml.template
-rw-r--r-- 1 20415  101    12 5月  21 15:44 slaves
-rw-r--r-- 1 20415  101  2316 4月  18 2018 ssl-client.xml.example
-rw-r--r-- 1 20415  101  2697 4月  18 2018 ssl-server.xml.example
-rw-r--r-- 1 20415  101  2191 4月  18 2018 yarn-env.cmd
-rw-r--r-- 1 20415  101  4567 4月  18 2018 yarn-env.sh
-rw-r--r-- 1 20415  101  1185 5月  21 15:45 yarn-site.xml

修改配置檔案

core-site.xml

<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://cluster</value>
	</property>
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/usr/local/soft/hadoop-2.7.6/tmp</value>
	</property>
	<property>
		<name>fs.trash.interval</name>
		<value>1440</value>
	</property>
	<property>
	      <name>ha.zookeeper.quorum</name>
	      <value>master:2181,node1:2181,node2:2181</value>
	</property>
</configuration>

修改配置檔案

hdfs-site.xml

<configuration>
<!-- 指定hdfs元資料儲存的路徑 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/soft/hadoop-2.7.6/data/namenode</value>
</property>

<!-- 指定hdfs資料儲存的路徑 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/soft/hadoop-2.7.6/data/datanode</value>
</property>

<!-- 資料備份的個數 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>

<!-- 關閉許可權驗證 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>

<!-- 開啟WebHDFS功能(基於REST的介面服務) -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

<!-- //////////////以下為HDFS HA的配置////////////// -->
<!-- 指定hdfs的nameservices名稱為mycluster -->
<property>
<name>dfs.nameservices</name>
<value>cluster</value>
</property>

<!-- 指定cluster的兩個namenode的名稱分別為nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.cluster</name>
<value>nn1,nn2</value>
</property>

<!-- 配置nn1,nn2的rpc通訊埠 -->
<property>
<name>dfs.namenode.rpc-address.cluster.nn1</name>
<value>master:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster.nn2</name>
<value>node1:8020</value>
</property>

<!-- 配置nn1,nn2的http通訊埠 -->
<property>
<name>dfs.namenode.http-address.cluster.nn1</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster.nn2</name>
<value>node1:50070</value>
</property>

<!-- 指定namenode元資料儲存在journalnode中的路徑 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;node1:8485;node2:8485/cluster</value>
</property>

<!-- 指定journalnode日誌檔案儲存的路徑 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/soft/hadoop-2.7.6/data/journal</value>
</property>

<!-- 指定HDFS客戶端連線active namenode的java類 -->
<property>
<name>dfs.client.failover.proxy.provider.cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!-- 配置隔離機制為ssh -->
<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>
</configuration>

 

yarn 高可用 修改配置檔案

yarn-site.xml

<configuration>
<!-- 指定MapReduce計算框架使用YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

<!-- 指定jobhistory server的rpc地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>

<!-- 指定jobhistory server的http地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>

<!-- 開啟uber模式(針對小作業的優化) -->
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>

<!-- 配置啟動uber模式的最大map數 -->
<property>
<name>mapreduce.job.ubertask.maxmaps</name>
<value>9</value>
</property>

<!-- 配置啟動uber模式的最大reduce數 -->
<property>
<name>mapreduce.job.ubertask.maxreduces</name>
<value>1</value>
</property>
</configuration>

 

修改配置檔案

mapred-site.xml

<!-- 指定MapReduce計算框架使用YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

<!-- 指定jobhistory server的rpc地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>

<!-- 指定jobhistory server的http地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>

<!-- 開啟uber模式(針對小作業的優化) -->
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>

<!-- 配置啟動uber模式的最大map數 -->
<property>
<name>mapreduce.job.ubertask.maxmaps</name>
<value>9</value>
</property>

<!-- 配置啟動uber模式的最大reduce數 -->
<property>
<name>mapreduce.job.ubertask.maxreduces</name>
<value>1</value>
</property>

 

5、刪除hadoop資料儲存目錄下的檔案 每個節點都需要刪除(直接刪除其他節點上的 /hadoop-2.7.6/ 資料夾)

注:原來的節點上沒有Hadoop這個檔案就不要刪除了!!

其他節點上刪除   node1   node2
rm -rf /usr/local/soft/hadoop-2.7.6/

同步到其它節點 (遠端複製一份到其他兩個節點上去)

cd /usr/local/soft/
scp -r hadoop-2.7.6/ node1:`pwd`
scp -r hadoop-2.7.6/ node2:`pwd`

 

三、啟動程序 (按照一下順序進行操作)

6、啟動zookeeper 三臺都需要啟動 zkServer.sh start zkServer.sh status

7、啟動JN 儲存hdfs元資料 三臺JN上執行 啟動命令:

cd /usr/local/soft/hadoop-2.7.6/sbin/
hadoop-daemon.sh start journalnode

 

8、格式化 在一臺NN上執行,這裡選擇master

hdfs namenode -format

啟動當前的NN

hadoop-daemon.sh start namenode

 

9、執行同步 沒有格式化的NN上執行 在另外一個namenode上面執行 這裡選擇node1

/usr/local/soft/hadoop-2.7.6/bin/
hdfs namenode -bootstrapStandby

 

10、格式化ZK 在master上面執行 !!一定要先 把zk叢集正常 啟動起來

/usr/local/soft/hadoop-2.7.6/bin/
hdfs zkfc -formatZK

 

11、啟動hdfs叢集,在master上執行

start-dfs.sh

 

最後在頁面檢視(以下顯示,叢集搭建成功)

http://master:50070/   或者     http://192.168.170.110:50070/ 
http://node1:50070/    或者     http://192.168.170.120:50070/ 

關閉

stop-all.sh