HA centos7搭建hadoop2.10高可用

本篇介绍在centos7中搭建hadoop2.10高可用集群 , 首先准备6台机器:2台nn(namenode);4台dn(datanode);3台jns(journalnodes)
IPhostname进程192.168.30.141s141nn1(namenode) , zkfc(DFSZKFailoverController) , zk(QuorumPeerMain)192.168.30.142s142dn(datanode), jn(journalnode) , zk(QuorumPeerMain)192.168.30.143s143dn(datanode), jn(journalnode) , zk(QuorumPeerMain)192.168.30.144s144dn(datanode), jn(journalnode)192.168.30.145s145dn(datanode)192.168.30.146s146nn2(namenode) , zkfc(DFSZKFailoverController)
各个机器 jps进程:

HA centos7搭建hadoop2.10高可用

文章插图
由于本人使用的是vmware虚拟机 , 所以在配置好一台机器后 , 使用克隆 , 克隆出剩余机器 , 并修改hostname和IP , 这样每台机器配置就都统一了每台机器配置添加hdfs用户及用户组 , 配置jdk环境 , 安装hadoop , 本次搭建高可用集群在hdfs用户下 , 可以参照:centos7搭建hadoop2.10伪分布模式
下面是安装高可用集群的一些步骤和细节:
1.设置每台机器的hostname 和 hosts
修改hosts文件 , hosts设置有后可以使用hostname访问机器 , 这样比较方便 , 修改如下:
127.0.0.1 locahost192.168.30.141 s141192.168.30.142 s142192.168.30.143 s143192.168.30.144 s144192.168.30.145 s145192.168.30.146 s1462.设置ssh无密登录 , 由于s141和s146都为namenode , 所以要将这两台机器无密登录到所有机器 , 最好hdfs用户和root用户都设置无密登录
我们将s141设置为nn1 , s146设置为nn2 , 就需要s141、s146能够通过ssh无密登录到其他机器 , 这样就需要在s141和s146机器hdfs用户下生成密钥对 , 并将s141和s146公钥发送到其他机器放到~/.ssh/authorized_keys文件中 , 更确切的说要将公钥添加的所有机器上(包括自己)
在s141和s146机器上生成密钥对:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa将id_rsa.pub文件内容追加到s141-s146机器的/home/hdfs/.ssh/authorized_keys中 , 现在其他机器暂时没有authorized_keys文件 , 我们就将id_rsa.pub更名为authorized_keys即可 , 如果其他机器已存在authorized_keys文件可以将id_rsa.pub内容追加到该文件后 , 远程复制可以使用scp命令:
s141机器公钥复制到其他机器
scp id_rsa.pub hdfs@s141:/home/hdfs/.ssh/id_rsa_141.pubscp id_rsa.pub hdfs@s142:/home/hdfs/.ssh/id_rsa_141.pubscp id_rsa.pub hdfs@s143:/home/hdfs/.ssh/id_rsa_141.pubscp id_rsa.pub hdfs@s144:/home/hdfs/.ssh/id_rsa_141.pubscp id_rsa.pub hdfs@s145:/home/hdfs/.ssh/id_rsa_141.pubscp id_rsa.pub hdfs@s146:/home/hdfs/.ssh/id_rsa_141.pubs146机器公钥复制到其他机器
scp id_rsa.pub hdfs@s141:/home/hdfs/.ssh/id_rsa_146.pubscp id_rsa.pub hdfs@s142:/home/hdfs/.ssh/id_rsa_146.pubscp id_rsa.pub hdfs@s143:/home/hdfs/.ssh/id_rsa_146.pubscp id_rsa.pub hdfs@s144:/home/hdfs/.ssh/id_rsa_146.pubscp id_rsa.pub hdfs@s145:/home/hdfs/.ssh/id_rsa_146.pubscp id_rsa.pub hdfs@s146:/home/hdfs/.ssh/id_rsa_146.pub在每台机器上可以使用cat将秘钥追加到authorized_keys文件
cat id_rsa_141.pub >> authorized_keyscat id_rsa_146.pub >> authorized_keys此时authorized_keys文件权限需要改为644(注意 , 经常会因为这个权限问题导致ssh无密登录失败)
chmod 644 authorized_keys3.配置hadoop配置文件(${hadoop_home}/etc/hadoop/)
配置细节:
注意:s141和s146具有完全一致的配置 , 尤其是ssh.
1) 配置nameservice
[hdfs-site.xml] dfs.nameservices mycluster
2) dfs.ha.namenodes.[nameservice ID]
[hdfs-site.xml]dfs.ha.namenodes.myclusternn1,nn23) dfs.namenode.rpc-address.[nameservice ID].[name node ID]
[hdfs-site.xml]配置每个nn的rpc地址 。dfs.namenode.rpc-address.mycluster.nn1 s141:8020 dfs.namenode.rpc-address.mycluster.nn2 s146:80204) dfs.namenode.http-address.[nameservice ID].[name node ID]
配置webui端口
[hdfs-site.xml] dfs.namenode.http-address.mycluster.nn1 s141:50070 dfs.namenode.http-address.mycluster.nn2 s146:500705) dfs.namenode.shared.edits.dir
名称节点共享编辑目录.选择三台journalnode节点 , 这里选择s142、s143、s144三台机器
[hdfs-site.xml] dfs.namenode.shared.edits.dir qjournal://s142:8485;s143:8485;s144:8485/mycluster6) dfs.client.failover.proxy.provider.[nameservice ID]
配置一个HA失败转移的java类(改配置是固定的) , client使用它判断哪个节点是激活态 。
[hdfs-site.xml] dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider7) dfs.ha.fencing.methods
脚本列表或者java类 , 在容灾保护激活态的nn.
[hdfs-site.xml] dfs.ha.fencing.methods sshfence dfs.ha.fencing.ssh.private-key-files /home/hdfs/.ssh/id_rsa8) fs.defaultFS
配置hdfs文件系统名称服务 。这里的mycluster为上面配置的dfs.nameservices
[core-site.xml] fs.defaultFS hdfs://mycluster9) dfs.journalnode.edits.dir
配置JN存放edit的本地路径 。
[hdfs-site.xml] dfs.journalnode.edits.dir /home/hdfs/hadoop/journal完整配置文件:
core-site.xml
fs.defaultFS hdfs://mycluster/ hadoop.tmp.dir /home/hdfs/hadoop hdfs-site.xml
dfs.replication3 dfs.hosts/opt/soft/hadoop/etc/dfs.include.txt dfs.hosts.exclude/opt/soft/hadoop/etc/dfs.hosts.exclude.txt dfs.nameservicesmycluster dfs.ha.namenodes.myclusternn1,nn2 dfs.namenode.rpc-address.mycluster.nn1s141:8020 dfs.namenode.rpc-address.mycluster.nn2s146:8020 dfs.namenode.http-address.mycluster.nn1s141:50070 dfs.namenode.http-address.mycluster.nn2s146:50070 dfs.namenode.shared.edits.dirqjournal://s142:8485;s143:8485;s144:8485/mycluster dfs.client.failover.proxy.provider.myclusterorg.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.fencing.methodssshfence dfs.ha.fencing.ssh.private-key-files/home/hdfs/.ssh/id_rsa dfs.journalnode.edits.dir/home/hdfs/hadoop/journal mapred-site.xml
mapreduce.framework.name yarn yarn-site.xml
yarn.resourcemanager.hostnames141 yarn.nodemanager.aux-servicesmapreduce_shuffle 4. 部署细节
1)在jn节点分别启动jn进程(s142 , s143 , s144)
hadoop-daemon.sh start journalnode2)启动jn之后 , 在两个NN之间进行disk元数据同步
a)如果是全新集群 , 先format文件系统,只需要在一个nn上执行 。
[s141|s146]
hadoop namenode -formatb)如果将非HA集群转换成HA集群 , 复制原NN的metadata到另一个NN上.
1.步骤一
在s141机器上 , 将hadoop数据复制到s146对应的目录下
scp -r /home/hdfs/hadoop/dfs hdfs@s146:/home/hdfs/hadoop/2.步骤二
在新的nn(未格式化的nn , 我这里是s146)上运行以下命令 , 实现待命状态引导 。注意:需要s141namenode为启动状态(可以执行:hadoop-daemon.sh start namenode ) 。
hdfs namenode -bootstrapStandby如果没有启动s141名称节点 , 就会失败 , 如图:
HA centos7搭建hadoop2.10高可用

