Hadoop 2.0中单点故障解决方案总结

时间:2024.3.31

Hadoop 2.0中单点故障解决方案总结

Hadoop 1.0内核主要由两个分支组成:MapReduce和HDFS,众所周知,这两个系统的设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题,该问题在很长时间内没有解决,这使得Hadoop在相当长时间内仅适合离线存储和离线计算。

令人欣慰的是,这些问题在Hadoop 2.0中得到了非常完整的解决。Hadoop 2.0内核由三个分支组成,分别是HDFS、MapReduce和YARN,而Hadoop生态系统中的其他系统,比如HBase、Hive、Pig等,均是基于这三个系统开发的。截止本文发布,Hadoop 2.0的这三个子系统的单点故障均已经解决或者正在解决(Hadoop HA),本文将为大家介绍当前的进度和具体的解决方案。

在正式介绍单点故障解决方案之前,先简要回顾一下这三个系统(三个系统均采用简单的master/slaves架构,其中master是单点故障)。

(1) HDFS:仿照google GFS实现的分布式存储系统,由NameNode和DataNode两种服务组成,其中NameNode是存储了元数据信息(fsimage)和操作日志(edits),由于它是唯一的,其可用性直接决定了整个存储系统的可用性;

(2)YARN:Hadoop 2.0中新引入的资源管理系统,它的引入使得Hadoop不再局限于MapReduce一类计算,而是支持多样化的计算框架。它由两类服务组成,分别是ResourceManager和NodeManager,其中,ResourceManager作为整个系统的唯一组件,存在单点故障问题;

(3)MapReduce:目前存在两种MapReduce实现,分别是可独立运行的MapReduce,它由两类服务组成,分别是JobTracker和TaskTraker,其中JobTracker存在单点故障问题,另一个是MapReduce On YARN,在这种实现中,每个作业独立使用一个作业跟踪器(ApplicationMaster),彼此之间不再相互影响,不存在单点故障问题。本文提到的单点故障实际上是第一种实现中JobTracker的单点故障。

先说当前Hadoop单点故障的解决进度,截止本文发布时,HDFS单点故障已经解决,且提供了两套可行方案;MapReduce单点故障(JobTracker)由CDH4(CDH4同时打包了MRv1和MRv2,这里的单点故障指的是MRv1的单点问题)解决,且已经发布;YARN单点故障尚未解决,但方案已经提出,由于解决方案借鉴了HDFS HA和MapReduce HA的实现,因为将会很快得到解决。

总体上说,Hadoop中的HDFS、MapReduce和YARN的单点故障解决方案架构是完全一致的,分为手动模式和自动模式,其中手动模式是指由管理员通过命令进行主备切换,这通常在服务升级时有用,自动模式可降低运维成本,但存在潜在危险。这两种模式下的架构如下。

【手动模式】

【自动模式】

在Hadoop HA中,主要由以下几个组件构成:

(1)MasterHADaemon:与Master服务运行在同一个进程中,可接收外部RPC命令,以控制Master服务的启动和停止;

(2)SharedStorage:共享存储系统,active master将信息写入共享存储系统,而standby master则读取该信息以保持与active master的同步,从而减少切换时间。常用的共享存储系统有zookeeper(被YARN HA采用)、NFS(被HDFS HA采用)、HDFS(被MapReduce HA采用)和类bookeeper系统(被HDFS HA采用)。

(3)ZKFailoverController:基于Zookeeper实现的切换控制器,主要由两个核心组件构成:ActiveStandbyElector和HealthMonitor,其中,ActiveStandbyElector负责与zookeeper集群交互,通过尝试获取全局锁,以判断所管理的master进入active还是standby状态;HealthMonitor负责监控各个活动master的状态,以根据它们状态进行状态切换。。

(4)Zookeeper集群:核心功能通过维护一把全局锁控制整个集群有且仅有一个active master。当然,如果ShardStorge采用了zookeeper,则还会记录一些其他状态和运行时信息。

尤其需要注意的是,解决HA问题需考虑以下几个问题:

1脑裂(brain-split:脑裂是指在主备切换时,由于切换不彻底或其他原因,导致客户端和Slave误以为出现两个active master,最终使得整个集群处于混乱状态。解决脑裂问题,通常采用隔离(Fencing)机制,包括三个方面:

·         共享存储fencing:确保只有一个Master往共享存储中写数据。

·         客户端fencing:确保只有一个Master可以响应客户端的请求。

·         Slave fencing:确保只有一个Master可以向Slave下发命令。

Hadoop公共库中对外提供了两种fenching实现,分别是sshfence和shellfence(缺省实现),其中sshfence是指通过ssh登陆目标Master节点上,使用命令fuser将进程杀死(通过tcp端口号定位进程pid,该方法比jps命令更准确),shellfence是指执行一个用户事先定义的shell命令(脚本)完成隔离。

2)切换对外透明:为了保证整个切换是对外透明的,Hadoop应保证所有客户端和Slave能自动重定向到新的active master上,这通常是通过若干次尝试连接旧master不成功后,再重新尝试链接新master完成的,整个过程有一定延迟。在新版本的Hadoop RPC中,用户可自行设置RPC客户端尝试机制、尝试次数和尝试超时时间等参数。

