hadoop + zookeepe HA架構搭建

確保5臺linux系統節點已準備
|主機名| 內存|cpu
|nna|2G|2核
|nns|2G|2核
|dn1|1G|1核
|dn2|1G|1核
dn3|1G|1核

1、給系統設置靜態IP,可以參照我之前的hadoop 集羣部署中靜態ip設置
https://mp.csdn.net/mdeditor/84073712#

2、所有linux系統配置hosts系統文件。添加ip映射,
vi /etc/hosts
在這裏插入圖片描述
3、創建hadoop 賬號,用來專門管理集羣環境
useradd hadoop
passwd hadoop
//創建後再sudoers文件添加hadoop
3.1 添加 sudoers 寫權限
chmod +w /etc/sudoers
3.2 vi在末尾添加:hadoop ALL=(root)NOPASSWD:ALL
3.3 關閉寫權限
chmod -w /etc/sudoers

4.SSH 免密登錄
4.1 在nna 節點下 生成該節點的私鑰和公鑰
ssh-keygen -t rsa
4.2 認證授權,將id-rsa.pub 文件內容追加到authorized_keys 文件中,如果在、~/.ssh 目錄下沒有authorized_keys 文件,自己手動添加即可。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/suthorized_keys

4.3 文件授權,賦予600權限
chmod 600 ~/.ssh/authorized_keys
4.4 其他節點通過使用hadoop 賬號授權,然後將各個節點的id_rsa.pub 追加到nna 節點的authorized_keys 中
,生成公鑰後,使用 ssh-copy-id nna,即可
在這裏插入圖片描述
4.5 在完成所有節點公鑰追加之後,將nna節點下的authorized_keys 文件通過scp,分發到其他節點的hadoop ~/.ssh 目錄下。
在這裏插入圖片描述
5 、關閉防火牆
所有linux系統都執行下面語句關閉防火牆,當然我的是centos7,不同版本關閉防火牆命令不同,自行百度。
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啓動**
6修改時區。確保hadoop集羣各個節點時間同步。
能與當前網絡的時間有誤差。下面介紹一下與時間服務器上的時間同步的方法

  1. 安裝ntpdate工具
    yum -y install ntp ntpdate
    (如果安裝不了,請在/etc/sysconfig/network_scripts 下面的ifcfg-ens33, 添加域名)
    在這裏插入圖片描述
  2. 設置系統時間與網絡時間同步
    ntpdate cn.pool.ntp.org
  3. 將系統時間寫入硬件時間
    hwclock --systohc

