1. Hadoop1.x
组成
宏观上讲,hadoop包含以下几个守护进程。
- NameNode:名称节点,维护存储在HDFS上所有文件的元数据信息(元数据存储在fsimage)。元数据信息包括,文件数据块信息及数据块在数据节点上的位置,集群操作时会把元数据加载到内存中。这部分将成为Hadoop1.x搭建集群的瓶颈所在。
- Secondary NameNode:辅助名称节点,但这个名字不是很恰当,他不是名称节点的备份,而是为名称节点执行一些内务处理。为了防止元数据丢失,在fsimage文件放到内存中操作时,会将操作记录持久存储到edits的本地文件中,并周期性的与fsimage合并。
- DataNode:数据节点,用于存放真正的数据块。
- JobTracker:作业跟踪器,负责任务的执行过程中的资源管理和作业监控/调度,具体负责:调度各个子任务到各自的计算节点执行,监控任务运行和运行节点的健康状况,对失败任务的重新调度。这部分也是瓶颈。
- TaskTracker:任务跟踪器,运行在各数据节点上,用来管理各节点的Map/Reduce任务,并与作业跟踪器进行通信。
每个Hadoop1.x集群有两种类型的节点:主节点(master node) 和从节点(slave node)
- *主节点主要运行的守护节点有:NameNode;Secondary NameNode;JobTracker;
- *从节点主要运行的守护节点有:DataNode;TaskTracker;
- *小规模集群上,主节点都运行在一台服务器上即可,但对于大规模集群来说,将三个主节点进程要放在不同的服务器上。
文件系统
Hadoop分布式文件系统(HDFS)用于存储数据,它具有一次写多次读的特点。他将集群中多台服务器的存储空间合并成一体。需要以下几个守护进程协调运行来提供服务。
- NameNode: 管理存储在集群数据的元数据。
- DataNode:每个从节点运行此进程,即可将从节点的存储空间加入到文件系统中。
- Secondary NameNode
Hadoop文件本质是块存储。每个大文件被分割成多个数据块,这样就可以存储在HDFS文件系统中的不同数据节点上,每个数据块大小固定且只能被一个文件使用。为防止节点故障导致数据丢失,通常会设置备份存储在其他机架和另一个节点上。
任务处理
JobTracker负责启动和监控Mapreduce作业。
TaskTracker守护进程在集群中每台计算节点上运行,他的槽位数一般与cpu核数相同(槽位数=实际运行的任务数量)。任务跟踪器接受到任务后会启动一个Task,并初始化一个新的JVM(不建议重用)。它还负责定期向JobTracker发送心跳。
综上,NameNode和JobTracker故障会导致系统单点故障,随着集群节点的增加和任务的增大,Hadoop1.x的缺陷暴露的愈加明显。
2. Hadoop 2.x
改进
- *Mapreduce全新升级,称为MR v2或YARN,它兼容MR v1,变成了一个通用框架,如果有新的计算框架,只需开发对应的应用程序管理器,以插件化的方式整合到hadoop系统中。YARN将JobTracker的功能分为了两个守护进程:全局资源管理器,应用程序管理器。目前由以下几个部分组成:全局资源管理器(Global Resource Manager),节点管理器(Node Manager),应用程序管理器(Application Master),调度器(Scheduler),容器(Container)。一部分CPU内核和一部分内存构成一个容器。
- *资源管理器和节点管理器负责分配系统资源(容器),监控集群健康状况,管理已启动容器,节点日志处理。
- *应用程序管理器,负责同资源管理器沟通注册后通过节点管理器来获得资源,然后执行任务。容器会通过特定的协议向应用程序管理器汇报,执行完毕后,应用程序管理器会取消注册,占用容器会释放回系统中。
- *HDFS的高可用性(High Availability),使用两个相同的名称节点,一个处于活动状态(active mode)提供服务,一个处于待机状态(standby mode)实时同步活动节点。发生故障时可快速进行故障切换。 另外资源管理器(ResourceManger )也有HA