HA集群搭建

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]

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351