HDFS中HA机制及Hadoop集群搭建的示例分析

39次阅读
没有评论

丸趣 TV 小编给大家分享一下 HDFS 中 HA 机制及 Hadoop 集群搭建的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1.HA 的简介

Background

Prior to Hadoop 2.0.0, the NameNode was a single point of failure (SPOF) in an HDFS cluster. Each cluster had a single NameNode, and if that machine or process became unavailable, the cluster as a whole would be unavailable until the NameNode was either restarted or brought up on a separate machine.

This impacted the total availability of the HDFS cluster in two major ways:

In the case of an unplanned event such as a machine crash, the cluster would be unavailable until an operator restarted the NameNode.

Planned maintenance events such as software or hardware upgrades on the NameNode machine would result in windows of cluster downtime.

The HDFS High Availability feature addresses the above problems by providing the option of running two redundant NameNodes in the same cluster in an Active/Passive configuration with a hot standby. This allows a fast failover to a new NameNode in the case that a machine crashes, or a graceful administrator-initiated failover for the purpose of planned maintenance.

这一段英文用有道翻译了一下. 就是说以前的机制怎么怎么不行,要改进什么什么!就是主要解决 NameNode 节点的单点故障, 然后说更新后的 NameNode 可以如何保持高可用性,就是 crash 挂掉了,也可以快速的恢复。其实我们能想到就是搞主从备份的策略,但是往往说起来容易,实现就可复杂。接下来,让我们就来看看 ….

还是用图来说明吧:

Hadoop1.x:

HDFS 中 HA 机制及 Hadoop 集群搭建的示例分析

Hadoop2.x:

HDFS 中 HA 机制及 Hadoop 集群搭建的示例分析

hadoop2 中 HDFS 的高可靠指的是可以同时启动 2 个 NameNode。其中一个处于工作状态,另一个处于随时待命状态。

这样,当一个 NameNode 所在的服务器宕机时,可以在数据不丢失的情况下,手工或者自动切换到另一个 NameNode 提供服务。  这些 NameNode 之间通过共享数据,保证数据的状态一致。多个 NameNode 之间共享数据,可以通过 Nnetwork File System 或者 Quorum Journal Node。前者是通过 linux 共享的文件系统,属于操作系统的配置;后者是 hadoop 自身的东西,属于软件的配置。我们这里讲述使用 Quorum Journal Node 的配置方式。可以使人工,也可以自动配置(使用 zookeeper 就行啦).

至于 NFS 的配置方法,访问:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithNFS.html

看 apache 上的文档要比我这好多太多,上面的资料给的比较全面。搞的我都不想写博客了!!!

集群启动时,可以同时启动 2 个 NameNode。这些 NameNode 只有一个是 active 的,另一个属于 standby 状态。

active 状态意味着提供服务,standby 状态意味着处于休眠状态,只进行数据同步,时刻准备着提供服务。

2.Hadoop2 中 HA 的架构

      在一个典型的 HA 集群中,每个 NameNode 是一台独立的服务器。在任一时刻,只有一个 NameNode 处于 active 状态,另一个处于 standby 状态。其中,active 状态的 NameNode 负责所有的客户端操作,standby 状态的 NameNode 处于从属地位,维护着数据状态,随时准备切换。 

      两个 NameNode 为了数据同步,会通过一组称作 JournalNodes 的独立进程进行相互通信。当 active 状态的 NameNode 的命名空间有任何修改时,会告知大部分的 JournalNodes 进程。standby 状态的 NameNode 有能力读取 JNs 中的变更信息,并且一直监控 edit log 的变化,把变化应用于自己的命名空间。standby 可以确保在集群出错时,命名空间状态已经完全同步了,如图所示:

HDFS 中 HA 机制及 Hadoop 集群搭建的示例分析

为了确保快速切换,standby 状态的 NameNode 有必要知道集群中所有数据块的位置。为了做到这点,所有的 datanodes 必须配置两个 NameNode 的地址,发送数据块位置信息和心跳给他们两个。 

对于 HA 集群而言,确保同一时刻只有一个 NameNode 处于 active 状态是至关重要的。否则,两个 NameNode 的数据状态就会产生分歧,可能丢失数据,或者产生错误的结果。为了保证这点,JNS 必须确保同一时刻只有一个 NameNode 可以向自己写数据。 

      注意: 在 HA 集群中,standby 状态的 NameNode 可以完成 checkpoint 操作,因此没必要配置 Secondary NameNode、CheckpointNode、BackupNode。如果真的配置了,还会报错。

