0

0

Hadoop2.6(NN/RM)高可用集群安装与部署

php中文网

php中文网

发布时间:2016-06-07 14:56:05

|

1649人浏览过

|

来源于php中文网

原创

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

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

一、部署前准备

操作系统:CentOS7_x64

安装目录:/opt

1. 节点分配

HostName IP Hadoop HBase Zookeeper Hive
HMaster0 192.168.18.215 NameNode HMaster / Hive
HMaster1 192.168.18.216 NameNode HMaster / Hive-client
HSlave0 192.168.18.217 DataNode HRegionServer QuorumPeerMain /
HSlave1 192.168.18.218 DataNode HRegionServer QuorumPeerMain /
HSlave2 192.168.18.219 DataNode HRegionServer QuorumPeerMain /

2. 版本及功能

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

3. 逻辑结构图

wKiom1WKdhDSyisYAAMGPx45Qys169.jpg

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,我们这次就用的此方案,如下图所示。

wKioL1V6meKwAMxFAAFOKORH5AM212.jpg

ResourceManager(RM) HA实现方式:

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

二、搭建高可用Hadoop集群

1.基础环境配置

 1.1 安装JDK(每台配置

 # tar zxvf jdk-7u79-linux-x64.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

PhotoRoom
PhotoRoom

免费的AI图片背景移除和添加

下载
# 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.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,查看是否正常

wKioL1V6oWHjnOI_AAH-aNgOe1Y220.jpgwKioL1V6oWzRyCyxAAH9B0xphV8330.jpgwKioL1V6oXfCoiM9AARFO7qj3qk390.jpgwKiom1V6n9_hEyOjAACRqGZoL7U782.jpg

从上图可以看出,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


相关专题

更多
ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

33

2025.12.26

压缩文件加密教程汇总
压缩文件加密教程汇总

本专题整合了压缩文件加密教程,阅读专题下面的文章了解更多详细教程。

18

2025.12.26

wifi无ip分配
wifi无ip分配

本专题整合了wifi无ip分配相关教程,阅读专题下面的文章了解更多详细教程。

46

2025.12.26

漫蛙漫画入口网址
漫蛙漫画入口网址

本专题整合了漫蛙入口网址大全,阅读下面的文章领取更多入口。

91

2025.12.26

b站看视频入口合集
b站看视频入口合集

本专题整合了b站哔哩哔哩相关入口合集,阅读下面的文章查看更多入口。

283

2025.12.26

俄罗斯搜索引擎yandex入口汇总
俄罗斯搜索引擎yandex入口汇总

本专题整合了俄罗斯搜索引擎yandex相关入口合集,阅读下面的文章查看更多入口。

370

2025.12.26

虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

35

2025.12.25

错误代码dns_probe_possible
错误代码dns_probe_possible

本专题整合了电脑无法打开网页显示错误代码dns_probe_possible解决方法,阅读专题下面的文章了解更多处理方案。

25

2025.12.25

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

72

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 7.5万人学习

CSS3 教程
CSS3 教程

共18课时 | 4万人学习

Git 教程
Git 教程

共21课时 | 2.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号