转载

配置高可用的Hadoop平台

1.概述

在Hadoop2.x之后的版本,提出了解决单点问题的方案--HA(High Available 高可用)。这篇博客阐述如何搭建高可用的HDFS和YARN,执行步骤如下:

  1. 创建hadoop用户
  2. 安装JDK
  3. 配置hosts
  4. 安装SSH
  5. 关闭防火墙
  6. 修改时区
  7. ZK(安装,启动,验证)
  8. HDFS+HA的结构图
  9. 角色分配
  10. 环境变量配置
  11. 核心文件配置
  12. slave
  13. 启动命令(hdfs和yarn的相关命令)
  14. HA的切换
  15. 效果截图

下面我们给出下载包的链接地址:

hadoop2.x下载地址

zookeeper下载地址

JDK下载地址

注:若JDK无法下载,请到Oracle的官网下载JDK。

到这里安装包都准备好了,接下来我们开始搭建与配置。

2.搭建

2.1创建Hadoop用户

  1. useradd hadoop
  2. passwd hadoop

然后根据提示,设置密码。接着我给hadoop用户设置面免密码权限,也可自行添加其他权限。

  1. chmod + w / etc / sudoers
  2. hadoop ALL =( root ) NOPASSWD : ALL
  3. chmod - w / etc / sudoers

2.2安装JDK

将下载好的安装包解压到 /usr/java/jdk1.7,然后设置环境变量,命令如下:

  1. sudo vi / etc / profile

然后编辑配置,内容如下:

  1. export JAVA_HOME = /usr/ java / jdk1 . 7
  2. export PATH = $PATH : $JAVA_HOME / bin

然后使环境变量立即生效,命令如下:

  1. source / etc / profile

然后验证JDK是否配置成功,命令如下:

  1. java - version

若显示对应版本号,即表示JDK配置成功。否则,配置无效!

2.3配置hosts

集群中所有机器的hosts配置要要相同(推荐)。可以避免不必要的麻烦,用域名取代IP,方便配置。配置信息如下:

  1. 10.211 . 55.12 nna # NameNode Active
  2. 10.211 . 55.13 nns # NameNode Standby
  3. 10.211 . 55.14 dn1 # DataNode1
  4. 10.211 . 55.15 dn2 # DataNode2
  5. 10.211 . 55.16 dn3 # DataNode3

然后用scp命令,将hosts配置分发到各个节点。命令如下:

  1. 这里以 NNS 节点为例子
  2. scp / etc / hosts hadoop@nns : /etc/

2.4安装SSH

输入如下命令:

  1. ssh - keygen t rsa

然后一路按回车键,最后在将id_rsa.pub写到authorized_keys,命令如下:

  1. cat ~ /.ssh/ id_rsa . pub >> ~ /.ssh/ authorized_keys

在hadoop用户下,需要给authorized_keys赋予600的权限,不然免密码登陆无效。在其他节点只需要使用 ssh-keygen –t rsa  命令,生产对应的公钥,然后将各个节点的id_rsa.pub追加到nna节点的authorized_keys中。最后,将nna节点下的authorized_keys文件通过scp命令,分发到各个节点的 ~/.ssh/ 目录下。目录如下:

  1. # 这里以NNS节点为例子
  2. scp ~ /.ssh/ authorized_keys hadoop@nns :~ /.ssh/

然后使用ssh命令相互登录,看是否实现了免密码登录,登录命令如下:

  1. # 这里以nns节点为例子
  2. ssh nns

若登录过程中木有提示需要输入密码,即表示密码配置成功。

2.5关闭防火墙

由于hadoop的节点之间需要通信(RPC机制),这样一来就需要监听对应的端口,这里我就直接将防火墙关闭了,命令如下:

  1. chkconfig iptables off

注:如果用于生产环境,直接关闭防火墙是存在安全隐患的,我们可以通过配置防火墙的过滤规则,即将hadoop需要监听的那些端口配置到防火墙接受规则中。关于防火墙的规则配置参见“linux防火墙配置”,或者通知公司的运维去帮忙配置管理。

同时,也需要关闭SELinux,可修改 /etc/selinux/config 文件,将其中的 SELINUX=enforcing 改为 SELINUX=disabled即可。

2.6修改时区

各个节点的时间如果不同步,会出现启动异常,或其他原因。这里将时间统一设置为Shanghai时区。命令如下:

  1. # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  2. cp : overwrite `/etc/localtime'? yes
  3. 修改为中国的东八区
  4. # vi /etc/sysconfig/clock
  5. ZONE="Asia/Shanghai"
  6. UTC=false
  7. ARC=false

2.7ZK(安装,启动,验证)

2.7.1安装

将下载好的安装包,解压到指定位置,这里为直接解压到当前位置,命令如下:

  1. tar - zxvf zk -{ version }. tar . gz