3. 自动故障转移

    有一个洋气的名字叫做 automaticaly failover.

    而手动故障转移配置叫做 configure a manual failover. 也就是说,在手动的模式下,系统不会自动启动故障转移,就是 Active—-》Stanby 的过程。就必须执行一条命令: hdfs haadmin -failover –forcefence serviceId serviced2. 就会把状态进行安全的切换。其中 serviceId2 就会变成 active 状态.

    但是自动就没有这样简单啦,自动故障处理需要两个组件:a ZooKeeper quorum 和 ZKFailoverController 进程(简称 ZKFC). 在其中 ZooKeeper 主要做两件事:

      Failure detection 故障检测, 集群中的每个 NameNode 机器的持久会话都会在 ZooKeeper 管理保存, 如果机器崩溃的话,zookeeper 就会将会话到期,然后通知另一个故障转移会被触发.

      Active NameNode election:Active NameNode 的选举,zookeeper 提供了一个简单的机制来专门选择一个节点作为活跃。如果当前活动 NameNode 崩溃, 另一个节点可能拿到一个特殊的互斥型锁用来表明它应该成为下一个 active NameNode。

      ZKFailoverController 实际上是 zookeeper 的一个客户端,同时监控和管理着 NameNode 的状态, 每一个跑着 ZKFC 的 NameNode,都有下面的作用:

        健康的监控,ZooKeeper 会话管理,Zookeeper 基础选举.

4.Hadoop 集群的机器分配

    硬件:7 台 CentOS 虚拟机, 内存 512,硬盘 20G.

    网络:

主机 IP 安装的软件 yun10-1192.168.2.11 jdk、hadoopyun10-2192.168.2.12jdk、hadoopyun10-3192.168.2.13jdk、hadoopyun10-4192.168.2.14jdk、hadoopyun10-5192.168.2.15jdk、hadoop、zookeeperyun10-6192.168.2.16jdk、hadoop、zookeeperyun10-7192.168.2.17jdk、hadoop、zookeeper

    服务:

yun10-1namenodezkfc

yun10-2namenodezkfc

yun10-3

resourcemanageryun10-4

resourcemanageryun10-5datanodejournalNodeQuorumPeerMainnodemanageryun10-6datanodejournalNodeQuorumPeerMainnodemanageryun10-7datanodejournalNodeQuorumPeerMainnodemanager

      说明:

1. 在 hadoop2.0 中通常由两个 NameNode 组成,一个处于 active 状态,另一个处于 standby 状态。Active NameNode 对     外提供服务,而 Standby NameNode 则不对外提供服务,仅同步 active namenode 的状态,以便能够在它失败时快速     进行切换。hadoop2.0 官方提供了两种 HDFS HA 的解决方案,一种是 NFS,另一种是 QJM。这里我们使用简单的 QJM     在该方案中,主备 NameNode 之间通过一组 JournalNode 同步元数据信息,一条数据只要成功写入多数 JournalNode     即认为写入成功。通常配置奇数个 JournalNode. 这里还配置了一个 zookeeper 集群,用于 ZKFC(DFSZKFailoverCont      roller)故障转移,当 Active NameNode 挂掉了,会自动切换 Standby NameNode 为 standby 状态。

2.hadoop-2.2.0 中依然存在一个问题,就是 ResourceManager 只有一个,存在单点故障,hadoop-2.4.1 解决了这个问       题,有两个 ResourceManager,一个是 Active,一个是 Standby,状态由 zookeeper 进行协调。

5. 安装配置 zookeeper 集群

    省略. 见链接:http://my.oschina.net/codeWatching/blog/367309

6. 安装配置 Hadoop 集群

  Hadoop 的配置文件集中在 /etc/hadoop/ 下

 a. 修改 hadoop-env.sh

   export JAVA_HOME=/home/lisai/app/jdk1.7.0_55

  b. 修改 core-site.xml

HDFS 中 HA 机制及 Hadoop 集群搭建的示例分析

  c. 修改 hdfs-site.xml

 HDFS 中 HA 机制及 Hadoop 集群搭建的示例分析

HDFS 中 HA 机制及 Hadoop 集群搭建的示例分析

HDFS 中 HA 机制及 Hadoop 集群搭建的示例分析

  d. 修改 mapred-site.xml