文章插图
启动s141名称节点后 , 在s141上执行命令
hadoop-daemon.sh start namenode然后在执行待命引导命令 , 注意:提示是否格式化 , 选择N , 如图:
HA centos7搭建hadoop2.10高可用

文章插图
3. 步骤三
在其中一个NN上执行以下命令 , 完成edit日志到jn节点的传输 。
hdfs namenode -initializeSharedEdits如果执行过程中报:java.nio.channels.OverlappingFileLockException 错误:
HA centos7搭建hadoop2.10高可用

文章插图
说明namenode在启动中 , 需要停掉namenode节点(hadoop-daemon.sh stop namenode)
执行完后查看s142,s143,s144是否有edit数据 , 这里查看生产了mycluster目录 , 里面有编辑日志数据 , 如下:
HA centos7搭建hadoop2.10高可用

文章插图
4.步骤四
启动所有节点.
在s141上启动名称节点和所有数据节点:
hadoop-daemon.sh start namenodehadoop-daemons.sh start datanode在s146上启动名称节点
hadoop-daemon.sh start namenode此时在浏览器中访问http://192.168.30.141:50070/和http://192.168.30.146:50070/你会发现两个namenode都为standby
HA centos7搭建hadoop2.10高可用

文章插图
这时需要手动使用命令将其中一个切换为激活态 , 这里将s141(nn1)设置为active
hdfs haadmin -transitionToActive nn1此时s141就为active
HA centos7搭建hadoop2.10高可用