为了印证以上通用方案,以MapReduce HA为例进行说明,在CDH4中,HA方案介绍可参考我的这篇文章:“CDH中JobTracker HA方案介绍”,架构图如下:

Hadoop 2.0 中 HDFS HA解决方案可阅读文章:“Hadoop 2.0 NameNode HA和Federation实践”,目前HDFS2中提供了两种HA方案,一种是基于NFS共享存储的方案,一种基于Paxos算法的方案Quorum Journal Manager(QJM),它的基本原理就是用2N+1台JournalNode存储EditLog,每次写数据操作有大多数(>=N+1)返回成功时即认为该次写成功,数据不会丢失了。目前社区正尝试使用Bookeeper作为共享存储系统,具体可参考。HDFS-1623给出的HDFS HA架构图如下所示:

目前进度最慢的是YARN HA解决方案,该方案已经文档化,正在规范和开发中,具体可参考:https://issues.apache.org/jira/browse/YARN-149,总体上看,它的整体架构与MapReduce HA和YARN HA的类似,但共享存储系统采用的是Zookeeper。之所以采用Zookeeper这种轻量级“存储系统”(需要注意的是,zookeeper设计目的并不是存储,而是提供分布式协调服务,但它的确可以安全可靠的存储少量数据以解决分布式环境下多个服务之间的数据共享问题),是由于YARN的大部分信息可以通过NodeManager和ApplicationMaster的心跳信息进行动态重构,而ResourceManager本身只需记录少量信息到Zookeeper上即可。

总体上讲,HA解决的难度取决于Master自身记录信息的多少和信息可重构性,如果记录的信息非常庞大且不可动态重构,比如NameNode,则需要一个可靠性与性能均很高的共享存储系统,而如果Master保存有很多信息,但绝大多数可通过Slave动态重构,则HA解决方法则容易得多,典型代表是MapReduce和YARN。从另外一个角度看,由于计算框架对信息丢失不是非常敏感,比如一个已经完成的任务信息丢失,只需重算即可获取,使得计算框架的HA设计难度远低于存储类系统。

Hadoop HA配置方法:

(1)HDFS HA:Hadoop 2.0 NameNode HA和Federation实践

(2)MapReduce HA:Configuring JobTracker High Availability

原创文章,转载请注明: 转载自董的博客

本文链接地址: http://dongxicheng.org/mapreduce-nextgen/hadoop-2-0-ha/

作者:Dong,作者介绍:http://dongxicheng.org/about/

本博客的文章集合:http://dongxicheng.org/recommend/


第二篇:Hadoop搭建总结


Hadoop之集群搭建总结

Summershyn夏超俊

这是个人在参照网上一下文章,自己尝试搭建,并碰到一些困难和问题,最后终于成功之后的总结,希望可以对你有点帮助。

有三台机子

192.168.1.101 master

192.168.1.102 slave1

192.168.1.103 slave2

1. SSH:ubuntu server 版安装时可选择安装OpenSSH(若没装,则可以sudo apt-get install openssh)

2. JDK:虽然ubuntu有openjdk,但是还是感觉sun的好一些。把jdk-()-.bin拷到ubuntu下,例如放/home/ubuntu/下,命令:chmod 777 jdk-().bin赋予可执行权限。然后运行。等待….

安装完之后配置环境变量:向/etc/encironment文件中添加

JAVA_HOME=”/home/ubuntu/jdk1.6.0_27(视版本而定)”

PATH=“……….:$JAVA_HOME/bin”

CLASS_HOME=”$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar”(好像可不填) 配置环境变量得重启生效

3. 修改/etc/hosts使得各主机名与IP互相识别(master需要填写所有机器,slave只需要填写自己和master)

即一个如(192.168.1.101 master)ip与主机名的对子

4.下载hadoop:我是0.20.0版本的。并将hadoop-0.20.0更名为hadoop(为了方便) 5创建用户:在每个机器上都创建一个同名的用户(如:hadoop,因为用户名不统一的话,后面ssh无密码登录就很纠结了)

命令:sudo addgroup hadoop

sudo adduser –ingroup hadoop hadoop

6.配置ssh无密码登录

使用统一的用户hadoop,命令:ssh-keygen –t dsa –P ‘’ –f ~/.ssh/id_dsa

(这一步每台机子都要做)

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys (这一步只有master做)

再把生成的认证钥发给slave,命令:scp ~/.ssh/authorized_keys slave1:/home/hadoop/.ssh/ 这一步会提示输入hadoop@slave1的密码,以后就可以直接ssh slave1登录了

7.配置hadoop,这最好在windows下做好再把hadoop传到linux下

