产生背景
Hadoop1.0中HDFS和MapReduce在高可用、扩展性等方面存在问题
--HDFS存在的问题
(1)NameNode单点故障,难以应用于在线场景
(2)NameNode压力过大,且内存受限(元数据全部存在内容中),影响系统扩展性。
--MapReduce存在的问题
(1)JobTracker访问压力过大,单点故障,影响系统扩展性
(2)难以支持除MapReduce之外的计算框架,比如Spark、Storm等
Hadoop1.x与Hadoop2.x比较
多了一层YARN中间层。Hadoop2.x由HDFS、MapReduce和YARN三个分支构成;
(1)HDFS : NN Federation(联邦-将元数据分成两个独立的NameNode进行工作)、HA(高可用)
(2)MapReduce:运行在YARN上的MR(从YARM申请资源和数据);
(3)YARN:资源管理系统(内存、CPU等资源,所有分布式节点都往yarn汇报,保证计算框架申请资源的时候充分利用这些资源)
hadoop2.x解决的问题:
A、解决了HDFS1.0中单点故障和内存受限问题;
(1)解决了单点故障
--HDFS HA:通过主备NameNode解决
--如果主NameNode发生故障,则切换到备NameNode上
(2)解决了内存受限问题
--HDFS Federation(联邦)
--水平扩展,支持多个NameNode;
--每个NameNode分管一部分目录(独立工作)
--所有NameNode共享所有DataNode存储资源
B、2.x 仅在架构上发生变化,使用方式不变
C、对HDFS使用者透明
D、HDFS 1.x中的命令和API仍可以使用
HDFS 2.x 高可用HA
(1)DataNode向NameNode(NN)和NN Standby(备份节点-可以多个)汇报,为了保证NN主节点挂掉后,NN Standby备节点能完全接管,NN Active元数据不在存储在本机磁盘文件(内存挂掉之后无法使用),而是将元数据存储在JN(JournalNode集群中<必须有多个点保存元数据>,保证元数据可以共享且不因为主节点挂掉或磁盘损坏导致Standby备份节点无法接管)。JournalNode就是用来存元数据的,所有的NN都会从JN读取或实时写入到JN上去。但NN挂调后,NN Standby从JN读取元数据并接管NN Active。
(2)FailoverController对NN进行心跳检查,是控制NN切换的一个服务;同时与Zookeeper进行心跳;Zookeeper可以通过FailoverController对NN进行切换!如果需要升级或修改NN Active,那么可以手动停止NN,使得Standby切换到Active状态,这点要强于Keepalive的功能!
(3)客户端请求Zookeeper获取Active的工作的NN的地址,然后客户端向真实的NN发送读写请求;
HDFS 2.0 HA解决的问题:
(1)解决点点故障
. 主NameNode对外提供服务,备NameNode同步主NameNode元数据,以待切换
. 所有的DataNode同时向两个NodeNode汇报数据块信息
(2)两种切换选择
. 手动切换:通过命令实现主备之间的切换,可以用HDFS的升级等场景
. 自动切换:基于Zookeeper实现
(3)基于Zookeeper的自动切换方案
. Zookeeper FailoverController: 监控NameNode健康状态。并向Zookeeper注册NameNode
. NameNode挂掉之后,ZKFC为NameNode竞争锁,获得ZKFC锁的NameNode变为Active
HDFS 2.x Federation(联邦)
用于超大数据中,且被分成多块的情况
(1)通过多个namenode/namespace把元数据的存储和管理分散到多个节点中,使得NameNode/namespace可以通过增加机器来进行水平扩展。
(2)能把单个NameNode的负载分散到多个节点中,在HDFS数据规模较大的时候不会也降低HDFS的性能。可以通过多个namespace来隔离不同类型的应用。把不同类型的应用的HDFS元数据的存储和管理分派到不同的namespace的NameNode中。
HDFS 2.x YARN
再也看不到JobTracker和TaskTracker了原因:
(1)YARN: Yet Another Resource Negotiator
(2)Hadoop2.0新引入的资源管理系统,直接从MRv1演化而来的
. 核心思想: 将MRv1中的JobTracker的资源管理和任务调度两个功能分开,分别有ResourceManager和ApplicationMaster进程实现;
. ResourceManager: 负责整个集群的资源管理和调度(只有一个);
. ApplicationMaster: 负责应用程序相关的事务,比如任务调度、任务监控和容错等(运行在真正的某一个节点上的,有多个);
(3)YARN的引入,是的多个计算框架可运行在一个集群中
. 每个应用程序对应一个ApplicationMaster
. 目前多个计算框架可以运行在YARN上,比如MapReduce、Spark、Storm等
MapReduce On YARN
-- MapReduce On YARN : MRv2
-- 将MapReduce作业直接运行在YARN上,而不是有JobTracker和TaskTracker构建的MRv1系统中
-- 基本功能模块
. YARN : 负责资源管理和调度
. MRAppMaster(NodeManager中) : 负责任务切分、任务调度、任务监控和容错等
. MapTask/ReduceTask : 任务驱动引擎,与MRv1一致
-- 每个MapReduce作业对应一个MRAppMaster
. MRAppMaster任务调度
. YARN将资源分配给MRAppMaster
. MRAppMaster进一步将资源分配给内部的任务
-- MRAppMaster容错
. 失败后,有YARN重新启动
. 任务失败后,MRAppMaster重新申请资源
快来成为我的朋友或合作伙伴,一起交流,一起进步!
QQ群:961179337
微信:lixiang6153
邮箱:lixx2048@163.com
公众号:IT技术快餐
更多资料等你来拿!