hadoop2相对hadoop1有非常重大的改进。
下面看一下在HDFS和MapReduce方面的改进:
HDFS Federation(HDFS联邦)
federation-background[1]
HDFS有两个主要层:
Namespace 由目录、文件和块组成;支持所有命名空间对文件和目录的操作。
Block Storage Service 由Block Management和Storage组成。
Block Management 提供dataNode集群成员关系,注册信息和周期性的心跳; 处理块报告,维护块位置; 支持块相关的操作,如创建、删除、修改等; 管理副本数量、位置,删除多余副本;
Storag是dataNode提供的。
之前的HDFS架构只允许存在一个namespace。一个Namenode管理这个namespace。HDFS联邦通过增加多个namenode/namespace来解决这个先前架构的限制。
HDFS联邦使用多个独立的NameNode/Namespace。NameNode是联邦的,意味着他们是独立的,不会要求相互协作。DataNode是存储block的。每个DataNode都在集群中的所有NameNode注册。DataNode发送周期性的心跳和block报告,并且处理NameNode发回的命令。
federation[www.hjha178.com1]
一个block pool 是块的集合,这些块属于一个单一的namespace。Datanode存储着集群中所有block pool中的块。block pool的管理相互之间是独立的。这意味着一个namespace可以独立的生成块ID,不需要与其他namespace协调。一个Namenode失败不会导致Datanode的失败,这些Datanode还可以服务其他Namenode。
一个Namespace和他的block pool一起称作namespace volume。这是一个自包含单元。当一个namenode/namespace删除后,对应的block pool也会被删除。当集群升级时,每个namespace volume也会升级。
ClusterID是用来标示集群中所有节点的。当Namenode格式化时,这个id会自动产生。
多namenode/namespace的好处:
HDFS集群支持存储的水平扩展,但是namespace不能。对于大集群部署或者大量小文件存储时,使用多namespace会更好。
之前的设计中,文件系统操作效率受制于单个的namenode。现在,多个namenode提高了文件读写操作效率。
一个namenode在多用户环境中没有隔离性。使用多namespace,不同的应用或者用户可以隔离在不同的namespace中。
联邦配置是向后兼容的,之前架构下的应用不经修改的就可以工作。
联邦中有NameServiceID。匹配的namenode、secondary、backup、checkpointer节点,都有相同的NameServiceID.
YARN
新的架构在hadoop-0.23引入的,把JobTracker两个主要的功能分为Resource Management(RM,资源管理)和job life-cycle management(作业生命周期管理),每个都是独立的组件。
新的ResourceManager管理着所有计算机资源对应用的分配工作。每个应用都会对应一个ApplicationMaster(www.feihuanyule.com AM)。
一个应用或者是原来的一个普通job,或者是这些job的DAG。
Resource www.douniu178.com Manager和每个节点上的NodeManager构成了计算层。其中,NodeManager会管理所在节点上的用户进程。
每个应用对应的ApplicationManager负责执行和监控task。
yarn_architecture[1www.ccyl178.com/]
RM有两个组件:Schuduler和ApplicationManager。
Scheduler负责给各种应用分配资源,不会监控或者跟踪应用状态。它也不保证应用失败或者硬件失败后重启任务。当前版本的调度器,只根据内存分配资源给应用。调度器是可插拔的。
每个节点都有一个NodeManager,负责管理本节点资源的使用情况,如cpu、内存、磁盘、网络等,并把这些信息报告给ResourceManager/Scheduler.
ApplicationManager负责管理资源容器。