阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

配置高可用的Hadoop平台

429次阅读
没有评论

共计 19020 个字符,预计需要花费 48 分钟才能阅读完成。

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. sshkeygen 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/hadoop2.6.0
  3. export ZK_HOME=/home/hadoop/zookeeper3.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

2.11 核心文件配置

注:这里特别提醒,配置文件中的路径在启动集群之前,得存在(若不存在,请事先创建)。下面为给出本篇文章需要创建的路径脚本,命令如下:

  1. mkdir p /home/Hadoop/tmp
  2. mkdir p /home/hadoop/data/tmp/journal
  3. mkdir p /home/hadoop/data/dfs/name
  4. mkdir p /home/hadoop/data/dfs/data
  5. mkdir p /home/hadoop/data/yarn/local
  6. mkdir p /home/hadoop/log/yarn
  • core-site.xml
  1. <?xml version=“1.0” encoding=“UTF-8”?>
  2. <configuration>
  3. <property>
  4. <name>fs.defaultFS</name>
  5. <value>hdfs://cluster1</value>
  6. </property>
  7.  
  8. <property>
  9. <name>io.file.buffer.size</name>
  10. <value>131072</value>
  11. </property>
  12. <property>
  13. <name>hadoop.tmp.dir</name>
  14. <value>/home/hadoop/tmp</value>
  15. </property>
  16. <property>
  17. <name>hadoop.proxyuser.hduser.hosts</name>
  18. <value>*</value>
  19. </property>
  20. <property>
  21. <name>hadoop.proxyuser.hduser.groups</name>
  22. <value>*</value>
  23. </property>
  24. <property>
  25. <name>ha.zookeeper.quorum</name>
  26. <value>dn1:2181,dn2:2181,dn3:2181</value>
  27. </property>
  28. </configuration>
  • hdfs-site.xml
  1. <?xml version=“1.0” encoding=“UTF-8”?>
  2. <configuration>
  3. <property>
  4. <name>dfs.nameservices</name>
  5. <value>cluster1</value>
  6. </property>
  7. <property>
  8. <name>dfs.ha.namenodes.cluster1</name>
  9. <value>nna,nns</value>
  10. </property>
  11. <property>
  12. <name>dfs.namenode.rpc-address.cluster1.nna</name>
  13. <value>nna:9000</value>
  14. </property>
  15. <property>
  16. <name>dfs.namenode.rpc-address.cluster1.nns</name>
  17. <value>nns:9000</value>
  18. </property>
  19.  
  20. <property>
  21. <name>dfs.namenode.http-address.cluster1.nna</name>
  22. <value>nna:50070</value>
  23. </property>
  24.  
  25. <property>
  26. <name>dfs.namenode.http-address.cluster1.nns</name>
  27. <value>nns:50070</value>
  28. </property>
  29. <property>
  30. <name>dfs.namenode.shared.edits.dir</name>
  31. <value>qjournal://dn1:8485;dn2:8485;dn3:8485/cluster1</value>
  32. </property>
  33.  
  34. <property>
  35. <name>dfs.client.failover.proxy.provider.cluster1</name>
  36. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  37. </property>
  38. <property>
  39. <name>dfs.ha.fencing.methods</name>
  40. <value>sshfence</value>
  41. </property>
  42. <property>
  43. <name>dfs.ha.fencing.ssh.private-key-files</name>
  44. <value>/home/hadoop/.ssh/id_rsa</value>
  45. </property>
  46. <property>
  47. <name>dfs.journalnode.edits.dir</name>
  48. <value>/home/hadoop/data/tmp/journal</value>
  49. </property>
  50. <property>
  51. <name>dfs.ha.automatic-failover.enabled</name>
  52. <value>true</value>
  53. </property>
  54. <property>
  55. <name>dfs.namenode.name.dir</name>
  56. <value>/home/hadoop/data/dfs/name</value>
  57. </property>
  58. <property>
  59. <name>dfs.datanode.data.dir</name>
  60. <value>/home/hadoop/data/dfs/data</value>
  61. </property>
  62. <property>
  63. <name>dfs.replication</name>
  64. <value>3</value>
  65. </property>
  66. <property>
  67. <name>dfs.webhdfs.enabled</name>
  68. <value>true</value>
  69. </property>
  70.  
  71. <property>
  72. <name>dfs.journalnode.http-address</name>
  73. <value>0.0.0.0:8480</value>
  74. </property>
  75. <property>
  76. <name>dfs.journalnode.rpc-address</name>
  77. <value>0.0.0.0:8485</value>
  78. </property>
  79. <property>
  80. <name>ha.zookeeper.quorum</name>
  81. <value>dn1:2181,dn2:2181,dn3:2181</value>
  82. </property>
  83.  
  84. </configuration>
  • map-site.xml
  1. <?xml version=“1.0” encoding=“UTF-8”?>
  2. <configuration>
  3. <property>
  4. <name>mapreduce.framework.name</name>
  5. <value>yarn</value>
  6. </property>
  7. <property>
  8. <name>mapreduce.jobhistory.address</name>
  9. <value>nna:10020</value>
  10. </property>
  11. <property>
  12. <name>mapreduce.jobhistory.webapp.address</name>
  13. <value>nna:19888</value>
  14. </property>
  15. </configuration>
  • yarn-site.xml
  1. <?xml version=“1.0” encoding=“UTF-8”?>
  2. <configuration>
  3. <property>
  4. <name>yarn.resourcemanager.connect.retry-interval.ms</name>
  5. <value>2000</value>
  6. </property>
  7. <property>
  8. <name>yarn.resourcemanager.ha.enabled</name>
  9. <value>true</value>
  10. </property>
  11. <property>
  12. <name>yarn.resourcemanager.ha.rm-ids</name>
  13. <value>rm1,rm2</value>
  14. </property>
  15. <property>
  16. <name>ha.zookeeper.quorum</name>
  17. <value>dn1:2181,dn2:2181,dn3:2181</value>
  18. </property>
  19.  
  20. <property>
  21. <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
  22. <value>true</value>
  23. </property>
  24. <property>
  25. <name>yarn.resourcemanager.hostname.rm1</name>
  26. <value>nna</value>
  27. </property>
  28.  
  29. <property>
  30. <name>yarn.resourcemanager.hostname.rm2</name>
  31. <value>nns</value>
  32. </property>
  33. <!– 在 namenode1 上配置 rm1, 在 namenode2 上配置 rm2, 注意:一般都喜欢把配置好的文件远程复制到其它机器上,但这个在 YARN 的另一个机器上一定要修改 –>
  34. <property>
  35. <name>yarn.resourcemanager.ha.id</name>
  36. <value>rm1</value>
  37. </property>
  38. <!– 开启自动恢复功能 –>
  39. <property>
  40. <name>yarn.resourcemanager.recovery.enabled</name>
  41. <value>true</value>
  42. </property>
  43. <!– 配置与 zookeeper 的连接地址 –>
  44. <property>
  45. <name>yarn.resourcemanager.zk-state-store.address</name>
  46. <value>dn1:2181,dn2:2181,dn3:2181</value>
  47. </property>
  48. <property>
  49. <name>yarn.resourcemanager.store.class</name>
  50. <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  51. </property>
  52. <property>
  53. <name>yarn.resourcemanager.zk-address</name>
  54. <value>dn1:2181,dn2:2181,dn3:2181</value>
  55. </property>
  56. <property>
  57. <name>yarn.resourcemanager.cluster-id</name>
  58. <value>cluster1-yarn</value>
  59. </property>
  60. <!–schelduler 失联等待连接时间 –>
  61. <property>
  62. <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
  63. <value>5000</value>
  64. </property>
  65. <!– 配置 rm1 –>
  66. <property>
  67. <name>yarn.resourcemanager.address.rm1</name>
  68. <value>nna:8132</value>
  69. </property>
  70. <property>
  71. <name>yarn.resourcemanager.scheduler.address.rm1</name>
  72. <value>nna:8130</value>
  73. </property>
  74. <property>
  75. <name>yarn.resourcemanager.webapp.address.rm1</name>
  76. <value>nna:8188</value>
  77. </property>
  78. <property>
  79. <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
  80. <value>nna:8131</value>
  81. </property>
  82. <property>
  83. <name>yarn.resourcemanager.admin.address.rm1</name>
  84. <value>nna:8033</value>
  85. </property>
  86. <property>
  87. <name>yarn.resourcemanager.ha.admin.address.rm1</name>
  88. <value>nna:23142</value>
  89. </property>
  90. <!– 配置 rm2 –>
  91. <property>
  92. <name>yarn.resourcemanager.address.rm2</name>
  93. <value>nns:8132</value>
  94. </property>
  95. <property>
  96. <name>yarn.resourcemanager.scheduler.address.rm2</name>
  97. <value>nns:8130</value>
  98. </property>
  99. <property>
  100. <name>yarn.resourcemanager.webapp.address.rm2</name>
  101. <value>nns:8188</value>
  102. </property>
  103. <property>
  104. <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
  105. <value>nns:8131</value>
  106. </property>
  107. <property>
  108. <name>yarn.resourcemanager.admin.address.rm2</name>
  109. <value>nns:8033</value>
  110. </property>
  111. <property>
  112. <name>yarn.resourcemanager.ha.admin.address.rm2</name>
  113. <value>nns:23142</value>
  114. </property>
  115. <property>
  116. <name>yarn.nodemanager.aux-services</name>
  117. <value>mapreduce_shuffle</value>
  118. </property>
  119. <property>
  120. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  121. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  122. </property>
  123. <property>
  124. <name>yarn.nodemanager.local-dirs</name>
  125. <value>/home/hadoop/data/yarn/local</value>
  126. </property>
  127. <property>
  128. <name>yarn.nodemanager.log-dirs</name>
  129. <value>/home/hadoop/log/yarn</value>
  130. </property>
  131. <property>
  132. <name>mapreduce.shuffle.port</name>
  133. <value>23080</value>
  134. </property>
  135. <!– 故障处理类 –>
  136. <property>
  137. <name>yarn.client.failover-proxy-provider</name>
  138. <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
  139. </property>
  140. <property>
  141. <name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name>
  142. <value>/yarn-leader-election</value>
  143. </property>
  144. </configuration>
  • hadoop-env.sh
  1. # The Java implementation to use.
  2. export JAVA_HOME=/usr/java/jdk1.7
  • yarn-env.sh
  1. # some Java parameters
  2. export JAVA_HOME=/usr/java/jdk1.7
  • 2.12slave

