hadoop HA菜鸟级别搭建教程

打印 上一主题 下一主题

主题 503|帖子 503|积分 1509

一,开始配置

目的:为master,slave1,slave2三个镜像配置hadoop的高可用性

告诫:本文实行性目的,如需高安全性或在非安全情况下搭建请查阅官方文档。本文只为在实行情况下简单快速填鸭式的搭建实行性的hadoop HA来帮助新手快速上手并理解底子概念。
NameNodeZkFcDataNodeJournalNodeResourceManagerzk集群master✔️✔️✔️✔️✔️slave1✔️✔️✔️✔️✔️slave2✔️✔️✔️✔️✔️✔️ 这是搭建完成后每个镜像所要运行的服务
二,NameNode

NameNode负责管理这个整个集群元数据和集群管理,以及命名空间,在master节点中运行。为了防止单点故障,使用zookeeper在slave2中也设立了一个NameNode用于包管高可靠,在一个NameNode制止工作时举行更换,在原NameNode正常工作过程中保持同步数据。
NameNode同时只能有一个提供例如web的客户端服务,处于Active状态,另一个为Standby(直译为跟随)就是同步状态。NameNode提供服务,两个NameNode存储的元数据是实时同步的,当Active的NameNode出现问题时,通过zk实时切换到Standby的NameNode上,并将Standby改为Active状态。
客户端通过毗连zk的署理来确定其时是哪个NameNode处于服务状态。
三,ZKFC

ZKFC在每个节点上都会开启,监控NameNode的状态,并把NameNode的状态信息汇报给Zookeeper集群。本质为开启一个zk自己的namenode去实时汇报状态,是一个临时节点,临时节点特征是客户端的 毗连断开后就会把znode删掉,所以当ZKFC失效时,也会导致切换NameNode。
DataNode会将心跳信息和Block块,汇报信息同时发送给NameNode,但DataNode只会接受Active NameNode发来的 文件读写命令。
四,JournalNode

JournalNode 节点作为 Active 节点和 Standby 节点的中心节点,它为两个节点解决了数据的同步的问题。首先 Active 节点会将元数据发送给 JournalNode 节点,然后 Standby 节点会从 JournalNode 节点获取需要同步的元数据。纵然 Standby 节点故障了、产生问题了,在它恢复正常状态后,也可以从 JournalNode 节点中同步相应的数据。这就要求 JournalNode 节点需要有持久化的功能来包管元数据不丢。
配置步调

一,前置
   1,启动vm捏造机这里使用centos7
  2,配置网络
  输入命令
  1. vi /etc/sysconfig/network-scripts/ifcfg-en33
复制代码
修改如下几个字段(这里的IPADDR后面的IP要按照自己的所需要的IP来就举行适当修改,我这里以172.16.1.244为例子)
  1. BOOTPROTO="static"
  2. IPADDR=172.16.1.244
  3. NETMASK=255.255.255.0
  4. GATEWAY=172.16.1.1
复制代码
修改后输入
  1. systemctl restart network
复制代码
3,一样平常要关闭防火墙
  1. systemctl stop firewalld
  2. systemctl disable firewalld
复制代码
4,关闭SElinux
  1. setenforce 0
复制代码
这里每次都要关闭大概改配置文件永久关闭看你自己
  二,更新安装软件
   1,更新系统
  1. yum update
  2. yum install -y yum-utils device-mapper-persistent-data lvm2
复制代码
这里会跳很多东西,中心假如有
  1. Is this ok [y/N]:
复制代码
就用英文输入法输入y表示同意
2,安装docker
  1. yum install docker
复制代码
这个一样记得输入y同意
3,启动docker服务
  1. systemctl enable docker
  2. systemctl start docker
复制代码

4,验证一下docker是否正常安装
  1. docker  version
复制代码

正常会跳出书本
   三,开始配置docker
   1,拉取centos7的容器
  1. docker pull daocloud.io/centos:7
  2. docker images
复制代码
(这个命令用来看本地所有镜像)
2,创建一个叫做netgroup的子网
  1. docker network create --subnet=172.19.0.0/16 netgroup
