hadoop + zookeeper HA架构搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_22830285/article/details/84288315

确保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

![在这里插入图片描述](https://img-blog.csdnimg.cn/20181120105513177.png
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集群各个节点时间同步。
能与当前网络的时间有误差。下面介绍一下与时间服务器上的时间同步的方法
6.1. 安装ntpdate工具

yum -y install ntp ntpdate

(如果安装不了,请在/etc/sysconfig/network_scripts 下面的ifcfg-ens33, 添加域名)
在这里插入图片描述
6.2. 设置系统时间与网络时间同步

 ntpdate cn.pool.ntp.org

6.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:$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 地址映射,
加上
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181122171419693.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIyODMwMjg1,size_16,color_FFFFFF,t_70
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_22830285/article/details/84288315