视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Hadoop2.6(NN/RM)高可用集群安装与部署
2020-11-09 16:14:25 责编:小采
文档


Hadoop2对HDFS的改进很大,支持HDFS(NameNode) 和ResourceManager高可用性,避免集群中单点故障造成整个集群不可用。那么,从本文开始将部署一套高可用Hadoop集群及家族中相关开源系统,具体 根据下面规划来,本文只部署高可用Hadoop集群,后续 很快更新其他

Hadoop2对HDFS的改进很大,支持HDFS(NameNode) 和ResourceManager高可用性,避免集群中单点故障造成整个集群不可用。那么,从本文开始将部署一套高可用Hadoop集群及家族中相关开源系统,具体根据下面规划来,本文只部署高可用Hadoop集群,后续很快更新其他软件部署及使用。

一、部署前准备

操作系统:CentOS7_x

安装目录:/opt

1. 节点分配

HostNameIPHadoopHBaseZookeeperHive
HMaster0192.168.18.215NameNodeHMaster/Hive
HMaster1192.168.18.216NameNodeHMaster/Hive-client
HSlave0192.168.18.217DataNodeHRegionServerQuorumPeerMain/
HSlave1192.168.18.218DataNodeHRegionServerQuorumPeerMain/
HSlave2192.168.18.219DataNodeHRegionServerQuorumPeerMain/

2. 版本及功能

软件名
版本号功能
Hadoophadoop-2.6.0.tar.gz为海量数据提供分布式存储(HDFS)和分布式计算(YARN)。
HBasehbase-1.0.1.1-src.tar.gz基于Hadoop的分布式、面向列的NoSQL数据库,适用于非结构化数据存储的数据库。
Zookeeperzookeeper-3.4.6.tar.gz一个分布式应用程序协调服务,为应用提供一致性服务,是Hadoop和Hbase的重要组件。
Hiveapache-hive-1.2.0-bin.tar.gz基于Hadoop的一个数据仓库工具,将结构化的数据文件映射成一张表,并提供简单的SQL查询功能,将SQL语句转换为MapReduce任务运行处理。
Phoenix
phoenix-4.4.0-HBase-1.0-bin.tar.gzHbase的SQL驱动,Phoenix让Hbase支持以JDBC方式访问,并将SQL查询转换成Hbase的扫描和相应的操作。
JDKjdk-7u79-linux-x.gzJAVA运行环境
Hadoop生态系统下载地址:http://www.apache.org/dist/
JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

3. 逻辑结构图

NameNode(NN) HA实现方式:

一种是将NN维护的元数据保存一份到NFS上,当NN故障,可以通过另一台NNe读取NFS目录中的元数据备份进行恢复工作,需要手动进行操作,并不是真正意义上的HA方案。

另一种是准备一台备用NN节点,通过定期下载NN的元数据和日志文件来备份,当NN故障时,可以通过这台进行恢复,由于主备节点元数据和日志并不是实时同步,所以会丢失一些数据。

前两种方案都不是很理想,社区提供一种更好的方案,基于QJM(Qurom Journal Manager)的共享日志方案。QJM的基本原理是NN(Active)把日志写本地和2N+1(奇数)台JournalNode上,当数据操作返回成功时才写入日志,这个日志叫做editlog,而元数据存在fsimage文件中,NN(Standby)定期从JournalNode上读取editlog到本地。在这手动切换的基础上有开发了基于Zookeeper的ZKFC(ZookeeperFailover Controller)自动切换机制,Active和Standby节点各有ZKFC进程监控NN监控状况,定期发送心跳,当Active节点故障时Standby会自动切换为ActiveNode,我们这次就用的此方案,如下图所示。

ResourceManager(RM) HA实现方式:

RM将状态信息存储在Zookeeper中,当Active故障,Standby切换为Active后,从ZK读取相应的作业信息,重新构建作业的内存信息,然后开始接受NodeManager心跳,并接受客户端提交作业的请求等。

二、搭建高可用Hadoop集群

1.基础环境配置