复制代码
3,创建在一个捏造局域网内容器,使用的是上一步的netgroup
  这里创建三个(master,slave1,slave2)
  1. docker run -itd --privileged -v /sys/fs/cgroup:/sys/fs/cgroup --name master -h master --network netgroup --ip 172.19.0.2 -p 8088:8088 -p 9870:9870 -p 9820:9820 daocloud.io/centos:7 /usr/sbin/init
复制代码
这个是名为master的容器,将容器内的端口映射到主机上,分别将容器内的 8088、9870 和 9820 端口映射到主机上的相同端口,配置了特权访问、网络设置、主机名、IP 地点、端口映射等选项。
  下面创建另外两个容器
  1. docker run -itd --privileged -v /sys/fs/cgroup:/sys/fs/cgroup --name slave1 -h slave1 --network netgroup --ip 172.19.0.3    daocloud.io/centos:7 /usr/sbin/init
复制代码
  1. docker run -itd --privileged -v /sys/fs/cgroup:/sys/fs/cgroup --name slave2 -h slave2 --network netgroup --ip 172.19.0.4   daocloud.io/centos:7 /usr/sbin/init
复制代码
 四,使用远程ssh进入liunx配置所需要的程序
   1,用MobaXterm接入你的服务器毗连你刚才的修改过的IP(我的就是172.16.1.244)
  

  2,创建三个分开来的ssh界面分别进入master,slave1和slave2容器
  进入master
  1. docker exec -it master /bin/bash
复制代码

  同理去创建slave1和slave2的界面并进入容器
  

  3,分别检察ip,假如你是按照我写的序次去创建容器,那么ip应该分别是
  1. 172.19.0.2 master
  2. 172.19.0.3 slave1
  3. 172.19.0.4 slave2
复制代码
假如不确定就输入
  1. hostname -i
复制代码
去检察一下,记住这写ip以方便发现问题举行溯源
  4,部署Openssh(所有容器都要实行一遍)
  1. yum -y install openssh openssh-server openssh-clients
复制代码
启动sshd服务(所有容器都要实行一遍)
  1. systemctl start sshd   
  2. systemctl enable sshd 
复制代码
更改root密码(所有容器都要实行一遍)
  1. passwd root
复制代码

  记住你设置的密码,发起全部一样,不实行这步大概会导致ssh加密出现问题
  为每一个容器都输入
  1. ssh-keygen -t rsa
复制代码

  中心所有的询问让你输入东西全部回车跳过,由于是实行情况所以不思量安全性,假如是生产情况请查阅官方文档获得支持
  使用私钥对应的公钥举行SSH毗连时的验证(每一个都要运行一遍)
  1. cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
复制代码
在master实行
  1. scp -rp /root/.ssh/authorized_keys root@slave1:/root/.ssh/authorized_keys
  2. scp -rp /root/.ssh/authorized_keys root@slave2:/root/.ssh/authorized_keys
复制代码

  先输入yes同意,然后输入你当初设定的密码
  在slave1实行
  1. scp -rp /root/.ssh/authorized_keys root@slave2:/root/.ssh/authorized_keys
  2. scp -rp /root/.ssh/authorized_keys root@master:/root/.ssh/authorized_keys
复制代码
同样输入yes然后输入你设定的密码(同master)
  在slave2实行
  1. scp -rp /root/.ssh/authorized_keys root@slave1:/root/.ssh/authorized_keys
  2. scp -rp /root/.ssh/authorized_keys root@master:/root/.ssh/authorized_keys
复制代码
同样输入yes然后输入你设定的密码(同master)
  
   五,配置hadoop还有jdk
   这些是你所要的文件,去网上下到你的windows电脑上
  

  全部重命名为下列情势
  

  然后传输到
  

  这个opt文件夹里面
  

  然后在主机里面输入
  1. docker cp /opt/ master:/
复制代码
再进入到master这个容器里面,进入opt文件夹(cd opt)
  

  可以看到有文件了
  然后解压缩文件
  1. tar -zxvf /opt/jdk.tar.gz -C /opt/
  2. tar -zxvf /opt/hadoop.gz -C /opt/
  3. tar -zxvf /opt/zookeeper.tar.gz -C /opt/
复制代码
解压完成后
  

  配置情况变量
  1. vi /etc/profile