修改zk配置,将zk安装目录下conf/zoo_sample.cfg重命名zoo.cfg,修改其中的内容:

  1. # The number of milliseconds of each tick
  2. # 服务器与客户端之间交互的基本时间单元(ms)
  3. tickTime = 2000
  4.  
  5. # The number of ticks that the initial
  6. # synchronization phase can take
  7. # zookeeper所能接受的客户端数量
  8. initLimit = 10
  9.  
  10. # The number of ticks that can pass between
  11. # sending a request and getting an acknowledgement
  12. # 服务器和客户端之间请求和应答之间的时间间隔
  13. syncLimit = 5
  14.  
  15. # the directory where the snapshot is stored.
  16. # do not use /tmp for storage, /tmp here is just
  17. # example sakes.
  18. # 保存zookeeper数据,日志的路径
  19. dataDir = /home/ hadoop / data / zookeeper
  20.  
  21. # the port at which the clients will connect
  22. # 客户端与zookeeper相互交互的端口
  23. clientPort = 2181
  24. server . 1 = dn1 : 2888 : 3888
  25. server . 2 = dn2 : 2888 : 3888
  26. server . 3 = dn3 : 2888 : 3888
  27.  
  28. #server.A=B:C:D
    #其中A是一个数字,代表这是第几号服务器;B是服务器的IP地址;
    #C表示服务器与群集中的“领导者”交换信息的端口;当领导者失效后,D表示用来执行选举时服务器相互通信的端口。

接下来, 在配置的dataDir目录下创建一个myid文件,里面写入一个0-255之间的一个随意数字,每个zk上这个文件的数字要是不一样的,这些数字应该是从1开始,依次写每个服务器。文件中序号要与dn节点下的zk配置序号一直,如:server.1= dn1 :2888:3888,那么 dn1节点下的myid 配置文件应该写上1。

2 .7.2启动

分别在各个dn节点启动zk进程,命令如下:

  1. bin / zkServer . sh start

然后,在各个节点输入jps命令,会出现如下进程:

  1. QuorumPeerMain

2.7.3验证

上面说的输入jps命令,若显示对应的进程,即表示启动成功,同样我们也可以输入zk的状态命令查看,命令如下:

  1. bin / zkServer . sh status

会出现一个leader和两个follower。

2.8HDFS+HA的结构图

HDFS配置HA的结构图如下所示:

配置高可用的Hadoop平台

上图大致架构包括:

1. 利用共享存储来在两个NN间同步edits信息。以前的HDFS是share nothing but NN,现在NN又share storage,这样其实是转移了单点故障的位置,但中高端的存储设备内部都有各种RAID以及冗余硬件,包括电源以及网卡等,比服务器的可靠性还是略有 提高。通过NN内部每次元数据变动后的flush操作,加上NFS的close-to-open,数据的一致性得到了保证。

2. DN同时向两个NN汇报块信息。这是让Standby NN保持集群的最新状态的必须步骤。

3. 用于监视和控制NN进程的FailoverController进程。显然,我们不能在NN进程内部进行心跳等信息同步,最简单的原因,一次FullGC 就可以让NN挂起十几分钟,所以,必须要有一个独立的短小精悍的watchdog来专门负责监控。这也是一个松耦合的设计,便于扩展或更改,目前版本里是 用ZooKeeper(简称ZK)来做同步锁,但用户可以方便的把这个Zookeeper FailoverController(简称ZKFC)替换为其他的HA方案或leader选举方案。

4. 隔离(Fencing),防止脑裂,就是保证在任何时候只有一个主NN,包括三个方面:

 共享存储fencing,确保只有一个NN可以写入edits。

 客户端fencing,确保只有一个NN可以响应客户端的请求。

 DN fencing,确保只有一个NN向DN下发命令,譬如删除块,复制块等等。

2.9角色分配

名称

Host

职责

NNA

10.211.55.12

zkfc

NNS

10.211.55.13

zkfc

DN1

10.211.55.14

zookeeper

DN2

10.211.55.15

zookeeper

DN3

10.211.55.16

zookeeper

2.10环境变量配置

这里列出了所有的配置,后面配置其他组件,可以参考这里的配置。 配置完成后,输入:. /etc/profile(或source /etc/profile)使之立即生效。严重是否环境变量配置成功与否,输入:echo $HADOOP_HOME,若输出对应的配置路径,即可认定配置成功。

注:hadoop2.x以后的版本conf文件夹改为etc文件夹了

配置内容如下所示:

  1. export JAVA_HOME = /usr/ java / jdk1 . 7
  2. export HADOOP_HOME = /home/ hadoop / hadoop - 2.6 . 0
  3. export ZK_HOME = /home/ hadoop / zookeeper - 3.4 . 6
  4. export PATH = $PATH : $JAVA_HOME / bin : $HADOOP_HOME / bin : $HADOOP_HOM

Ubuntu14.04下Hadoop2.4.1单机/伪分布式安装配置教程  http://www.linuxidc.com/Linux/2015-02/113487.htm

CentOS安装和配置Hadoop2.2.0 http://www.linuxidc.com/Linux/2014-01/94685.htm

Ubuntu 13.04上搭建Hadoop环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu上搭建Hadoop环境(单机模式+伪分布模式) http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu下Hadoop环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建Hadoop环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

搭建Hadoop环境(在Winodws环境下用虚拟机虚拟两个Ubuntu系统进行搭建) http://www.linuxidc.com/Linux/2011-12/48894.htm

更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2015-02/114044p2.htm

正文到此结束
Loading...