文档章节

2014-01-14---Hadoop的基础学习(八)---HDFS的HA机制及Hadoop集群搭建

查封炉台
 查封炉台
发布于 2015/01/20 17:14
字数 2505
阅读 116
收藏 3

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

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:

Hadoop2.x:

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可以确保在集群出错时,命名空间状态已经完全同步了,如图所示:

为了确保快速切换,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-1 192.168.2.11  jdk、hadoop
yun10-2 192.168.2.12 jdk、hadoop
yun10-3 192.168.2.13 jdk、hadoop
yun10-4 192.168.2.14 jdk、hadoop
yun10-5 192.168.2.15 jdk、hadoop、zookeeper
yun10-6 192.168.2.16 jdk、hadoop、zookeeper
yun10-7 192.168.2.17 jdk、hadoop、zookeeper

    服务:

yun10-1 namenode zkfc

yun10-2 namenode zkfc

yun10-3


resourcemanager
yun10-4


resourcemanager
yun10-5 datanode journalNode QuorumPeerMain nodemanager
yun10-6 datanode journalNode QuorumPeerMain nodemanager
yun10-7 datanode journalNode QuorumPeerMain nodemanager

     说明:

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

  c.修改hdfs-site.xml

 

  d.修改mapred-site.xml

  e.修改yarn-site.xml

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

---------------------------------------END----------------------------------------------------------------------

© 著作权归作者所有

查封炉台
粉丝 49
博文 56
码字总数 138491
作品 0
景德镇
程序员
私信 提问
加载中

评论(0)

大数据教程(11.4)hadoop2.9.1集群HA联邦(federation)高可用搭建

上一篇文章介绍了haoop集群HA高可用的搭建,相信大家已经掌握了其知识;本篇博客博主将继续为小伙伴分享HA联邦高可用的搭建,虽然,联邦机制在很多公司可能还达不到这样的数据集群规模以至于...

em_aaron
2019/01/13
200
0
Hadoop HA+Federation 高可用联邦模式搭建指南

简述 *** Hadoop 集群一共有4种部署模式,详见《Hadoop 生态圈介绍》。HA联邦模式解决了单纯HA模式的性能瓶颈(主要指Namenode、ResourceManager),将整个HA集群划分为两个以上的集群,不同...

bochs
2016/11/17
290
1
大数据Hadoop需要了解哪些内容?

一、Hadoop环境搭建 1. Hadoop生态环境介绍 2. Hadoop云计算中的位置和关系 3. 国内外Hadoop应用案例介绍 4. Hadoop概念、版本、历史 5. Hadoop核心组成介绍及hdfs、mapreduce体系结构 6. H...

mo默瑶
2018/05/05
0
0
Hadoop HA高可用集群模式搭建指南

简述 ***hadoop 集群一共有4种部署模式,详见《hadoop 生态圈介绍》。HA模式的集群里面会部署两台NN(最多也只能两台),以形成主备NN节点,达到高可用的目的。两台NN之间同步数据有两种方法...

bochs
2016/11/17
105
0
Setting Up Hadoop NameNode High Availability

Hadoop2.0以后,2个NameNode的数据其实是实时共享的。新HDFS采用了一种共享机制,Quorum Journal Node(JournalNode)集群或者Nnetwork File System(NFS)进行共享。NFS是操作系统层面的,J...

candon123
2018/01/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IntelliJ 安装 Python 插件

运行 IntelliJ,然后在 IntelliJ 的设置中找到 插件。 然后在插件中搜索 Python 如果你没有安装的话,你应该是没有办法找到的。 你可以选择搜索 MarketPlace 选择官方的插件进行安装就可以了...

honeymoose
15分钟前
4
0
记一次element ui table 数据改变UI没渲染的坑

我要根据外界的值来判断我显示的table是单选还是多选,但是props的值变了UI却一直没什么反应,后来采用了强制刷新,在组件上加了一个:key= XXX,这个key根据外界的值得变化而变化,问题解决...

osc_5p8bxoq2
15分钟前
12
0
ASP.NET Core MVC如何上传文件及处理大文件上传

用文件模型绑定接口:IFormFile (小文件上传) 当你使用IFormFile接口来上传文件的时候,一定要注意,IFormFile会将一个Http请求中的所有文件都读取到服务器内存后,才会触发ASP.NET Core MV...

osc_yq7pxbpa
16分钟前
12
0
ASP.NET Core MVC如何上传文件及处理大文件上传

用文件模型绑定接口:IFormFile (小文件上传) 当你使用IFormFile接口来上传文件的时候,一定要注意,IFormFile会将一个Http请求中的所有文件都读取到服务器内存后,才会触发ASP.NET Core MV...

osc_dihgscoq
18分钟前
15
0
马斯克的宇宙飞船爆炸了!但不会影响SpaceX的载人发射

  该炸的 Starship 原型机总是会炸的,该进行的载人任务也总是会发射的。   承载着 SpaceX 未来星际旅行梦想的 Starship 宇宙飞船原型机再一次在测试中以全部炸毁收场。      但需要...

osc_35ne77sz
19分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部