1.1 安装JDK(每台配置)

 # tar zxvf jdk-7u79-linux-x.gz
 # mv jdk1.7.0_79 /usr/local/jdk1.7
 # vi /etc/profile
 JAVA_HOME=/usr/local/jdk1.7
 PATH=$PATH:$JAVA_HOME/bin
 CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
 export JAVA_HOME PATH CLASSPATH
 # source /etc/profile #使配置生效

1.2 修改主机名,并添加hosts文件(每台配置)

 # hostname HMaster0
 # vi /etc/hostname
 HMaster0
 # cat /etc/hosts
 127.0.0.1 localhost localhost.localdomain localhost4localhost4.localdomain4
 ::1 localhost localhost.localdomainlocalhost6 localhost6.localdomain6
 192.168.18.215 HMaster0
 192.168.18.216 HMaster1
 192.168.18.217 HSlave0
 192.168.18.218 HSlave1
 192.168.18.219 HSlave2

1.3 配置SSH无密码登陆(在HMaster1做同样的操作)

 # ssh-kegen #一直回车创建秘钥对
 [root@HMaster0]# cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys
 [root@HMaster0]# scp /root/.ssh/authorized_keys root@HMaster0:/root/.ssh
 [root@HMaster0]# scp /root/.ssh/authorized_keys root@HMaster1:/root/.ssh
 [root@HMaster0]# scp /root/.ssh/authorized_keys root@HSlave0:/root/.ssh
 [root@HMaster0]# scp /root/.ssh/authorized_keys root@HSlave1:/root/.ssh
 [root@HMaster0]# scp /root/.ssh/authorized_keys root@HSlave2:/root/.ssh
 [root@HMaster0]# ssh root@HMaster0 'chmod 600 /root/.ssh/authorized_keys && chmod 700 /root/.ssh' 
 [root@HMaster0]# ssh root@HMaster1 'chmod 600 /root/.ssh/authorized_keys && chmod 700 /root/.ssh' 
 [root@HMaster0]# ssh root@HSlave0 'chmod 600 /root/.ssh/authorized_keys && chmod 700 /root/.ssh' 
 [root@HMaster0]# ssh root@HSlave1 'chmod 600 /root/.ssh/authorized_keys && chmod 700 /root/.ssh' 
 [root@HMaster0]# ssh root@HSlave2 'chmod 600 /root/.ssh/authorized_keys && chmod 700 /root/.ssh'

现在就可以不用密码登陆某一台了。

2. Zookeeper集群安装与配置(三台HSlave配置)

2.1 安装与配置

 # tar zxvf zookeeper-3.4.6.tar.gz
 # mv zookeeper-3.4.6 /opt
 # cd /opt/zookeeper-3.4.6/conf
 # cp zoo_sample.cfg zoo.cfg
 # vi zoo.cfg
 tickTime=2000 
 initLimit=10 
 syncLimit=5 
 dataDir=/home/zookeeper/data 
 dataLogDir=/home/zookeeper/logs 
 clientPort=2181 
 server.0=HSlave0:2888:3888 
 server.1=HSlave1:2888:3888
 server.2=HSlave2:2888:3888

参数说明:

tickTime:ZK服务器之间或客户端与服务器之间间隔多长时间发送一个心跳,单位毫秒

initLimit:ZK服务器集群中连接Leader的Follower服务器初始化连接时最长忍受多长心跳时间间隔(5*20000=10s)

syncLimit:标识Leader与Follower同步消息,如果超过时间(5*2000=10s),未完成同步,将剔除这个节点,所有连接此Follower服务器的客户端将连接到另一个Foolower服务器上

dataDir:ZK保存数据的目录,默认情况下,ZK也会将日志文件保存在此目录

dataLogDir:指定日志文件目录

clientPort:客户端连接ZK服务器端口

server.0:第一个0代表第几号ZK服务器,HSlave0是这个服务器的主机名或IP,2888是这个ZK服务器与集群中Leader服务器交换信息的端口,3888是Leader服务器出现故障时,用这个端口通信重新选举,在选出一个新的Leader

2.2 创建目录和id文件(三台HSlave对应操作)

# mkdir /home/zookeeper/data

# mkdir /home/zookeeper/logs