复制代码
进入后在最下面输入
  1. export JAVA_HOME=/opt/jdk1.8.0_212
  2. export HADOOP_HOME=/opt/hadoop-3.1.3
  3. export ZOOKEEPER_HOME=/opt/zookeeper-3.4.6
  4. export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$PATH
复制代码

  如图所示
  然后革新文件
  1. source /etc/profile
复制代码
 六,配置zookeeper
   创建zookeeper的data目次
  1. mkdir -p /opt/zookeeper-3.4.6/data
  2. cp /opt/zookeeper-3.4.6/conf/zoo_sample.cfg zoo.cfg
复制代码
然后为创建myid文件
  1. touch /opt/zookeeper-3.4.6/data/myid
复制代码
然后修改zoo.cfg文件
  1. vi /opt/zookeeper-3.4.6/conf/zoo.cfg
复制代码
在末尾加上
  1. dataDir=/opt/zookeeper-3.4.6/data
  2. server.1=master:2888:3888
  3. server.2=slave1:2888:3888
  4. server.3=slave2:2888:3888
复制代码

  
  七,搭建HDFS HA
   配置Hadoop-env.sh
  1. vi /opt/hadoop-3.1.3/etc/hadoop/hadoop-env.sh
复制代码
在该文件底部加上
  1. export JAVA_HOME=/opt/jdk1.8.0_212
  2. export HADOOP_HOME=/opt/hadoop-3.1.3
  3. export HDFS_NAMENODE_USER=root
  4. export HDFS_DATANODE_USER=root
  5. export HDFS_SECONDARYNAMENODE_USER=root
  6. export YARN_RESOURCEMANAGER_USER=root
  7. export YARN_NODEMANAGER_USER=root
  8. export HDFS_JOURNALNODE_USER=root
  9. export HDFS_ZKFC_USER=root
复制代码
修改works中的namenode节点
  1. vi /opt/hadoop-3.1.3/etc/hadoop/workers
复制代码
打开应该是
  

  这个样子
  删掉localhost
  加入
  1. master
  2. slave1
  3. slave2
复制代码

  修改成这个样子
  然后修改core-site.xml这个文件
  1. vi core-site.xml
复制代码
在<configuration>和</configuration>添加下列文本
  1. <!-- 指定NameNode的地址 -->
  2.     <property>
  3.         <name>fs.defaultFS</name>
  4.         <value>hdfs://mycluster</value>
  5.     </property>
  6.     <!-- 指定hadoop数据的存储 -->
  7.     <property>
  8.         <name>hadoop.tmp.dir</name>
  9.         <value>/opt/hadoop-3.1.3/data</value>
  10.     </property>
  11.     <!--指定每个zookeeper服务器的位置和客户端端口号-->
  12.     <property>
  13.         <name>ha.zookeeper.quorum</name>
  14.         <value>master:2181,slave1:2181,slave2:2181</value>
  15.     </property>
  16.     <!-- 解决HDFS web页面上删除、创建文件权限不足的问题 -->
  17.     <property>
  18.         <name>hadoop.http.staticuser.user</name>
  19.         <value>root</value>
  20.     </property>
  21.     <property>
  22.          <name>hadoop.proxyuser.root.hosts</name>
  23.          <value>root</value>
  24.     </property>
  25.     <property>
  26.          <name>hadoop.proxyuser.root.groups</name>
  27.          <value>root</value>
  28.     </property>
复制代码
修改hdfs-site.xml文件
  1. vi hdfs-site.xml