文章插图
hdfs haadmin常用命令:
HA centos7搭建hadoop2.10高可用

文章插图
至此手动容灾高可用配置完成 , 但是这种方式不智能 , 不能够自动感知容灾 , 所以下面介绍自动容灾配置
5.自动容灾配置
需要引入zookeeperquarum 和 zk 容灾控制器(ZKFC)两个组件
搭建zookeeper集群 , 选择s141 , s142 , s143三台机器 , 下载 zookeeper:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.6
1) 解压zookeeper:
tar -xzvf apache-zookeeper-3.5.6-bin.tar.gz -C /opt/soft/zookeeper-3.5.62) 配置环境变量 , 在/etc/profile中添加zk环境变量 , 并重新编译/etc/profile文件
HA centos7搭建hadoop2.10高可用

文章插图
复制代码 代码如下:source /etc/profile
3) 配置zk配置文件 , 三台机器配置文件统一
# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just # example sakes.dataDir=/home/hdfs/zookeeper# the port at which the clients will connectclientPort=2181# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the # administrator guide before turning on autopurge.## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1server.1=s141:2888:3888server.2=s142:2888:3888server.3=s143:2888:38884)分别
在s141的/home/hdfs/zookeeper(在zoo.cfg配置文件中配置的dataDir路径)目录下创建myid文件 , 值为1(对应zoo.cfg配置文件中的server.1)
在s142的/home/hdfs/zookeeper(在zoo.cfg配置文件中配置的dataDir路径)目录下创建myid文件 , 值为2(对应zoo.cfg配置文件中的server.2)
在s143的/home/hdfs/zookeeper(在zoo.cfg配置文件中配置的dataDir路径)目录下创建myid文件 , 值为3(对应zoo.cfg配置文件中的server.3)
5) 分别在每台机器上启动zk
zkServer.sh start启动成功会出现zk进程:
HA centos7搭建hadoop2.10高可用

文章插图
配置hdfs相关配置:
1)停止hdfs所有进程
stop-all.sh2)配置hdfs-site.xml , 启用自动容灾.
[hdfs-site.xml] dfs.ha.automatic-failover.enabled true3) 配置core-site.xml , 指定zk的连接地址.
ha.zookeeper.quorum s141:2181,s142:2181,s143:21814) 分发以上两个文件到所有节点 。
5) 在其中的一台NN(s141),在ZK中初始化HA状态
hdfs zkfc -formatZK出现如下结果说明成功:
HA centos7搭建hadoop2.10高可用

文章插图
也可去zk中查看:
HA centos7搭建hadoop2.10高可用

文章插图
6) 启动hdfs集群
start-dfs.sh查看各个机器进程:
HA centos7搭建hadoop2.10高可用

文章插图
启动成功 , 再看一下webui
s146为激活态
HA centos7搭建hadoop2.10高可用

文章插图
s141为待命态
HA centos7搭建hadoop2.10高可用

文章插图
至此hadoop 自动容灾HA搭建完成
总结
【HA centos7搭建hadoop2.10高可用】以上所述是小编给大家介绍的centos7搭建hadoop2.10高可用(HA) , 希望对大家有所帮助!