# vi /home/zookeeper/data/myid

0

#必须创建这个id,否则启动会报错。分别ZK集群节点创建myid号,myid一定对应好zoo.cfg中配置的server后面0、1和2这个ZK号

2.3 分别启动三个ZK节点(三台HSlave操作)

# /opt/zookeeper-3.4.6/bin/zkServer.sh start

注意:每次都需要分别启动ZK节点,不能通过hadoop管理启动

2.4 检查是否启动成功

分别查看ZK每个节点状态可以看到有两个follower节点,一个leader节点:

# /opt/zookeeper-3.4.6/bin/zkServer.sh status

 JMX enabled by default
 Using config:/opt/zookeeper-3.4.6/bin/../conf/zoo.cfg
 Mode: follower
 JMX enabled by default
 Using config:/opt/zookeeper-3.4.6/bin/../conf/zoo.cfg
 Mode: leader

在集群任意一节点都会启动一个进程:

# jps

1990 QuorumPeerMain

博客地址:http://lizhenliang.blog.51cto.com

3. Hadoop安装与配置(每台都同样配置)

3.1 安装与配置

# tar zxvf hadoop-2.6.0.tar.gz

# mv hadoop-2.6.0 /opt

# cd /opt/hadoop-2.6.0/etc/hadoop

# vi core-site.xml

 
 
 fs.defaultFS
 hdfs://hcluster
 
 
 
 hadoop.tmp.dir
 /home/hadoop/tmp
 
 
 
 ha.zookeeper.quorum
 HSlave0:2181,HSlave1:2181,HSlave2:2181
 
# vi hdfs-site.xml

 
 dfs.nameservices
 hcluster
 
 
 
 dfs.ha.namenodes.hcluster
 HMaster0,HMaster1
 
 
 
 dfs.data.dir
 /home/hadoop/hdfs/data
 
 
 
 dfs.replication
 3
 
 
 dfs.namenode.rpc-address.hcluster.HMaster0
 HMaster0:9000
 
 
 
 dfs.namenode.rpc-address.hcluster.HMaster1
 HMaster1:9000
 
 
 
 dfs.namenode.http-address.hcluster.HMaster0
 HMaster0:50070
 
 
 dfs.namenode.http-address.hcluster.HMaster1
 HMaster1:50070
 
 
 
 dfs.namenode.name.dir
 file:/home/hadoop/name
 
 
 
 dfs.namenode.shared.edits.dir
 qjournal://HSlave0:8485;HSlave1:8485;HSlave2:8485/hcluster
 
 
 
 dfs.journalnode.edits.dir
 /home/hadoop/journal
 
 
 
 dfs.ha.automatic-failover.enabled
 true
 
 
 
 dfs.client.failover.proxy.provider.hcluster
 org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
 
 
 
 dfs.ha.fencing.methods
 sshfence(hdfs)
 shell(/bin/true)
 
 
 
 dfs.ha.fencing.ssh.private-key-files
 /root/.ssh/id_rsa
 
# vi yarn-site.xml

 
 
 yarn.resourcemanager.ha.enabled
 true
 
 
 
 yarn.resourcemanager.cluster-id
 rm-cluster
 
 
 
 yarn.resourcemanager.ha.rm-ids
 rm1,rm2
 
 
 
 yarn.resourcemanager.ha.automatic-failover.recover.enabled
 true
 
 
 yarn.resourcemanager.recovery.enabled 
 true 
  -->
 
 
 yarn.resourcemanager.hostname.rm1
 HMaster0
 
 
 
 yarn.resourcemanager.hostname.rm2
 HMaster1
 
 
 
 yarn.resourcemanager.store.class
 org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
 
 
 
 yarn.resourcemanager.zk-address
 HSlave0:2181,HSlave1:2181,HSlave2:2181
 
 
 
 yarn.resourcemanager.scheduler.address.rm1
 HMaster0:8030
 
 
 yarn.resourcemanager.scheduler.address.rm2
 HMaster1:8030
 
 
 
 yarn.resourcemanager.resource-tracker.address.rm1
 HMaster0:8031
 
 
 yarn.resourcemanager.resource-tracker.address.rm2
 HMaster1:8031
 
 
 
 yarn.resourcemanager.address.rm1
 HMaster0:8032
 
 
 yarn.resourcemanager.address.rm2
 HMaster1:8032
 
 
 
 yarn.resourcemanager.admin.address.rm1
 HMaster0:8033
 
 
 yarn.resourcemanager.admin.address.rm2
 HMaster1:8033
 
 
 
 yarn.resourcemanager.webapp.address.rm1
 HMaster0:8088
 
 
 yarn.resourcemanager.webapp.address.rm2
 HMaster1:8088
 