7,zookeeper 部署
zookeeper 3.4.10 下載地址
http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.10/
7.1 解壓,
tar -zxvf zookeeper-3.4.10.tar.gz
//重命名
mv zookeeper-3.4.10 zookeeper
![//](https://img-blog.csdnimg.cn/20181120160846904.png
//在 zookeeper目錄下創建狀態數據存儲文件夾data
mkdir data
7.2配置zoo.cfg 文件
在這裏插入圖片描述

在這裏插入圖片描述

在data 文件下面創建myid 文件,在該文件下入一個0-255之間的整數,每個節點這個數字都是唯一的,本書的這些數字從1開始。
比如server.1=dn1:2888:3888,那麼在節點dn1,就應該填數字1.
然後scp同步dn1節點上的zookeeper文件到其他節點
在這裏插入圖片描述

7.3 安裝jdk ,可以參照下面文章中的jdk 環境變量配置
https://mp.csdn.net/mdeditor/84073712#

7.4 配置zookeeper 環境變量:dn1,dn2,dn3 節點都需要
在 /etc/profile 下添加
export ZK_HOME=/home/hadoop/zookeeper
export PATH=$ PATH:$ZK_HOME/bin
在這裏插入圖片描述

7.5 驗證 ,在dn1,dn2,dn3終端輸入jps命令:如下圖,有了QuorumPeerMian
在這裏插入圖片描述

8、部署安裝hadoop
下載hadoop 安裝包,並解壓到/home/hadoop 目錄下
,配置環境變量:
export HADOOP_HOME=/home/hadoop/hadoop-2.7.7
exprot PATH=PATH:PATH:HADOOP_HOME

8.2 配置 core-site.xml

  <configuration>
    <!--指定分佈式系統文件存儲的nameservice 爲cluster1-->
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://cluster1</value>
    </property>
    <!-- 指定hadoop臨時目錄 -->
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/hadoop-2.7.7/tmp</value>
    </property>  
    <!-- 指定zookeeper地址 -->
    <property>
    <name>ha.zookeeper.quorum</name>
    <value>dn1:2181,dn2:2181,dn3:2181</value>
    </property>
    <!-- 所有賬戶都可以訪問 -->
    <property>
    <name>hadoop.proxyuser.hadoop.groups</name>
    <value>*</value>
    </property>
    <!-- 所有IP都可以訪問 -->
    <property>
    <name>hadoop.proxyuser.hadoop.hosts</name>
    <value>*</value>
    </property>
    </configuration>
配置 yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <!-- RM(Resource Manager)失聯後重新鏈接的時間 -->
  <property>
    <name>yarn.resourcemanager.connect.retry-interval.ms</name>
    <value>2000</value>
  </property>
  <!-- 開啓Resource Manager HA,默認爲false -->
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>
  <!-- 配置Resource Manager -->
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>dn1:2181,dn2:2181,dn3:2181</value>
  </property>
  <!-- 開啓故障自動切換 -->
  <property>
    <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
  <!-- rm1配置開始 -->
  <!-- 配置Resource Manager主機別名rm1角色爲NameNode Active-->
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>nna</value>
  </property>
  <!-- 配置Resource Manager主機別名rm1角色爲NameNode Standby-->
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>nns</value>
  </property>
  <!-- 在nna上配置rm1,在nns上配置rm2,將配置好的文件遠程複製到其它機器上,但在yarn的另一個機器上一定要修改-->
  <property>
    <name>yarn.resourcemanager.ha.id</name>
    <value>rm1</value>
  </property>
  <!-- 開啓自動恢復功能 -->
  <property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
  </property>
  <!-- 配置與zookeeper的連接地址 -->
  <property>
    <name>yarn.resourcemanager.zk-state-store.address</name>
    <value>dn1:2181,dn2:2181,dn3:2181</value>
  </property>
  <!--用於持久化RM(Resource Manager簡稱)狀態存儲,基於Zookeeper實現 -->
  <property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  </property>
  <!-- Zookeeper地址用於RM(Resource Manager)實現狀態存儲,以及HA的設置-->
  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>dn1:2181,dn2:2181,dn3:2181</value>
  </property>
  <!-- 集羣ID標識 -->
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>cluster1-yarn</value>
  </property>
  <!-- schelduler失聯等待連接時間 -->
  <property>
    <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
    <value>5000</value>
  </property>
  <!-- 配置rm1,其應用訪問管理接口 -->
  <property>
    <name>yarn.resourcemanager.address.rm1</name>
    <value>nna:8132</value>
  </property>
  <!-- 調度接口地址 -->
  <property>
    <name>yarn.resourcemanager.scheduler.address.rm1</name>
    <value>nna:8130</value>
  </property>
  <!-- RM的Web訪問地址 -->
  <property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>nna:8188</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
    <value>nna:8131</value>
  </property>
  <!-- RM管理員接口地址 -->
  <property>
    <name>yarn.resourcemanager.admin.address.rm1</name>
    <value>nna:8033</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.admin.address.rm1</name>
    <value>nna:23142</value>
  </property>
  <!-- rm1配置結束 -->
  <!-- rm2配置開始 -->
  <!-- 配置rm2,與rm1配置一致,只是將nna節點名稱換成nns節點名稱 -->
  <property>
    <name>yarn.resourcemanager.address.rm2</name>
    <value>nns:8132</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address.rm2</name>
    <value>nns:8130</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>nns:8188</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
    <value>nns:8131</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address.rm2</name>
    <value>nns:8033</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.admin.address.rm2</name>
    <value>nns:23142</value>
  </property>
  <!-- rm2配置結束 -->
  <!-- NM(NodeManager得簡稱)的附屬服務,需要設置成mapreduce_shuffle才能運行MapReduce任務 -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <!-- 配置shuffle處理類 -->
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <!-- NM(NodeManager得簡稱)本地文件路徑 -->
  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/home/hadoop/hadoop-2.7.7/yarn/local</value>
  </property>
  <!-- NM(NodeManager得簡稱)日誌存放路徑 -->
  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/home/hadoop/hadoop-2.7.7/yarn/log</value>
  </property>
  <!-- ShuffleHandler運行服務端口,用於Map結果輸出到請求Reducer  -->
  <property>
    <name>mapreduce.shuffle.port</name>
    <value>23080</value>
  </property>
  <!-- 故障處理類 -->
  <property>
    <name>yarn.client.failover-proxy-provider</name>
    <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
  </property>
  <!-- 故障自動轉移的zookeeper路徑地址 -->
  <property>
    <name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name>
    <value>/yarn-leader-election</value>
  </property>
  <property>
    <name>mapreduce.jobtracker.address</name>
    <value>http://nna:9001</value>
  </property>
 <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
 </property>
 <property>
     <name>yarn.nodemanager.remote-app-log-dir</name>
     <value>/tmp/logs</value>
 </property>
 <property>
     <name>yarn.nodemanager.remote-app-log-dir-suffix</name>
     <value>logs</value>     
  </property>
 <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>259200</value>
 </property>
 <property>
    <name>yarn.log-aggregation.retain-check-interval-seconds</name>
    <value>3600</value>
 </property>
<property>
    <name>yarn.web-proxy.address</name>
    <value>nna:8090</value>
</property> 

<property>
     <name>yarn.resourcemanager.scheduler.class</name>
     <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
    <name>yarn.resourcemanager.system-metrics-publisher.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.scheduler.fair.allocation.file</name>
    <value>/data/soft/new/hadoop/etc/hadoop/fair-scheduler.xml</value>
</property>
 -->
<property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>1024</value>
</property>
<property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>1</value>
</property>
<property>
  <name>yarn.nodemanager.vmem-pmem-ratio</name>
  <value>4.2</value>
</property>
</configuration>

配置mapred-site.xml

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <!-- 指定mr框架爲yarn方式 -->
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    <property>
         <name>mapreduce.jobhistory.address</name>
         <value>0.0.0.0:10020</value>
    </property>
    <property>
         <name>mapreduce.jobhistory.webapp.address</name>
         <value>0.0.0.0:19888</value>
    </property>
    </configuration>
配置hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice爲...,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
</property>
<!-- ns1下面有兩個NameNode,分別是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>nna,nns</value>
</property>
<!-- nna的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.cluster1.nna</name>
<value>nna:9000</value>
</property>
<!-- nna的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster1.nna</name>
<value>nna:50070</value>
</property>
<!-- nns的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.cluster1.nns</name>
<value>nns:9000</value>
</property>
<!-- nns的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster1.nns</name>
<value>hostbb:50070</value>
</property>
<!-- 指定NameNode的元數據在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://dn1:8485;dn2:8485;dn3:8485/cluster1</value>
</property>
<!-- 指定JournalNode在本地磁盤存放數據的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/hadoop-2.7.7/journaldata</value>
</property>
<!-- 開啓NameNode失敗自動切換 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失敗自動切換實現方式 -->
<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔離機制方法-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</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>
<!-- 指定元數據冗餘分數 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定datanode 數據存儲地址 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hadoop-2.7.7/nodedata</value>
</property>
<!-- 指定web 訪問hdfs目錄 -->
<property>
<name>dfs.webhdfs.enable</name>
<value>true</value>
</property>
<!-- 實現自動故障切換 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>dn1:2181,dn2:2181,dn3:2181</value>
</property>
</configuration>

8.3 啓動journalnode
8.3.1 在任意一臺namdnode節點上啓動Journalnode
sbin/hadoop-daemon.sh start journalnode
8.3.2 輸入jps
查看終端是否 顯示對應線程(journalNode)
在這裏插入圖片描述

8.4,啓動hadoop
初次啓動集羣時,需要格式化namenode節點,
bin/hdfs namenode -format
8.5 向zookeeper 註冊
bin/hdfs zkfc -formatZK
8.6啓動集羣
bin/hdfs start-all.sh

hadoop訪問地址:
http://nna:50070
http://nna:8188

我的是在windows 系統下訪問,記得修改win的hosts 地址映射,
加上
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

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