Hadoop作为成熟的分布式计算框架在大数据生态领域已经使用多年,本文简要介绍Hadoop的核心组件MapReduce、YARN和HDFS,以加深了解。
Hadoop是分布式计算框架,主要解决海量数据的存储和计算问题。Hadoop主要组件包括分布式文件系统HDFS、分布式离线并行计算框架MapReduce、作业调度与集群资源管理框架YARN。Hadoop生态系统一系列框架和组件如下:
Hadoop 1.0主要由两部分组成,分别是分布式文件系统HDFS和分布式计算框架Map/Reduce。其中分布式文件系统主要用于大规模数据的分布式存储,而MapReduce 则构建在分布式文件系统之上,对存储在分布式文件系统中的数据进行分布式计算。MapReduce作为一个分布式运算程序的编程框架,其核心功能是将用户编写的业务逻辑代码和自带默认组件整合一个完整的分布式运算程序,并发布到Hadoop集群上运行。
Hadoop MapReduce采用了Master/Slave(M/S)架构,它主要由以下几个组件组成:Client、JobTracker、 TaskTracker 和Task。
1)client
用户自定义的MapReduce程序通过Client提交到JobTracker端;同时,用户可通过Client提供的一些接口查看作业运行状态。在Hadoop内部用“作业”(Job)表示MapReduce程序,一个MapReduce程序可对应若干个作业,而每个作业会被分解成若干个Map/Reduce任务(Task)。
2)JobTracker
JobTracker主要负责资源监控和作业调度。JobTracker监控所有TaskTracker与作业的健康状况,一旦发现失败情况后,其会将相应的任务转移到其他节点;同时,JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。在Hadoop中,任务调度器是一个可插拔的模块,用户可以根据自己的需要设计相应的调度器。
3)TaskTracker
TaskTracker会周期性地通过Heartbeat将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker发送过来的命令并执行相应的操作(如启动新任务、杀死任务等)。TaskTracker使用“slot”等量划分本节点上的资源量。“slot”代表计算资源(CPU、内存等)。一个Task获取到一个slot后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上的空闲slot分配给Task使用。slot分为Map slot和Reduce slot两种,分别供MapTask和Reduce Task使用。TaskTracker通过slot数目(可配置参数)限定Task的并发度。
4)Task
Task分为Map Task和Reduce Task两种,均由TaskTracker启动。从上一小节中我们知道,HDFS以固定大小的block为基本单位存储数据,而对于MapReduce而言,其处理单位是split。split是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。但需要注意的是,split的多少决定了Map Task的数目,因为每个split会交由一个Map Task处理。
MapReduce适用的应用场景具有一个共性:任务可以被分解为相互独立的子任务。基于该特点,MapReduce提供了其分布式编程的方法:
MapReduce 编程模型主要思想分为InputFormat、Split、Mapper、Shuffle、Reducer 和OutputFormat。
JobTracker是整个MapReduce计算框架中的主服务,负责整个集群的作业控制和资源管理。在Hadoop内部,每个应用程序表示为一个作业,每个作业又进一步分成多个任务。JobTracker的作用就是就是负责作业的分解以及状态监控,其中状态监控又包括TaskTracker状态监控、作业状态监控和任务状态监控。
状态监控的一个重要目的是实现容错功能,借助监控信息,JobTracker实现全方位的容错机制,同时推测出运行缓慢的任务,并启动任务加快数据处理速度。
Hadoop资源管理器由两部分组成:资源表示模型和资源分配模型,其中资源表示模型描述资源的组织方式,在Hadoop上使用slot组织各节点的资源;资源分配模型则决定如何将资源分配给各个作业,在Hadoop上通过调度器完成。Hadoop中引入slot概念,将各个节点上的资源等量的切分成若干份,每一份用一个slot表示。
在MapReduce框架中,由JobTracker实现资源调度。JobTracker不断接收各个TaskTracker周期性的发送过来的资源量和任务状态等信息,并综合考虑TaskTracker的数据分布、资源剩余量、作业优先级和作业提交时间等因素,为TaskTracker分配最合适的任务。
TaskTracker是Hadoop集群中运行于各个节点上的服务,是JobTracker和Tasks之间沟通的桥梁。TaskTracker主要实现两个功能:
Map Task整体计算流程如图所示,分为5个阶段:
Reduce Task整体计算流程如图所示,共分为5个阶段:
在Reduce Task中,Shuffle阶段和Merge阶段是并行进行的,可划分为三个子阶段。
1) 准备运行完成的Map Task列表
GetMapEventThread线程周期性的通过RPC从TaskTracker获取已完成的Map Task列表,并保存到映射表mapLocations中,其中保存了TaskTracker Host与已完成任务列表的映射关系。为防止出现网络热点,Reduce Task通过对所有TaskTracker Host进行混洗操作以打乱数据拷贝顺序,并将调整后 的Map Task输出数据位置保存到scheduledCopies中。
2) 远程拷贝数据
Reduce Task同时启动多个MapOutoutCopier线程,这些线程从scheduledCopies列表中获取Map Task输出位置,并通过HTTP get远程拷贝数据。对于获取的数据分片,如果大小超过一定的阈值,则存放在磁盘上,否则直接放到内存中。
3) 合并内存文件和磁盘文件
为了防止内存或者磁盘上的文件数据过多,Reduce Task启动了LocalFSMerger和InMemFSMergeThread两个线程分别对内存和磁盘上的文件进行合并。
YARN(Yet Another Resource Negotiator)是Hadoop 2.0中的资源管理系统,基本设计思想是将Hadoop 1.0中的JobTracker拆分成了两个独立的服务:一个全局的资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。其中ResourceManager负责整个系统的资源管理和分配,而ApplicationMaster负责单个应用程序的管理。
YARN总体上仍然是Master/Slave架构,其中Resource Manager为master负责对各个NodeManager上的资源进行统一管理和调度、Node Manager为slave是每个节点上的资源和任务管理器。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的ApplicationMaster,它负责向ResourceManager申请资源,并要求NodeManger启动可以占用一定资源的任务。由于不同的ApplicationMaster被分布到不同的节点上,因此它们之间不会相互影响。如图中所示,YARN主要是由Resource Manager、NodeManager和ApplicationMaster组成:
1)Resource Manager
RM是全局的资源管理器,负责整个系统的资源管理和分片,主要又两个组件组成:调度器和应用程序管理器
2)Application Master
用户提交的每个应用程序均包含1个AM,主要功能包括
3)NodeManager
NM是每个节点上的资源和任务管理器,它不时向RM汇报本节点上的资源使用情况和各个Container的运行状态,同时也会接收并处理来自AM的启动或停止请求。
4)Container
Container是YARN中的资源抽象,封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当ApplicationMaster向ResourceManager申请资源时,返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。
当用户向YARN提交一个应用程序后,YARN分两个阶段运行该应用程序:第一阶段是启动ApplicationMaster;第二阶段是由ApplicationMaster创建应用程序,为它申请资源并监控整个运行过程,直至运行完成。
YARN工作流程如下:
HDFS全称Hadoop Distribute File System,是分布式计算中数据存储管理的基础,解决了海量数据的存储问题,具有高容错性、可扩展性,适合大数据量处理和流式批处理,可运行于廉价的服务器上。传统的HDFS架构采用master/slave架构,一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。
备注:HDFS分布式文件系统有关知识在“分布式文件系统HDFS概述”中详细介绍了,这里只做简单的描述。
本文主要介绍了分布式计算框架Hadoop的三大组件:MapReduce、YARN和HDFS。MapReduce是整个分布式计算的基础,完成分布式任务的数据拆分、归并排序和汇总工作;YARN是通用的资源调度框架,不仅仅局限于MapReduce,也支持Spark、Storm、Flume等在线和流式计算框架;HDFS作为分布式文件系统,支持大数据量的数据存储、高吞吐访问和横向扩展。
参考资料:
转载请注明原文地址:https://blog.csdn.net/solihawk/article/details/126067935
文章会同步在公众号“牧羊人的方向”更新,感兴趣的可以关注公众号,谢谢!