HDFS 中 HA 机制及 Hadoop 集群搭建的示例分析

  e. 修改 yarn-site.xml

HDFS 中 HA 机制及 Hadoop 集群搭建的示例分析

HDFS 中 HA 机制及 Hadoop 集群搭建的示例分析

f. 修改 slaves(slaves 是指定子节点的位置,因为要在 yun10- 1 上启动 HDFS、在 yun10- 3 启动 yarn,所以 yun10- 1 上的 slaves 文件指定的是 datanode 的位置,在 yun10- 3 上的 slaves 文件指定的是 nodemanager 的位置)

    yun10-5

    yun10-6

    yun10-7

g. 配置免密码登陆

# 首先要配置 yun10- 1 到 yun10-2、yun10-3、yun10-4、yun10-5、yun10-6、yun10- 7 的免密码登陆

# 在 yun10- 1 上生产一对钥匙

ssh-keygen -t rsa

# 将公钥拷贝到其他节点,包括自己

ssh-coyp-id yun10-1

ssh-coyp-id yun10-2

ssh-coyp-id yun10-3

ssh-coyp-id yun10-4

ssh-coyp-id yun10-5

ssh-coyp-id yun10-6

ssh-coyp-id yun10-7

# 配置 yun10- 3 到 yun10-4、yun10-5、yun10-6、yun10- 7 的免密码登陆

# 在 yun10- 3 上生产一对钥匙

ssh-keygen -t rsa

# 将公钥拷贝到其他节点

ssh-coyp-id yun10-4

ssh-coyp-id yun10-5

ssh-coyp-id yun10-6

ssh-coyp-id yun10-7

# 注意:两个 namenode 之间要配置 ssh 免密码登陆,别忘了配置 yun10- 2 到 yun10- 1 的免登陆

在 yun10- 2 上生产一对钥匙

ssh-keygen -t rsa

ssh-copy-id -i yun10-1

7. 配置信息的拷贝

scp -r ./hadoop/ yun10-2:/home/lisai/app/hadoop-2.4.1/etc/hadoop/
scp -r ./hadoop/ yun10-3:/home/lisai/app/hadoop-2.4.1/etc/hadoop/
scp -r ./hadoop/ yun10-4:/home/lisai/app/hadoop-2.4.1/etc/hadoop/
scp -r ./hadoop/ yun10-5:/home/lisai/app/hadoop-2.4.1/etc/hadoop/
scp -r ./hadoop/ yun10-6:/home/lisai/app/hadoop-2.4.1/etc/hadoop/
scp -r ./hadoop/ yun10-7:/home/lisai/app/hadoop-2.4.1/etc/hadoop/

8. 启动 Hadoop 集群

  a. 启动 ZooKeeper.

./bin/zkServer.sh start
./bin/zkserver.sh status

  b. 启动 journalnode(分别在在 yun10-5、yun10-6、yun10- 7 上执行)

./sbin/hadoop-daemon.sh start journalnode
jps

   c. 格式化 HDFS

# 在 yun10- 1 上执行命令:
hdfs namenode -format
#格式化后会在根据 core-site.xml 中的 hadoop.tmp.dir 配置生成个文件.
  这里我配置的是 /home/lisai/app/hadoop-2.4.1/tmp,然后将 /home/lisai/app/hadoop-2.4.1/tmp 拷贝到 yun10- 2 的 /home/lisai/app/hadoop-2.4.1 下。scp -r tmp/ yun10-2:/home/lisai/app/hadoop-2.4.1/tmp

   d. 格式化 ZK

# 在 yun10- 1 执行
hdfs zkfc -formatZK

  d. 启动 HDFS

# 在 yun10- 1 执行 NameNode 进程
./sbin/start-hdfs.sh
#在 yun10- 2 执行 NameNode 进程
./sbin/hadoop-daemon.sh start NameNode/ 可能是小写.
#在 yun10-5,yun10-6,yun10- 7 三台别人启动  
./sbin/hadoop-daemon.sh start datanode

   e. 启动 YARN(##### 注意 #####:是在 yun10- 3 上执行 start-yarn.sh,把 namenode 和 resourcemanager 分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)

#yun10-3
./sbin/start-yarn.sh
#yun10-4
./sbin/yarn-daemon.sh start resourcemanager

9. 验证集群

         HDFS:http://yun10-1:50070

         MapReducer:http://yun10-3:8090

以上是“HDFS 中 HA 机制及 Hadoop 集群搭建的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!