①配置hadoop/conf中的masters和slaves,masters填入master的主机名或IP,slaves填所有的slave的主机名或IP

②配置hadoop/conf中的hadoop-env.sh:加入如下代码:

export HADOOP_HOME=/home/hadoop/hadoop

export HADOOP_CONF_DIR=$HADOOP_HOME/conf

export PATH=$PATH:$HADOOP_HOME/bin

并将JAVA_HOME改成自己的JAVA_HOME即:/home/ubuntu/jdk1.6.0_27 ③配置hadoop/conf中的core-site.xml和hdfs-site.xml和mapred-site.xml

core-site.xml:

<configuration>

<property>

<name>hadoop.tep.dir</name>

<value>/home/hadoop/hadoop/hadooptmp</value>(在hadoop根目录下建文件夹hadooptmp) </property>

<property>

<name>fs.default.name</name>

<value>hdfs://master:9000</value>

</property>

</configuration>

hdfs-site.xml:

<configuration>

<property>

<name>dfs.name.dir</name>

<value>/home/hadoop/hadoop/NameData</value>(在hadoop根目录下建文件夹NameData) </property>

<property>

<name>dfs.permissions</name>

<value>false</value>

</property>

<property>

<name>dfs.replication</name>

<value>2</value>(副本个数,可以为1,2,3,视集群大小而定)

</property>

</configuration>

mapred-site.xml

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>192.168.1.101:9001</value>

</property>

</configuration>

8.将hadoop文件夹拷入每台linux的机子,放在hadoop用户文件夹下,即/home/hadoop/hadoop是hadoop目录

9.为每台机子的hadoop/bin文件下的所有文件分配可执行权限,命令:

chmod u+x bin/*

在master的hadoop根目录中执行:bin/start-all.sh,即启动了hdfs。 格式化hdfs:hadoop namenode –format

10.即完成安装hadoop,可以在浏览器中查看图形界面:

NameNode -

其中的master可以写成IP

JobTracker -

更多相关推荐:
hadoop认识总结

一对hadoop的基本认识Hadoop是一个分布式系统基础技术框架由Apache基金会所开发利用hadoop软件开发用户可以在不了解分布式底层细节的情况下开发分布式程序从而达到充分利用集群的威力高速运算和存储的...

Hadoop学习总结

Hadoop学习总结一背景随着信息时代脚步的加快各类数据信息越来越多海量数据的来源列举如下纽约证券交易所每天产生1TB的交易数据Facebook存储着约100亿张照片约1PB数据Ancestrycom一个家谱网...

hadoop总结

Hadoop概念Hadoop是一个能够对大量数据进行分布式处理的软件框架Hadoop的特点1可靠性Reliablehadoop能自动地维护数据的多份副本并且在任务失败后能自动地重新部署redeploy计算任务2...

hadoop原理_自己的总结

用户提交给hadoopclient的command指定了输入路径输出路径如下所示cmdquotHADOOPHOMEbinhadoopbistreaminginputLINKPATHpartinputPATCHP...

最新hadoop应用总结

Hadoop应用总结一系统配置1安装linuxubuntu系统2安装开启opensshserversudoaptgetinstallopensshserver3建立ssh无密码登录sshkeygentdsaP3...

hadoop常见启动问题总结

Hadoop节点问题总结1.hadoop主节点意外关机重启后hadoop不能启动.Hadoopnamenode由于某些原因关机重启,重新启动后hadoop服务不能正常启动.每次开机都得重新格式化一下nameno…

hadoop学习心得

1FileInputFormatsplitsonlylargefilesHerelargemeanslargerthananHDFSblockThesplitsizeisnormallythesizeofanH...

Hadoop 2.0中单点故障解决方案总结

Hadoop20中单点故障解决方案总结Hadoop10内核主要由两个分支组成MapReduce和HDFS众所周知这两个系统的设计缺陷是单点故障即MR的JobTracker和HDFS的NameNode两个核心服务...

hadoop集群配置范例及问题总结

HADOOP0202030030分布式集群配置硬件环境1虚拟机VMWareWorkstation2两台机器均安装ubuntu11采用桥接模式需要两个物理ip地址下面用1921681100和1921681101代...

hadoop版本差异详解.docx

Hadoop版本的关键特性调研报高ApacheHadoopApache版本衍化ApacheHadoop版本分为两代我们将第一代Hadoop称为Hadoop10第二代Hadoop称为Hadoop20第一代Hado...

hadoop 学习

Hadoop学习笔记一简要介绍这里先大致介绍一下Hadoop本文大部分内容都是从官网Hadoop上来的其中有一篇介绍HDFS的pdf文档里面对Hadoop介绍的比较全面了我的这一个系列的Hadoop学习笔记也是...

hadoop学习文档

测验五第1题一个作业的map个数是怎么确定的CAJobTracker计算得出BTaskTracker通过配置map的个数CInputSplit分片的个数D属性mapredmaptasks设定第2题以下关于新旧m...

hadoop总结(19篇)