# vi mapred-site.xml

 
 
 mapreduce.framework.name
 yarn
 
 
 
 mapreduce.jobhistory.address
 0.0.0.0:10020
 
 
 
 mapreduce.jobhistory.webapp.address
 0.0.0.0:19888
 
# vi hadoop-env.sh
将export JAVA_HOME=${JAVA_HOME}修改为我们安装的JDK路径 export JAVA_HOME=/usr/local/jdk1.7
# vi slaves 
HSlave0
HSlave1
HSlave2

3.1 对NameNode(HMaster0)节点进行格式化

# hadoop namenode –format

注意:格式化第二次有可能会造成DataNode无法启动,原因是NameSpaceID不一致造成,解决方法是找出不一致的VERSION修改NameSpaceID,也可以删除hdfs/data目录。

3.2 启动HMaster0(active)节点NameNode

# hadoop-daemon.sh start namenode

3.3 HMaster1节点上同步(HMaster0)元数据

# hdfs namenode –bootstrapStandby

3.4 启动HMaster1(standby)节点NameNode

# hadoop-daemon.sh start namenode

3.5 在HMaster0格式化ZKFC

# hdfs zkfc –formatZK

3.6 在HMaster0节点启动HDFS集群

# start-dfs.sh

3.7 分别在active节点启动ResourceManager

# yarn-start.sh #会分别启动其他三台NodeManager节点

3.8 在standby节点启动ResourceManager

# yarn-daemon.sh start resourcemanager

3.9 验证Hadoop集群(HDFS和YARN)是否启动成功

# jps #在HMaster0节点可以看到

32040 DFSZKFailoverController #ZKFC用于监控NameNode active和standby节点状态,并故障切换

30187 ResourceManager #YARN资源管理进程

31934 NameNode #HDFS元数据进程

13607 Jps #运行jps命令时自身进程

# jps #在HSlave0节点可以看到

13229 DataNode

31215 NodeManager

1990 QuorumPeerMain

13314 JournalNode

31390 Jps

# 通过访问Hadoop提供的WEB,查看是否正常

从上图可以看出,NameNode分为active和standby,ResouceManager也分为active和standby,也就是说,NN和RM均成功实现HA,当你测试停止active节点上NN或者RM时,都会正常切换到standby节点,这时再访问WEB,状态已经改变。目前NN只支持两台做HA,RM HA支持多台。

4. HDFS 操作命令

# hadoop dfsadmin -report #查看DataNode节点信息,可以使用这个命令脚本监控DFS状况

# hadoop fs -ls hdfs://hcluster:9000/ #指定HDFS地址访问

# hadoop fs -ls / #列出HDFS文件系统目录下文件和目录

# hadoop fs -lsr / #递归列出目录

# hadoop fs -mkdir /test #创建test目录

# hadoop fs -put /root/test.txt /test/test.txt #上传文件到test目录

# hadoop fs -cat /test/test.txt #查看文件内容

# hadoop fs -du /test/test.txt #查看文件大小

# hadoop fs -rm /test/test.txt #删除文件

# hadoop fs -rmr /test #递归删除目录或文件


提醒:Hadoop配置较为复杂,往往会因为自己的一点点配置错误,造成服务无法启动,不要心急,这时你应该静下心来仔细看看安装目录中logs目录下以.log结尾的日志,可帮助你解决问题。祝你好运!


HBase1.0分布式NoSQL数据库部署及使用请点:http://lizhenliang.blog.51cto.com/7876557/1665130

下载本文
显示全文
专题