(超详细)基于Zookeeper的Hadoop HA集群的搭建

基于Zookeeper的Hadoop HA集群的搭建

JunLeon——go big or go home


(超详细)基于Zookeeper的Hadoop HA集群的搭建_第1张图片

 前言:

        高可用(high availability,HA)指的是若当前工作中的机器宕机了,系统会自动处理异常,并将工作无缝地转移到其他备用机器上,以保证服务的高可靠性与可用性。

        Hadoop HA是hadoop2.0后新添加的特性,包括NameNode HA和ResourceManager HA。

        NameNode HA采用双NameNode进行高可用,克服hadoop1.x中的单点问题。运行后,一个NameNode处于active状态,则另一处于standby状态。active NameNode节点对外提供服务,而standby NameNode节点不对外提供服务,仅仅同步active NameNode节点的状态,以便在active NameNode节点失效时快速切换继续提供服务。

        Zookeeper是一个分布式协调服务,Zookeeper即可用来保证Hadoop集群的高可用性。通过zookeeper集群与Hadoop2.X中的两个NameNode节点之间的通信,保证集群中总有一个可用的NameNode(即active NameNode),从而实现双NameNode节点构成的NameNode HA,达到HDFS高可用性。同Zookeeper也可用来保证ResourceManager HA,即实现YARN高可用性。

(超详细)基于Zookeeper的Hadoop HA集群的搭建_第2张图片

说明:

该篇Zookeeper的安装及Hadoop HA的配置是基于Hadoop分布式的基础上去操作的,所用的命令都是在root用户下执行,hadoop的安装路径为:/opt/hadoop-2.7.3

Hadoop分布式的安装请查看:大数据学习——Hadoop集群完全分布式的搭建(超详细)_JunLeon的博客-CSDN博客

1、安装配置Zookeeper集群

        Zookeeper集群由基数台机器组成,分为leader和follower两个角色。写入数据时,要写入leader,leader同意后,再通知follower写入。客户端读取数据时,由于数据都是一样的,可以从任意一台机器上读取。而leader是选举出来的,集群中任意一台机器发现没有leader时,则会推荐自己为leader,当超过半数的机器同意它为leader时,选举结束。这样当leader宕机后很快就会选举出新的leader,保证工作正常进行。

(1)下载并上传解压Zookeeper安装包

  1. 环境准备

官网下载:Index of /zookeeper,自行选择版本下载即可

我使用的是zookeeper-3.4.12版本,如需下载:百度云链接:百度网盘 请输入提取码 提取码:8888

  1. 上传解压安装

使用XShell或者其他远程连接工具连接虚拟机进行上传到Linux系统的/opt/目录下

执行命令解压上传后的压缩包:

tar -zxvf /opt/zookeeper-3.4.12.tar.gz -C /opt/
  1. 配置环境变量

vi /etc/profile

以下包括jdk、hadoop的环境变量配置:

export JAVA_HOME=/opt/jdk1.8.0_161
export HADOOP_HOME=/opt/hadoop-2.7.3
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.12
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$PATH

添加ZOOKEEPER_HOME变量:

使配置文件生效:

source /etc/profile

(2)修改配置文件

1 生成配置文件zoo.cfg

进入zookeeper主目录下的conf目录,将zoo_sample.cfg复制一份为zoo.cfg文件

cd /opt/zookeeper-3.4.12/conf
cp zoo_sample.cfg zoo.cfg

2 dataDir属性设置Zookeeper的数据存放的位置

vi zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=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=1

参数说明:

tickTime=2000 表示zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,时间单位是毫秒

initLimit=10 表示Zookeeper服务器集群中连接到leader的Follower服务器初始化连接是最长能忍受多少个心跳的时间间隔数,总的时间长度就是10*2000=20秒。

syncLimit=5 表示标识leader与follower之间发送消息,请求和应答时间长度。最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。

dataDir=/tmp/zookeeper 表示zookeeper的数据存放目录,默认在/tmp/zookeeper,此为修改项,默认情况下Zookeeper将写数据的日志文件也保存在这个目录里,也可以手动指定日志存放的目录。

clientPort=2181 表示客户端(应用程序)连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求,默认为2181。

进入zoo.cfg文件后,定位到12行,配置Zookeeper数据存放的路径:

dataDir=/opt/zookeeper-3.4.12/data/zData

3 指定Zookeeper集群中各个节点的信息

vi zoo.cfg

打开zoo.cfg文件,在末尾添加如下几行

server.1=BigData01:2888:3888
server.2=BigData02:2888:3888
server.3=BigData03:2888:3888

各个节点的信息格式为: server.X=A:B:C

X-->指zookeeper节点的myid,标识这个是第几号服务器。

A-->指每个节点的IP地址或者主机名。

B-->指follower和leader交换消息所使用的端口。

