HDFS(Hadoop Distributed File System)的资源调度主要通过YARN(Yet Another Resource Negotiator)来实现。YARN是一个资源调度平台,负责为运行在Hadoop集群上的应用程序提供资源管理和调度服务。以下是HDFS资源调度的实现方式:
YARN架构和资源调度简介
- ResourceManager:处理客户端请求,监控NodeManager的启动或监控ApplicationMaster资源的分配与调度,包含调度器(Scheduler)、应用程序管理器(ApplicationsManager)。
- NodeManager:管理单个节点上的资源,处理来自ResourceManager的命令,处理来自ApplicationMaster的命令。
- ApplicationMaster:为应用程序申请资源并分配内部任务,任务的监控与容错。
- Container:YARN资源的抽象封装,某个节点的多维度资源(内存、CPU、磁盘、网络等),Task都是在一个容器里执行完成的,容器大小可以动态调整。
工作机制
- 客户端提交MapReduce作业到客户端所在的节点,YARN Runner向ResourceManager申请一个Application。
- ResourceManager将该应用程序的资源路径返回给YARN Runner,程序将运行所需资源提交到HDFS上。
- 程序资源提交完毕后,申请运行MapReduce AppMaster。
- ResourceManager将用户的请求初始化成一个Task,其中一个NodeManager领取到Task任务,该NodeManager创建Container,并产生MapReduce AppMaster。
- Container从HDFS上拷贝资源到本地,MapReduce AppMaster向ResourceManager申请运行MapTask资源,ResourceManager将运行MapTask任务分配给另外两个NodeManager,这两个NodeManager分别领取任务并创建Container。
- Map向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
- MapReduce AppMaster等待所有MapTask运行完毕后,向ResourceManager申请容器,运行ReduceTask。
- ReduceTask向MapTask获取相应分区的数据,程序运行完毕后,MapReduce AppMaster会向ResourceManager申请注销自己。
调度器和调度算法
目前,Hadoop作业调度器主要有三种:FIFO(先进先出)、Capacity Scheduler和Fair Scheduler。
- FIFO:按照作业提交的顺序执行任务,简单但可能导致资源浪费。
- Capacity Scheduler:为不同的队列分配固定比例的资源,保证资源的合理利用和作业的公平执行。
- Fair Scheduler:根据队列的资源需求和作业的历史资源使用情况进行资源分配,更加公平。
通过上述机制,HDFS能够有效地管理和调度集群资源,确保数据的高可用性、可靠性和高效性。