Hadoop1.0即第一代Hadoop,由分布式存储系统HDFS和分布式计算框架MapReduce组成,其中HDFS由一个NameNode和多个DateNode组成,MapReduce由一个JobTracker和多个TaskTracker组成。
HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点和若干个数据节点。名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。其中,master主节点称之为Namenode节点,而slave从节点称为DataNode节点。
(1).在磁盘上:Fslnage和EditLog
(2).在内存中:映射信息,即文件包含哪些块,每个块存储在哪个数据节点
namenode有且只有一个,虽然可以通过SecondaryNameNode与NameNode进行数据同步备份,但是总会存在一定的延时,如果NameNode挂掉,但是如果有部份数据还没有同步到SecondaryNameNode上,还是可能会存在着数据丢失的问题。
第二名称节点会定期与第一名称节点通信。
缺陷:
对MapReduce来说,同样时一个主从结构,是由一个JobTracker(主)和多个TaskTracker(从)组成。
MapReduce1.0既是有一个计算框架,也是一个资源管理调度框架。
可以看得出JobTracker相当于是一个资源管理调度器,必然要面对大量的任务处理。而且出现错误集群必然崩溃。
各个角色的功能:
作业调度流程图:
缺陷:
相对于Hadoop1.0来说,2就好多,这也是毋庸置疑的,总不可能越更新越差吧。
我们来详细了解一下2版本究极加了哪些东西。
HDFS HA(High Availability)是为了解决单点故障问题而设计。
JN:JounrnalNode日志节点,在学习期间一般使用3个节点来部署JN。
ZKFC:全称是ZooKeeper Failover Controller,这个一个单独的进程,其数量和NN数量一样,负责监控NN节点的健康状态,同时向ZK发送心跳表明它还在工作和NN的状态,如果NN挂了,就可以让ZK马上选举出新的NN(其实就是让standbyNN的状态切换称active),所以ZKFC是NN的一个守护进程,其一般会和其对应的NN部署在同一个节点上。
ZK:ZooKeeper,当一个activeNN挂掉以后,从standbyNN节点中选举新的NN来充当activeNN对外提供服务,一个是部署奇数台的。这里建议当你的集群规模是在50台一下的时候,ZK一般部署7个节点;50~100台时,ZK在9或者11个节点;100以上就部署11个节点以上吧。但并部署越多越好的,ZK进程越多需要计算的时间就越多,选举的时间就越长,所以合适就好。
HA集群设置了两个名称节点,“活跃(Active)”和“待命(Standby)”以至于不会落入单点故障。处于活跃状态的名称节点负责对外处理所有客户端的请求,而处于待命状态的名称节点则作为备用节点,保存了足够多的系统元数据,当名称节点出现故障时提供快速恢复能力。也就是说,在HDFS HA中,处于待命状态的名称节点提供了“热备份”,一旦活跃名称节点出现故障,就可以立即切换到待命名称节点,不会影响到系统的正常对外服务。
由于待命名称节点是活跃的“热备份”,因此活跃名称节点的状态信息必须实时同步到待命名称节点。两种名称节点的状态同步,可以借助于一个共享存储系统来实现,比如NFS(Network File System)、QJM(Quorum Journal Manager)或者Zookeeper。活跃名称节点将更新数据写入到共享存储系统,待命名称节点会一直监听该系统,一旦发现有新的写入,就立即从公共存储系统中读取这些数据并加载到自己的内存中,从而保证与活跃名称节点状态完全同步。此外,名称节点中保存了数据库(block)到实际存储位置的映射信息,即每个数据块是由哪个数据节点存储的。当一个数据节点加入HDFS集群时,它会把自己所包含的数据块列表报告给名称节点,此后会通过“心跳”的方式定期执行这种告知操作,以确保名称节点的块映射是最新的。
HDFS1.0采用单名称节点的设计,还存在可扩展性、性能和隔离性等问题。而HDFS联邦可以很好地解决上述三个方面的问题。
HDFS Federation设计可以解决单名称节点存在的以下几个问题:
需要注意的是,HDFS Federation并不能解决单点故障问题,也就是说,每个名称节点都存在在单点故障问题,需要为每个名称节点部署一个后备名称节点,以应对名称节点挂掉对业务产生的影响。
YARN设计思路是将原JobTacker三大功能拆分
Hadoop2.0以后,MapReduce1.0中的资源管理调度功能,被单独分离出来形成了YARN,它是一个纯粹的资源管理调度框架,而不是一个计算框架。被剥离了资源管理调度功能的MapReduce就变成了MapReduce2.0,它是运行在YARN之上的一个纯粹的计算框架,不再自己负责资源调度管理服务,而是由YARN为其提供资源管理调度服务。
ResourceManager 拥有系统所有资源分配的决定权,负责集群中所有应用程序的资源分配,拥有集群资源主要、全局视图。因此为用户提供公平的,基于容量的,本地化资源调度。根据程序的需求,调度优先级以及可用资源情况,动态分配特定节点运行应用程序。它与每个节点上的NodeManager和每一个应用程序的ApplicationMaster协调工作。
ResourceManager的主要职责在于调度,即在竞争的应用程序之间分配系统中的可用资源,并不关注每个应用程序的状态管理。
ResourceManager主要有两个组件:Scheduler和ApplicationManager:Scheduler是一个资源调度器,它主要负责协调集群中各个应用的资源分配,保障整个集群的运行效率。Scheduler的角色是一个纯调度器,它只负责调度Containers,不会关心应用程序监控及其运行状态等信息。同样,它也不能重启因应用失败或者硬件错误而运行失败的任务。
调度器被设计成一个可插拔的组件,YARN不仅自身提供了许多种直接可用的调度器,也应许用户根据自己的需求设计调度器。
容器(Container)作为动态资源分配单位,每个容器中都封装了一定数量的CPU、内存、磁盘等资源,从而限定每个应用程序可以使用的资源量。
ApplicationManager主要负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster,还有就是负责监控ApplicationMaster,在遇到失败时重启ApplicationMaster运行的Container
NodeManager是yarn节点的一个“工作进程”代理,管理hadoop集群中独立的计算节点,主要负责与ResourceManager通信,负责启动和管理应用程序的container的生命周期,监控它们的资源使用情况(cpu和内存),跟踪节点的监控状态,管理日志等。并报告给RM。
NodeManager在启动时,NodeManager向ResourceManager注册,然后发送心跳包来等待ResourceManager的指令,主要目的是管理resourcemanager分配给它的应用程序container。NodeManager只负责管理自身的Container,它并不知道运行在它上面应用的信息。在运行期,通过NodeManager和ResourceManager协同工作,这些信息会不断被更新并保障整个集群发挥出最佳状态
Hadoop1.0主要存在以下不足:
Hadoop的优化与发展主要体现在两个方面:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。