C-->指选举leader所使用的端口。

注:server后面的数字是1到255,所以Zookeeper集群最多可以有255台机器。

3 创建myid文件

在Zookeeper主目录下创建dataDir指定的目录

mkdir -p data/zData

在创建好的目录下创建一个文件,文件名为myid,并输入id

cd /opt/zookeeper-3.4.12/data/zData
vi myid

输入1即可,另外两台节点分别为2、3

4 配置好的Zookeeper分发到其他节点

scp -r /opt/zookeeper-3.4.12 root@BigData02:/opt

scp -r /opt/zookeeper-3.4.12 root@BigData03:/opt

配置另外两台机器的myid,分别配置2、3

5 启动Zookeeper 集群及查看状态

启动Zookeeper命令:

在启动Zookeeper之前,首先关闭防火墙:service iptables stop

zkServer.sh start    # 需要在每一台机器上执行此命令

查看Zookeeper命令:

zkServer.sh status

此时能查看到其中有一台被选举为leader,另外两台为follower

(超详细)基于Zookeeper的Hadoop HA集群的搭建_第3张图片

 如果查看状态时出现如下问题:

(超详细)基于Zookeeper的Hadoop HA集群的搭建_第4张图片

 注:可能是防火墙没有关闭,关闭防火墙即可

关闭Zookeeper命令:

zkServer.sh stop

2、高可用分布式集群节点规划

        本环境是在前面分布式的基础上增加的Zookeeper环境搭建,并采取Hadoop的双NameNode来保证HDFS的高可用性,故把Secondary NameNode改成NameNode。其中ResourceManager服务记录着当前集群的资源分配情况和Job的运行状态,可能会出现单点故障问题,故增加一个ResourceManager服务节点,并利用Zookeeper来实现ResourceManager自动故障转移,从而保证ResourceManager HA,实现YARN的高可用性。

节点规划

服务(角色) BigData01 (192.168.182.10) BigData02 (192.168.182.20) BigData03 (192.168.182.30)
NameNode
DataNode
ResourceManager
NodeManager
Zookeeper
JobHistoryServer

注:比较Hadoop分布式集群规划,将Secondary NameNode改为NameNode,采用了双ResourceManager,多了zookeeper节点。

3、安装配置Hadoop HA集群

因在Hadoop分布式的基础上进行配置,故无密码登录不做详细讲解,包括hadoop-env.sh、yarn-site.xml、mapred-site.xml、slaves等文件配置,详情请参照:大数据学习——Hadoop集群完全分布式的搭建(超详细)_JunLeon的博客-CSDN博客

