美文网首页
HA集群搭建

HA集群搭建

作者: 钟敏_1788 | 来源:发表于2018-11-12 11:15 被阅读0次

    Hadoop

    HA集群搭建文档.................................................................................................. 2

    1、 概述................................................................................................................... 2

    1.1 安装环境...................................................................................................... 2

    1.2 高可用(HA)hadoop集群介绍..................................................................... 2

    1.3 集群规划...................................................................................................... 3

    2、Hadoop集群搭建.................................................................................................. 4

    2.1 集群基础环境配置........................................................................................ 5

    2.2 集群搭建.................................................................................................... 12

    Hadoop

    HA集群搭建文档

    详细记录在本地Vmware虚拟机中搭建五节点的Hadoop HA集群过程

    [if !supportLists]1、[endif]概述

    1.1 安装环境

    本机系统:win10 16GB内存

    虚拟机系统:CentOS6.8 64位

    虚拟机软件:VMWare14.1.1

    JDK版本:JDK1.8.0.92

    Hadoop版本:2.6.5

    Zookeeper版本:3.4.10

    1.2 高可用(HA)hadoop集群介绍

    1)HDFS高可用

    在 Hadoop 2.0之前,在HDFS 集群中NameNode 存在单点故障 (SPOF:A Single Point of Failure)。对于只有一个 NameNode 的集群,如果NameNode 机器出现故障(比如宕机或是软件、硬件升级),那么整个集群将无法使用,直到 NameNode 重新启动。HDFS 的 HA 功能通过配置 Active/Standby 两个 NameNodes 实现在集群中对 NameNode 的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将 NameNode 很快的切换到另外一台机器。    

    在一个典型的 HDFS(HA) 集群中,使用两台单独的机器配置为 NameNodes 。在任何时间点,确保 NameNodes 中只有一个处于 Active 状态,其他的处在 Standby 状态。其中ActiveNameNode 负责集群中的所有客户端操作,StandbyNameNode 仅仅充当备机,保证一旦 ActiveNameNode 出现问题能够快速切换。为了能够实时同步 Active 和 Standby 两个NameNode 的元数据信息(实际上 editlog),需提供一个共享存储系统,可以是 NFS、QJM(Quorum Journal Manager)或者 Zookeeper,Active Namenode 将数据写入共享存储系统,而 Standby 监听该系统,一旦发现有新数据写入,则读取这些数据,并加载到自己内存中,以保证自己内存状态与 Active NameNode 保持基本一致,如此这般,在紧急情况下 standby 便可快速切为 active namenode。HDFS NameNode 的高可用整体架构如下图所示:[if !vml]

    [endif]

    2)YARN高可用

    对于ResourceManger也存在单点故障问题,ResourceManager(RM)负责跟踪群集中的资源,并调度应用程序(例如MapReduce作业)。在Hadoop 2.4之前,ResourceManager是YARN集群中的单点故障。高可用性功能以活动/待机资源管理器对的形式添加冗余,以消除此单一故障点。

    ResourceManger高可用架构图如下:

    [if !vml]

    [endif]

    1.3 集群规划

    这里是一个五节点的Hadoop HA集群,集群规划如下:

    节点(IP)角色

    Hadoop01(192.168.1.11)namenode,datanode,nodemanager,zookeeper, journalnode

    Hadoop02(192.168.1.12)secondaryNamenode,datanode,nodemanager,zookeeper, journalnode

    Hadoop03(192.168.1.13)datanode,nodemanager,zookeeper, journalnode

    Hadoop04(192.168.1.14)datanode,nodemanager,zookeeper, resourcemanager, journalnode

    Hadoop05(192.168.1.15)datanode,nodemanager,zookeeper, resourcemanager, journalnode

    2、Hadoop集群搭建

    注意:没特殊说明,都是使用hadoop用户进行操作,需要使用root用户进行操作的时候,会特别指出;

    首先做一下说明,统一将软件安装到/app目录下,方便管理,安装软件的时候,需要切换到普通hadoop用户;

    切换到root用户,在根目录下创建一个/app目录,并修改权限:

    [if !vml]

    [endif]

    2.1 集群基础环境配置

    2.1.1 添加hadoop用户

    如果hadoop01~hadoop05节点没有hadoop用户,请创建一个hadoop用户;

    2.1.2 防火墙配置

    在这里直接关闭了防火墙和SELINUX,实际生产环境中不能直接关闭,需要添加修改防火墙规则;

    2.1.3 网络设置

    在进行以下操作的前提是:五台节点之间的网络互通,参考:“海工所_VMWware安装虚拟机文档_大数据_郑智”文档中的网络配置部分;

    2.1.4 SSH免密登录配置(重难点)

    1)为什么需要配置SSH免密?

    在集群中,Hadoop控制脚本依赖SSH来执行针对整个集群的操作。例如,某个脚本能够终止并重启集群中的所有守护进程。所以,需要安装2 SSH,但是,SSH远程登陆的时候,需要密码验证,集群中数千台计算机,数千台计算机都需要手工输入密码,这是不太现实的,所以,就需要配置SSH无密码登录。

    例如,如果主机上安装了ssh服务,但是没有做任何配置,也可以使用ssh登录到远程主机,但是需要输入密码,如下所示:

    [if !vml]

    [endif]

    即使ssh 本机,也需要输入密码;

    2)SSH免密登录原理

    客户机用户拥有自己的一对公钥私钥对,它将公钥分发给需要远程登录的主机上,然后在客户机需要ssh登录远程主机时,客户机会发送一个请求给远程主机,远程主机用客户机的公钥加密一段信息,然后发送给客户机,客户机使用私钥进行解密后,将原始的信息再发送给远程主机,远程主机经过验证后,来判断这个客户机的身份;

    现在配置五台节点之间,hadoop用户的免密SSH登录;

    3)生成公钥密钥对

    下面,以节点hadoop01为例,介绍下如下在hadoop用户下生成rsa公钥密钥对

    首先,切换到hadoop用户,运行命令:ssh-keygen -t rsa #(生成的是rsa类型的密钥),出现需要输入的地方,直接按“Enter”键;

    [if !vml]

    [endif]

    运行完成后看,会在hadoop用户目录的.ssh目录下生成一个公钥文件和私钥文件,id_rsa为私钥文件,id_rsa.pub为公钥文件,如下图:

    [if !vml]

    [endif]

    分别在其他四个节点上执行相同的操作,生成公钥私钥对;

    4)传送公钥文件到远程主机

    然后,以节点hadoop01作为客户机,hadoop01、hadoop02、hadoop03、hadoop04、hadoop05作为需要远程登录的主机,介绍如何实现从客户机上免密ssh登录远程主机的步骤:

    首先,在客户机hadoop1上运行命令:ssh-copy-id user@host,将其公钥传送到需要远程登录的主机host上面,例如,运行命令:ssh-copy-id hadoop@hadoop02

    [if !vml]

    [endif]

    在节点hadoop02上查看hadoop用户主目录下的.ssh/authorized_keys内容:

    [if !vml]

    [endif]

    可以看到这条记录是hadoop01节点下hadoop用户目录下.ssh/id_rsa.pub公钥文件内容:

    [if !vml]

    [endif]

    所以,实际上,ssh-copy-id user@host这条命令的作用是:将客户机用户的公钥内容添加到远程主机的user用户主目录下的./ssh/authorized_keys文件中;

    再来验证一下,以hadoop01同时作为客户机和远程主机,运行命令:ssh-copy-id hadoop@hadoop01:

    [if !vml]

    [endif]

    同样的,依次运行命令:ssh-copy-id hadoop@hadoop03、ssh-copy-id

    hadoop@hadoop04、ssh-copy-id hadoop@hadoop05:

    [if !vml]

    [endif]

    现在,以hadoop01作为客户机,验证下ssh登录其他节点,可以免密直接ssh登录,如下图:

    [if !vml]

    [endif]

    至此,实现了从客户机节点hadoop01,ssh免密登录远程主机hadoop01~hadoop05,回顾一下过程,本质是将hadoop01客户机的hadoop用户公钥文件内容分发追加到hadoop01~hadoop05主机的hadoop用户主目录下的./ssh/authorized_keys文件中;那么,如果将节点hadoop01作为主机,节点hadoop01~hadoop05作为客户机并可以免密SSH登录到主机hadoop01,则hadoop01节点的hadoop用户需要拥有hadoop01~hadoop05五个节点hadoop用户的公钥,所以就需要将节点hadoop01~hadoop05五个节点的hadoop用户的公钥文件分发传送到hadoop01节点上,这样就实现了hadoop01~hadoop5五个节点的hadoop用户免密ssh登录到主机hadoop01上;由于现在hadoop01节点hadoop用户主目录下的./ssh/authorized_keys文件中包含了五个节点的公钥,所以只需要将这个文件分发给其他四个节点hadoop02~hadoop05,就可以实现五个节点之间,互相以hadoop用户免密SSH登录。

    5)五节点hadoop用户相互免密SSH登录

    在节点hadoop02、hadoop03、hadoop04和hadoop05上分别运行命令:ssh-copy-id hadoop@hadoop01,将各节点上hadoop用户的公钥追加到hadoop01节点hadoop用户主目录下,的.ssh/authorized_keys文件中:

    [if !vml]

    [endif]

    然后,将hadoop01节点hadoop用户主目录的./ssh/authorized_keys文件分发给其余四个节点hadoop02、hadoop03、hadoop04以及hadoop05;

    [if !vml]

    [endif]

    在节点hadoop02上验证一下用户主目录下.ssh/authorized_keys文件中的内容,确实保存着五个节点hadoop用户的公钥,如下图所示:

    [if !vml]

    [endif]

    并将hadoop01节点hadoop用户主目录下的.ssh/known_hosts文件(因为在第4)步以hadoop01作为客户机,分别ssh登录haoop01~hadoop05这五个节点后,known_host文件就保存了可信赖的远程服务器的信息)分发给其余四个节点hadoop02、hadoop03、hadoop04以及hadoop05,文件中保存的内容如下图,

    [if !vml]

    [endif]

    具体作用是让客户端对服务器进行身份验证;known_hosts文件和authorized_keys文件的区别简单概括就是:known_hosts文件允许客户端对服务器进行身份验证, authorized_keys文件允许服务器对用户进行身份验证。

    如果不分发,在客户机节点用户主目录的./ssh/known_hosts文件中没有远程主机的信息,那么会出来一个确认:

    [if !vml]

    [endif]

    运行命令:scp .ssh/known_hosts user@host:/home/hadoop/.ssh/:

    [if !vml]

    [endif]

    至此,五个节点之间的hadoop用户免密互相远程登录完成,可以随机选择某个节点作为客户机,另外某个节点作为主机,然后进行验证;

    2.1.5 集群时间同步配置

    参考文档“海工所_CentOS6.8集群时间同步配置_大数据_郑智”,这里不做赘述。

    2.1.6 JDK安装配置

    以节点hadoop01为例,将jdk安装解压到/app目录下:

    [if !vml]

    [endif]

    然后,切换到root用户下,编辑/etc/prifile文件,命令为:vim /etc/profile,在文件末尾添加如下文本:

    JAVA_HOME=/app/jdk1.8.0_92

    CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

    PATH=$JAVA_HOME/bin:$PATH

    export JAVA_HOME CLASSPATH PATH

    输入完成后,按“Esc”键退出编辑模式,然后输入“:wq”,保存退出;

    使用命令:source /etc/prifile更新profiel文件,并输入命令:java –versionl来验证下java安装是否成功,如果输出版本信息,那么就代表安装配置成功,如下图所示:

    [if !vml]

    [endif]

    按照上面的步骤,在其他几个节点hadoop02~hadoop04做相同的操作,安装JDK;或者直接使用scp命令,将JDK的安装目录拷贝过去,然后修改profile文件即可;

    例如:从hadoop01节点上将jdk安装目录拷贝到hadoop02上的/app目录下,命令为:

    scp –r /app/jdk1.8.0_92/hadoop@hadoop02:/app/;

    [if !vml]

    [endif]

    然后在hadoop02节点上,切换到root用户下,修改profile文件,配置JDK环境变量;

    [if !vml]

    [endif]

    使得配置生效,并检查:

    [if !vml]

    [endif]

    2.2 集群搭建

    2.2.1 Zookeeper集群安装     

    2.2.1.1简单介绍

    Zookeeper集群为分布式系统提供协调服务,比如hadoop集群依靠Zookeeper来实现HDFS

    NameNode的自动故障转移,以及YARN ResourceManager的高可用;以及构建在hadoop之上的分布式数据库HBase,它也使用Zookeeper来实现区域服务器的主选举(master selection)、租赁管理以及区域服务器之间的其他通信;

    ZooKeeper 遵循一个简单的客户端-服务器模型,其中客户端是使用服务的节点(即机器),而服务器是提供服务的节点。ZooKeeper 服务器的集合形成了一个 ZooKeeper 集合体(ensemble)。在任何给定的时间内,一个 ZooKeeper 客户端可连接到一个 ZooKeeper 服务器。每个 ZooKeeper 服务器都可以同时处理大量客户端连接,如下图所示:

    [if !vml]

    [endif]

    在分布式系统中,各节点将是 ZooKeeper 集合体的客户端,每个 ZooKeeper 服务器都能够以可扩展的方式处理大量客户端。例如,HBase依赖于 ZooKeeper 实现区域,服务器的领导者选举和租赁管理。可以利用一个相对较少(比如说,五个)节点的 ZooKeeper 集合体运行有 50 个节点的大型 HBase 集群。

    当客户端请求读取特定 znode 的内容时,读取操作是在客户端所连接的服务器上进行的。因此,由于只涉及集合体中的一个服务器,所以读取是快速和可扩展的。然而,为了成功完成写入操作,要求 ZooKeeper 集合体的严格意义上的多数节点都是可用的。在启动 ZooKeeper 服务时,集合体中的某个节点被选举为领导者。当客户端发出一个写入请求时,所连接的服务器会将请求传递给领导者。此领导者对集合体的所有节点发出相同的写入请求。如果严格意义上的多数节点(也被称为法定数量(quorum))成功响应该写入请求,那么写入请求被视为已成功完成。然后,一个成功的返回代码会返回给发起写入请求的客户端。如果集合体中的可用节点数量未达到法定数量,那么 ZooKeeper 服务将不起作用。

    法定数量是通过严格意义上的多数节点来表示的。在集合体中,可以包含一个节点,但它不是一个高可用和可靠的系统。如果在集合体中有两个节点,那么这两个节点都必须已经启动并让服务正常运行,因为两个节点中的一个并不是严格意义上的多数。如果在集合体中有三个节点,即使其中一个停机了,您仍然可以获得正常运行的服务(三个中的两个是严格意义上的多数)。出于这个原因,ZooKeeper 的集合体中通常包含奇数数量的节点,因为就容错而言,与三个节点相比,四个节点并不占优势,因为只要有两个节点停机,ZooKeeper 服务就会停止。在有五个节点的集群上,需要三个节点停机才会导致 ZooKeeper 服务停止运作。

    在这里有五个节点,按照前面的集群规划,会搭建五节点的Zookeeper集群,下面以hadoop01节点为例,介绍安装配置zookeeper,然后其他节点通过scp命令直接将hadoop01上配置好的zookeeper安装目录拷贝过去就行;

    2.2.1.2 解压安装

    切换到zookeeper安装包所在的目录,然后运行命令:tar -zxvf zookeeper-3.4.10.tar.gz -C /app/;将zookeeper解压安装到目录/app下,如下图所示:

    [if !vml]

    [endif]

    切换到/app/下的zookeeper安装目录,查看下zookeeper目录结构:

    [if !vml]

    [endif]

    在zookeeper安装目录下,创建一个data目录,用于保存zookeeper快照日志,如下图所示:

    [if !vml]

    [endif]

    然后在data目录下,创建一个datalog文件夹,用于存储zookeeper事务日志,如下图:

    [if !vml]

    [endif]

    2.2.1.3 配置Zookeeper运行配置文件zoo.cfg

    Zookeeper的配置文件存放在zookeeper安装目录/app/zookeeper-3.4.10/下的conf文件夹下:

    [if !vml]

    [endif]

    其中,zoo_sample.cfg是管理配置zookeeper的配置文件;log4j.proeprties是zookeeper运行时日志配置文件;

    将zoo_sample.conf重命名为zoo.cfg,并编辑,将内容更改为如下:

    # The number of milliseconds of each tick

    tickTime=2000

    # The number of ticks that the initial synchronizationphase can take

    initLimit=10

    # The number of ticks that can pass betweensending a request and getting an acknowledgement

    syncLimit=5

    # 存储内存数据库快照日志.

    dataDir=/app/zookeeper-3.4.10/data

    # 存储事务日志

    dataLogDir=/app/zookeeper-3.4.10/data/datalog

    # 监听客户端连接的端口

    clientPort=2181

    # the maximum number of client connections.

    # increase this if you need to handle moreclients

    #maxClientCnxns=60

    # The number of snapshots to retain indataDir

    #autopurge.snapRetainCount=3

    # Purge task interval in hours

    # Set to "0" to disable autopurge feature

    #autopurge.purgeInterval=1

    # zookeeper集群服务器列表信息,格式为:server.id=hostName:心跳端口:选举端口

    server.1=hadoop01:2888:3888

    server.2=hadoop02:2888:3888

    server.3=hadoop03:2888:3888

    server.4=hadoop04:2888:3888

    server.5=hadoop05:2888:3888

    配置参数解析:

    tickTime:基本时间单元,以毫秒为单位。它用来控制心跳和超时,默认情况下最小的会话超时时间为两倍的 tickTime。

    initLimit :此配置表示,允许 follower (相对于 leader 而言的“客户端”)连接并同步到 leader 的初始化连接时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败。

    syncLimit :此配置表示, leader 与 follower 之间发送消息,请求和应答时间长度。如果 follower 在设置的时间内不能与 leader 进行通信,那么此 follower 将被丢弃。

    dataDir :存储内存中数据库快照的位置;注意:如果需要保留zookeeper事务日志信息,那么可以考虑配置 dataLogDir 的位置。通常情况下数据库快照日志和zookeeper事务日志是分开存储的,并且应该谨慎地选择日志存放的位置,使用专用的日志存储设备能够大大地提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会在很大程度上影响系统的性能。

    clientPort :监听客户端连接的端口,默认是 2181,最好不要修改

    最后再增加 ZooKeeper 的服务器列表信息,格式为: server.id=主机名:心跳端口:选举端口

    例子:server.1=hadoop01:2888:3888

    其中 id 虽然可以随便写,但是有两点要求,第一不能重复,第二范围是 1-255,并且对应服务器列表上还得存在对应的 id 文件,具体看下面操作

    2.2.1.4 配置Zookeeper运行时日志

    log4j用于记录zookeeper集群服务器运行日志,该日志的配置地址在conf/目录下的log4j.properties文件中,该文件中有一个配置项为“zookeeper.log.dir=.”,表示log4j日志文件在与执行程序(zkServer.sh)在同一目录下。当执行zkServer.sh 时,在该文件夹下会产生zookeeper.out日志文件。

    Zookeeper运行日志配置地址:

    [if !vml]

    [endif]

    Zookeeper运行日志保存位置:

    [if !vml]

    [endif]

    这里就保留默认运行时日志输出配置;

    2.2.1.5配置环境变量

    切换到root用户下,编辑/etc/profile文件,在文件末尾添加如下两行:

    export ZOOKEEPER_HOME=/app/zookeeper-3.4.10

    export PATH=$PATH:$ZOOKEEPER_HOME/bin

    2.2.1.6分发zookeeper安装目录到其他服务器节点上

    命令为:

    scp -r zookeeper-3.4.10/hadoop@hadoop02:/app/

    scp -r zookeeper-3.4.10/ hadoop@hadoop03:/app/

    scp -r zookeeper-3.4.10/hadoop@hadoop04:/app/

    scp -r zookeeper-3.4.10/hadoop@hadoop05:/app/

    2.2.1.7创建myid文件,保存节点id

    这一步骤,需要在各个节点上单独进行操作,应为每个节点的myid文件保存的内容不一样,在/app/zookeeper-3.4.10/data目录下创建一个名叫myid的文件,用于保存该节点的id,比如:server.1=hadoop01:2888:3888,则haddoop01的节点id就是1,对应的其他四个服务器节点都应该做类似的操作,现拿节点hadoop01为例:

    [if !vml]

    [endif]

    2.2.1.8启动集群

    Zookeeper的可执行脚本存放在zookeeper安装目录下的bin目录下,如下图:

    [if !vml]

    [endif]

    切换到bin目录,运行zkserver.sh脚本启动集群,命令为:./zkServer.sh start

    [if !vml]

    [endif]

    查看进程:

    [if !vml]

    [endif]

    2.2.1.9 查看集群状态

    使用命令:./zkServer.sh status查看服务器角色(leader or followe):

    [if !vml]

    [endif]

    出现错误“contacting service. It is probably not running”

    先停止zookeeper,命令为:./zkServer.sh stop

    [if !vml]

    [endif]

    重新使用命令:./zkServer.sh start-foreground来启动zookeeper,这个命令是在前台运行zookeeper,会输出启动日志:

    [if !vml]

    [endif]

    日志报错:”Cannot open channel to 3 at election address

    hadoop03/192.168.1.13:3888”,但是可以从hadoop01节点上ping通hadoop03:

    [if !vml]

    [endif]

    猜测是防火墙的问题,查看hadoop01节点的防火墙状态未开启:

    [if !vml]

    [endif]

    查看hadoop03节点的防火墙状态,发现是开启状态;

    [if !vml]

    [endif]

    关闭hadoop03节点的防火墙,并检查其余几个节点的防火墙状态是否关闭,然后重启Zookeeper集群(注意:虽然我们在配置文件中写明了服务器的列表信息,但是还是需要去每一台服务器去启动,不是一键启动集群模式)

    重启成功后,使用命令:./zkServer.sh status查看服务器角色(leader or followe):

    Hadoop01节点上:

    [if !vml]

    [endif]

    Hadoop02节点上:

    [if !vml]

    [endif]

    Hadoop03节点上:

    [if !vml]

    [endif]

    Hadoop04节点上:

    [if !vml]

    [endif]

    Hadoop05节点上:

    [if !vml]

    [endif]

    至此,zookeeper集群搭建完毕

    2.2.2 Hadoop集群安装

    下面以配置节点hadoop01为例,其余节点可以通过使用scp命令拷贝hadoop01的hadoop安装目录以及其他配置进行安装;

    2.2.2.1解压安装

    命令为:tar -zxvf hadoop-2.6.5.tar.gz -C /app/

    解压后的目录结构如下:

    [if !vml]

    [endif]

    2.2.2.2配置环境变量

    切换到root用户下,修改/etc/profile文件,添加如下内容:

    export HADOOP_HOME=/app/hadoop-2.6.5/

    exportLD_LIBRARY_PATH=$HADOOP_HOME/lib/native

    exportPATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

    2.2.2.3修改配置文件

    1、配置hadoop-env.sh,配置JDK安装路径:

    # The java implementation to use.

    export JAVA_HOME=/app/jdk1.8.0_92

    2、配置core-site.xml,修改内容如下:

           

                   fs.defaultFS

                    hdfs://HadoopHACluster

           

                   hadoop.tmp.dir

                   /app/hadoop-2.6.5/data/tmpdir

           

                   io.file.buffer.size

                    4096

           

                   ha.zookeeper.quorum            hadoop01:2181,hadoop02:2181,hadoop03:2181,hadoop04:2181,hadoop05:2181

           

             fs.trash.interval

             1440

             Number ofminutes between trash checkpoints. If zero, the trash feature isdisabled.

    3、配置hdfs-site.xml文件,配置内容如下:

           

                    dfs.namenode.name.dir

                    file:/app/hadoop-2.6.5/data/dfs/name

           

                    dfs.datanode.data.dir

                     file:/app/hadoop-2.6.5/data/dfs/data

           

                   dfs.namenode.checkpoint.dir

                   file:/app/hadoop-2.6.5/data/dfs/namesecondary

                    secondarynamenode data dir

                    true

           

                   dfs.replication

                    2

                    hdfs datacopy number

           

                    dfs.nameservices

                     HadoopHACluster

           

                    dfs.ha.namenodes.HadoopHACluster

                     hadoop01,hadoop02

           

                    dfs.namenode.rpc-address.HadoopHACluster.hadoop01

                    hadoop01:9000

           

                    dfs.namenode.rpc-address.HadoopHACluster.hadoop02

                    hadoop02:9000

           

                   dfs.namenode.http-address.HadoopHACluster.hadoop01

                   hadoop01:50070

           

                   dfs.namenode.http-address.HadoopHACluster.hadoop02

                   hadoop02:50070

           

                   dfs.namenode.shared.edits.dir

                   qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485;hadoop04:8485;hadoop05:8485/HadoopHACluster

           

                    dfs.journalnode.edits.dir

                    /app/hadoop-2.6.5/data/journal

           

                    dfs.journalnode.rpc-address

                    0.0.0.0:8485

                     journalnode的rpc地址

           

                   dfs.ha.automatic-failover.enabled

                    true

           

                   dfs.client.failover.proxy.provider.HadoopHACluster

                   org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

                    指定hdfs client来识别HadoopHACluster命名空间并在namenode切换期间识别namnode的proxy类

           

                   dfs.ha.fencing.methods

                   sshfence

           

                    dfs.ha.fencing.ssh.private-key-files

                   /home/hadoop/.ssh/id_rsa

           

                   ha.failover-controller.cli-check.rpc-timeout.ms

                   60000

                   getServiceState timout

           

                   ipc.client.connect.timeout

                   60000

           

                    dfs.client.read.shortcircuit.buffer.size

                    4096

           

                   dfs.image.transfer.bandwidthPerSec

                   4194304

                    用于图片传输的带宽

           

                   dfs.permissions

                   false

                    offpermission check

           

                   dfs.support.append

                    true

                    允许追加文件

           

                    dfs.datanode.max.xcievers

                    4096

                    datanode的文件句柄数限制

    4、配置mapred-site.xml文件,配置内容如下:

       

           mapreduce.framework.name

           yarn

       

           mapred.system.dir

           file:/app/hadoop-2.6.5/data/mapred/system

           true

       

           mapred.local.dir

           file:/app/hadoop-2.6.5/data/mapred/local

           true

       

           mapreduce.map.memory.mb

           1024

            每个MapReduce作业的map任务可以申请的内存资源数量

       

           mapreduce.map.cpu.vcores

           1

           每个MapReduce作业的map任务可以申请的虚拟CPU资源的数量

       

           mapreduce.reduce.memory.mb

           1024

           每个MapReduce作业的reduce任务可以申请的内存资源数量

       

           mapreduce.jobhistory.address

           hadoop01:10020

       

           mapreduce.jobhistory.webapp.address

           hadoop01:19888

    5、配置yarn-site.xml文件,内容如下:

       

           yarn.nodemanager.aux-services

           mapreduce_shuffle

           shuffle service that needs to be set for Map Reduceto run

       

           yarn.resourcemanager.ha.enabled

           true

      

           yarn.resourcemanager.ha.automatic-failover.enabled

           true

      

            yarn.resourcemanager.cluster-id

            yarncluster

      

            yarn.resourcemanager.ha.rm-ids

            rm1,rm2

      

           yarn.resourcemanager.hostname.rm1

           hadoop04

      

           yarn.resourcemanager.hostname.rm2

           hadoop05

      

            yarn.resourcemanager.webapp.address.rm1

            hadoop04:8088

      

            yarn.resourcemanager.webapp.address.rm2

            hadoop05:8088

      

           yarn.resourcemanager.zk-address

           hadoop01:2181,hadoop02:2181,hadoop03:2181,hadoop04:2181,hadoop05:2181

    6、配置slaves文件,内容如下:

    HAhadoop01

    HAhadoop02

    HAhadoop03

    HAhadoop04

    HAhadoop05

    如下图:

    [if !vml]

    [endif]

    7、创建配置文件中涉及的目录

    mkdir -p /home/hadoop/app/hadoop-2.6.5/data/tmpdir

    mkdir -p /home/hadoop/app/hadoop-2.6.5/data/dfs/name

    mkdir -p /home/hadoop/app/hadoop-2.6.5/data/dfs/data

    mkdir -p /home/hadoop/app/hadoop-2.6.5/data/dfs/namesecondary

    mkdir -p /home/hadoop/app/hadoop-2.6.5/data/journal

    mkdir -p /home/hadoop/app/hadoop-2.6.5/data/mapred/system

    mkdir -p /home/hadoop/app/hadoop-2.6.5/data/mapred/local

    mkdir -p /home/hadoop/app/hadoop-2.6.5/data/yarn/rmlogs

    mkdir -p /home/hadoop/app/hadoop-2.6.5/data/yarn/rmstore

    如下图:

    [if !vml]

    [endif]

    2.2.2.4 分发hadoop安装目录以及配置文件profile

    1)将hadoop安装目录同步到集群其它节点

    scp -r hadoop-2.6.5/ hadoop@hadoop02:/app

    scp -r hadoop-2.6.5/ hadoop@hadoop03:/app

    scp -r hadoop-2.6.5/ hadoop@hadoop04:/app

    scp -r hadoop-2.6.5/ hadoop@hadoop05:/app

    2)分发配置文件/etc/profile

    scp -r /etc/profile root@hadoop02:/etc

    scp -r /etc/profile root@hadoop03:/etc

    scp -r /etc/profile root@hadoop04:/etc

    scp -r /etc/profile root@hadoop05:/etc

    拷贝过去之后,记得使用source命令使profile中配置的生效,命令是:source /etc/profile。

    2.2.2.4 集群初始化操作

    1)启动zookeeper集群

    若没有启动zookeeper集群,则分别在节点hadoop01~hadoop05上运行命令:zkServer.sh start来启动集群;

    2)格式化ZKFC(在master节点上执行)

    命令为:hdfs zkfc –formatZK

    这里在hadoop01上:

    [if !vml]

    [endif]

    3)启动journalnode

    分别在hadoop01~hadoop05上执行,命令为:hadoop-daemon.sh start journalnode

    比如在hadoop01上:

    [if !vml]

    [endif]

    在其他几个节点上执行相同的操作,使用jps命令,若出现JournalNode,则表明JournalNode启动成功;

    4)格式化HDFS(在master节点上执行)

    这里在hadoop01节点上进行,命令为:hdfs namenode –format

    [if !vml]

    [endif]

    [if !vml]

    [endif]

    格式化后会在hadoop工作目录的元数据存储目录中生成一些数据

    [if !vml]

    [endif]

    5)将格式化后hadoop01节点hadoop工作目录中的元数据目录复制到hadoop02节点上相应的目录下:

    命令为:scp -r /app/hadoop-2.6.5/data/dfs/name/*hadoop@hadoop02:/app/hadoop-2.6.5/data/dfs/name/

    如下图:

    [if !vml]

    [endif]

    到此为止。hadoop集群的初始化就OK 了。以上的初始化在成功了之后,就坚决不能再做了。

    2.2.2.5 启动集群

    1)、启动Zookeeper集群;

    2)、启动HDFS ,命令为:start-dfs.sh;不管在哪个节点执行都可以[if !vml]

    [endif]

    分别在hadoop01~hadoop05节点上查看启动的进程;

    Hadoop01节点上:

    [if !vml]

    [endif]

    Hadoop02节点上:

    [if !vml]

    [endif]

    Hadoop03节点上:

    [if !vml]

    [endif]

    Hadoop04节点上:

    [if !vml]

    [endif]

    Hadoop05节点上:

    [if !vml]

    [endif]

    3)启动YARN集群:start-yarn.sh;最好在YARN的主节点上执行,(在配置文件中设置yarn主节点在hadoop04上)

    在节点hadoop04上:

    [if !vml]

    [endif]

    查看进程:

    [if !vml]

    [endif]

    另外一个resourcemanager必须手动启动,yarn-daemon.sh start resourcemanager(hadoop05是规划当中resourcemanager的备份节点)

    在hadoop05节点上:

    [if !vml]

    [endif]

    各节点所有进程全部启动之后各自的进程状态如下:

    Hadoop01:

    [if !vml]

    [endif]

    Hadoop02:

    [if !vml]

    [endif]

    Hdooop03:

    [if !vml]

    [endif]

    Haodop04:

    [if !vml]

    [endif]

    Hadoop05:

    [if !vml]

    [endif]

    4)通过web界面查看集群状态

    1、查看hdfs

    访问地址:http://192.168.1.11:50070

    [if !vml]

    [endif]

    访问地址:http://192.168.1.12:50070

    secondary namenode:

    [if !vml]

    [endif]

    2、查看yarn节点启动情况:

    访问地址:http://192.168.1.14:8088

    [if !vml]

    [endif]

    查看yarn集群节点:

    [if !vml]

    [endif]

    访问地址:http://192.168.1.15:8088

    因为hadoop05是stanby resourcemanager,会自动跳转到hadoop04节点上:

    [if !vml]

    [endif]

    5)查看集群HA状态

    Hdfs:

    hdfs haadmin -getServiceState hadoop01

    hdfs haadmin -getServiceState hadoop02

    [if !vml]

    [endif]

    YARN:

    yarn rmadmin -getServiceState rm1

    yarn rmadmin -getServiceState rm2

    [if !vml]

    [endif]

    2.2.2.6 集群测试

    [if !supportLists]1、  [endif]测试hdfs HA

    在上文中,根据命令hdfs haadmin -getServiceState hadoop01,可知hadoop01是active namenode节点,在节点hadoop01上kill掉namenode进程后:

    [if !vml]

    [endif]

    可以看到,hadoop02变成了active namenode节点;

    再把hadoop01节点的namenode进程启动起来,然后查看节点状态:

    [if !vml]

    [endif]

    可以看到hadoop01节点是standby,hadoop02节点是active;

    [if !supportLists]2、  [endif]测试YARN HA

    在节点hadoop04上:

    [if !vml]

    [endif]

    再把hadoop04节点上的resourceManager进程启动起来:             

    [if !vml]

    [endif]

    相关文章

      网友评论

          本文标题:HA集群搭建

          本文链接:https://www.haomeiwen.com/subject/ecvqfqtx.html