复制代码
在<configuration>和</configuration>添加下列文本
  1. <configuration>
  2.       <!--集群名称-->
  3.       <property>
  4.         <name>dfs.nameservices</name>
  5.         <value>mycluster</value>
  6.       </property>
  7.       <!--集群中NameNode节点-->
  8.       <property>
  9.         <name>dfs.ha.namenodes.mycluster</name>
  10.         <value>nn1,nn2</value>
  11.       </property>
  12.       <!--NameNode RPC通讯地址-->
  13.       <property>
  14.         <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  15.         <value>master:9820</value>
  16.       </property>
  17.       <property>
  18.         <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  19.         <value>slave2:9820</value>
  20.       </property>
  21.       <!--NameNode http通讯地址-->
  22.       <property>
  23.         <name>dfs.namenode.http-address.mycluster.nn1</name>
  24.         <value>master:9870</value>
  25.       </property>
  26.       <property>
  27.         <name>dfs.namenode.http-address.mycluster.nn2</name>
  28.         <value>slave2:9870</value>
  29.       </property>
  30.       <!--NameNode元数据在JournalNode上存放的位置-->
  31.       <property>
  32.         <name>dfs.namenode.shared.edits.dir</name>
  33.         <value>qjournal://master:8485;slave1:8485;slave2:8485/my_cluster</value>
  34.       </property>
  35.       <!--JournalNode数据存放目录-->
  36.       <property>
  37.         <name>dfs.journalnode.edits.dir</name>
  38.         <value>/opt/hadoop-3.1.3/data/journal/data</value>
  39.       </property>
  40.       <!--启用nn故障自动转移-->
  41.       <property>
  42.         <name>dfs.ha.automatic-failover.enabled</name>
  43.         <value>true</value>
  44.       </property>
  45.       <!--访问代理类:client用于确定哪个NameNode为Active-->
  46.       <property>
  47.         <name>dfs.client.failover.proxy.provider.mycluster</name>
  48.         <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  49.       </property>
  50.       <!--配置隔离机制,即同一时刻只能有一台服务器对外响应-->
  51.       <property>
  52.         <name>dfs.ha.fencing.methods</name>
  53.         <value>sshfence</value>
  54.       </property>
  55.       <!--使用隔离机制时需要ssh秘钥登录-->
  56.       <property>
  57.         <name>dfs.ha.fencing.ssh.private-key-files</name>
  58.         <value>/root/.ssh/id_rsa</value>
  59.       </property>
  60.       <!--隔离的超时时间-->
  61.       <property>
  62.         <name>dfs.ha.fencing.ssh.connect-timeout</name>
  63.         <value>30000</value>
  64.       </property>
  65. </configuration>
  66.   
  67.   
复制代码
修改mapred-site.xml
  1. <property>
  2.     <name>mapreduce.framework.name</name>
  3.     <value>yarn</value>     
  4. </property>
复制代码
修改yarn-site.xml
  1. <property>
  2.     <name>yarn.resourcemanager.hostname</name>
  3.     <value>master</value>
  4. </property>
  5. <property>   
  6.     <name>yarn.nodemanager.aux-services</name>  
  7.     <value>mapreduce_shuffle</value>  
  8. </property>
复制代码

   八,分发配置并补全修改部分差异
   为slave1和slave2配置情况变量
  1. scp /etc/profile root@slave1:/etc/
  2. scp /etc/profile root@slave2:/etc/
复制代码
传输竣过跋文得(每一个都要实行)
  1. source /etc/profile
复制代码
配置myid
  1. vi /opt/zookeeper-3.4.6/data/myid
  2. ##master填写1,slave1的myid中填写2,slave2中填写3
复制代码

  以上就是配置全部过程,下面检验是否乐成配置
首先启动ZK集群(每个都要启动)
  1. zkServer.sh start
复制代码
 可以输入jps验证是否启动

然后启动journal node(每个容器都要启动)
  1. hdfs --daemon start journalnode
复制代码

格式化hdfs
  1. hdfs namenode -format
复制代码

格式化乐成
尝试在master上启动namenode
  1. hdfs --daemon start namenode
复制代码

乐成
在slave2上举行同步数据
  1. hdfs namenode -bootstrapStandby
复制代码

乐成
然后启动namenode(在slave2上)
  1. hdfs --daemon start namenode
复制代码

很明显乐成了
我们格式化一下zkfc然后启动剩下的datanode(在master上实行)
  1. hdfs zkfc -formatZK
复制代码

乐成
在master上启动hadoop集群试一下
  1. start-all.sh
复制代码



全部启动了

部分命令,表格泉源于网络。转载需要注明出处
泉源
Hadoop3 HDFS HA 高可用搭建及测试 - shine-rainbow - 博客园 (cnblogs.com)
csdn hadoop配置相关文档,
百度百科


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

灌篮少年

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表