(1)配置文件

  1. 配置hadoop-env.sh文件

    vi /opt/hadoop-2.7.3/etc/hadoop/hadoop-env.sh #在25行配置java路径即可

    配置此文件和hadoop完全分布式配置一样,可以不用去配置

  2. 配置core-site.xml文件

    vi /opt/hadoop-2.7.3/etc/hadoop/core-site.xml 在中配置:

    
        
            
            fs.defaultFS
            hdfs://mycluster
        
        
            
            hadoop.tmp.dir
            /opt/hadoopHA/tmp
        
        
            
            ha.zookeeper.quorum
            BigData01:2181,BigData02:2181,BigData03:2181
        
    
  3. 配置hdfs-site.xml文件

    vi /opt/hadoop-2.7.3/etc/hadoop/hdfs-site.xml 在中配置:

    
        
            
            dfs.nameservices
            mycluster
        
        
             
            dfs.ha.namenodes.mycluster
            nn1,nn2
        
        
            
            dfs.namenode.rpc-address.mycluster.nn1
            BigData01:9000
        
        
            
            dfs.namenode.http-address.mycluster.nn1
            BigData01:50070
        
        
            
            dfs.namenode.rpc-address.mycluster.nn2
            BigData02:9000
        
        
            
            dfs.namenode.http-address.mycluster.nn2
            BigData02:50070
        
        
            
            dfs.namenode.shared.edits.dir
            qjournal://BigData01:8485;BigData02:8485;BigData03:8485/mycluster
        
        
             
            dfs.journalnode.edits.dir
            /opt/hadoopHA/tmp/dfs/journal
        
        
            
            dfs.ha.automatic-failover.enabled
            true
        
        
             
            dfs.client.failover.proxy.provider.mycluster
            org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
        
        
             
            dfs.ha.fencing.methods
            sshfence
        
        
             
            dfs.ha.fencing.ssh.private-key-files
            /root/.ssh/id_rsa
        
        
             
            dfs.replication
            3
        
        
             
            dfs.namenode.name.dir
            /opt/hadoopHA/tmp/dfs/name
        
        
             
            dfs.datanode.data.dir
            /opt/hadoopHA/tmp/dfs/data
        
    
  4. 配置yarn-site.xml文件

    vi /opt/hadoop-2.7.3/etc/hadoop/hdfs-site.xml 在中配置:

    
        
            
            yarn.resourcemanager.ha.enabled
            true
        
        
            
            yarn.resourcemanager.ha.automatic-failover.enabled
            true
        
        
            
            yarn.resourcemanager.cluster-id
            yarn-cluster
        
        
            
            yarn.resourcemanager.ha.rm-ids
            rm1,rm2
        
        
            
            yarn.resourcemanager.hostname.rm1
            BigData01
        
        
            
            yarn.resourcemanager.hostname.rm2
            BigData02
        
        
            
            yarn.resourcemanager.zk-address
            BigData01:2181,BigData02:2181,BigData03:2181
        
        
            
            yarn.resourcemanager.recovery.enabled
            true
        
        
            
            yarn.resourcemanager.store.class
            org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
        
        
            
            yarn-nodemanager.aux-services
            mapreduce_shuffle
        
        
            
            yarn-nodemanager.aux-services.mapreduce.shuffle.class
            org.apache.hadoop.mapred.ShuffleHandler
        
        
            
            yarn.log-aggregation-enable
            true
        
        
            
            yarn.log-aggregation.retain-seconds
            106800
        
        
            
            yarn.nodemanager.remote-app-log-dir
            /opt/hadoopHA/logs
        
    

    以下配置属于默认的配置,有时运行MapReduce并行计算处理任务是=时出错而导致任务失败,故可以将以下配置参数加到yarn-site.xml文件内

    
        
        yarn.resourcemanager.scheduler.address.rm1
        BigData01:8030
    
    
        
        yarn.resourcemanager.resource-tracker.address.rm1
        BigData01:8031
    
    
        
        yarn.resourcemanager.address.rm1
        BigData01:8032
    
    
        
        yarn.resourcemanager.admin.address.rm1
        BigData01:8033
    
    
        
        yarn.resourcemanager.webapp.address.rm1
        BigData01:8088
    
    
        
        yarn.resourcemanager.scheduler.address.rm2
        BigData02:8030
    
    
        
        yarn.resourcemanager.resource-tracker.address.rm2
        BigData02:8031
    
    
        
        yarn.resourcemanager.address.rm2
        BigData02:8032
    
    
        
        yarn.resourcemanager.admin.address.rm2
        BigData02:8033
    
    
        
        yarn.resourcemanager.webapp.address.rm2
        BigData02:8088
    
  5. 配置mapred-site.xml文件

    配置此文件和hadoop完全分布式的MapReduce配置一样,可以不用去配置

  6. 配置slaves文件

    配置此文件和hadoop完全分布式的slaves配置一样,可以不用去配置

(2)将配置好的文件分发到其他节点上

scp  -r  /opt/hadoop-2.7.3/etc/hadoop root@BigData02:/opt/hadoop-2.7.3/etc/
scp  -r  /opt/hadoop-2.7.3/etc/hadoop root@BigData03:/opt/hadoop-2.7.3/etc/

(3)格式化NameNode

格式化之前先启动journalnode节点

hadoop-daemon.sh start journalnode  #三台机器都要执行该命令

格式化:

hdfs namenode -format   #格式化HDFS
hdfs zkfc -formatZK     #格式化Zookeeper

如果没有先启动journalnode节点,格式化出现以下问题:8485拒绝连接

(超详细)基于Zookeeper的Hadoop HA集群的搭建_第5张图片

如果启动journalnode还是出现上面问题, 可以在core-site.xml文件中添加如下参数:



    ipc.client.connect.max.retries
    100
    Indicates the number of retries a client will make to establish a server connection.


    ipc.client.connect.retry.interval
    10000
    Indicates the number of milliseconds a client will wait for before retrying to establish a server connection.

注意:配置这两个参数化,NameNode稳定运行,但是格式化花的时间比较长,请耐心等待。

(4)启动/停止集群

启动集群命令:

开启全部节点(启动HDFS和YARN)

start-all.sh    #启动HDFS和YARN

启动Zookeeper

hadoop-daemon.sh start zkfc     #三台机器都要执行

启动HistoryServer节点(在BigData03机器上执行)

mr-jobhistory-daemon.sh start historyserver

单独启动HDFS和YARN

start-hdfs.sh   #启动HDFS
start-yarn.sh   #启动YARN

验证(查看是否启动成功)

jps

停止集群命令:

停止全部节点

stop-all.sh     #停止HDFS和YARN

单独停止HDFS和YARN

stop-hdfs.sh    #停止HDFS
stop-yarn.sh    #停止YARN

(5)Web端访问

 

4、查询集群信息及测试HDFS高可用性

(1)验证HDFS的高可用性

(2)验证YARN的高可用性

你可能感兴趣的:(大数据学习之路,hadoop,zookeeper,big,data)