修改 hadoop 安装目录下的 slave 文件:

  1. dn1
  2. dn2
  3. dn3

2.13 启动命令(hdfs 和 yarn 的相关命令)

由于我们配置了 QJM,所以我们需要先启动 QJM 的服务,启动顺序如下所示:

  1. 进入到 DN 节点,启动 zk 的服务:zkServer.sh start,之后可以输入 zkServer.sh status 查看启动状态,本次我们配置了三个 DN 节点,会出现一个 leader 和两个 follower。输入jps,会显示启动进程:QuorumPeerMain
  2. 在 NN 节点上(选一台即可,这里我选择的是一台预 NNA 节点),然后启动 journalnode 服务,命令如下:hadoop-daemons.sh start journalnode。或者单独进入到每个 DN 输入启动命令:hadoop-daemon.sh start journalnode。输入 jps 显示启动进程:JournalNode
  3. 接着若是配置后,我们首次启动,需要格式化 HDFS,命令如下:hadoop namenode –format
  4. 之后我们需要格式化 ZK,命令如下:hdfs zkfc –formatZK
  5. 接着我们启动 hdfs 和 yarn,命令如下:start-dfs.shstart-yarn.sh,我们在 nna 输入 jps 查看进程,显示如下:DFSZKFailoverControllerNameNodeResourceManager
  6. 接着我们在 NNS 输入 jps 查看,发现只有 DFSZKFailoverController 进程,这里我们需要手动启动 NNS 上的 namenodeResourceManager进程,命令如下:hadoop-daemon.sh start namenodeyarn-daemon.sh start resourcemanager。需要注意的是,在 NNS 上的 yarn-site.xml 中,需要配置指向 NNS,属性配置为 rm2,在 NNA 中配置的是 rm1。
  7. 最后我们需要同步 NNA 节点的元数据,命令如下:hdfs namenode –bootstrapStandby,若执行正常,日志最后显示如下信息:
  1. 15/02/2110:30:59 INFO common.Storage:Storage directory /home/hadoop/data/dfs/name has been successfully formatted.
  2. 15/02/2110:30:59 WARN common.Util:Path/home/hadoop/data/dfs/name should be specified as a URI in configuration files.Please update hdfs configuration.
  3. 15/02/2110:30:59 WARN common.Util:Path/home/hadoop/data/dfs/name should be specified as a URI in configuration files.Please update hdfs configuration.
  4. 15/02/2110:31:00 INFO namenode.TransferFsImage:Opening connection to http://nna:50070/imagetransfer?getimage=1&txid=0&storageInfo=-60:1079068934:0:CID-1dd0c11e-b27e-4651-aad6-73bc7dd820bd
  5. 15/02/2110:31:01 INFO namenode.TransferFsImage:ImageTransfer timeout configured to 60000 milliseconds
  6. 15/02/2110:31:01 INFO namenode.TransferFsImage:Transfer took 0.01s at 0.00 KB/s
  7. 15/02/2110:31:01 INFO namenode.TransferFsImage:Downloaded file fsimage.ckpt_0000000000000000000 size 353 bytes.
  8. 15/02/2110:31:01 INFO util.ExitUtil:Exitingwith status 0
  9. 15/02/2110:31:01 INFO namenode.NameNode: SHUTDOWN_MSG:/************************************************************ SHUTDOWN_MSG: Shutting down NameNode at nns/10.211.55.13 ************************************************************/

2.14HA 的切换

由于我配置的是自动切换,若 NNA 节点宕掉,NNS 节点会立即由 standby 状态切换为 active 状态。若是配置的手动状态,可以输入如下命令进行人工切换:

  1. hdfs haadmin failover forcefence forceactive nna nns

这条命令的意思是,将 nna 变成 standby,nns 变成 active。而且手动状态下需要重启服务。

2.15 效果截图

配置高可用的 Hadoop 平台

配置高可用的 Hadoop 平台

配置高可用的 Hadoop 平台

配置高可用的 Hadoop 平台

3. 总结

这篇文章就赘述到这里,若在配置过程中有什么疑问或问题,可以加入 QQ 群讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

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. sshkeygen 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/hadoop2.6.0
  3. export ZK_HOME=/home/hadoop/zookeeper3.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

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计19020字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7961397
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛 NAS 玩转 Frpc 并且配置,随时随地直连你的私有云 大家好,我是星哥,最近在玩飞牛 NAS。 在数...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛 NAS-4:飞牛 NAS 安装 istore 旁路由,家庭网络升级的最佳实践 开始 大家好我是...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...