一.Hadoop概述
Hadoop处理的问题和关系型数据库的对比:
一个MapReduce作业包含了输入数据,MapReduce程序和配置信息,由map任务和reduce任务两类任务构成。Hadoop为每个分片(split,默认128MB)创建一个map任务,来处理分片中的每条记录。Hadoop优先在有HDFS数据的节点上运行map任务,可以节省宽带,获得最佳性能,其次在同一机架上的节点运行。
clipboard.png
注意:map任务的输出结果是保存到本地磁盘,而不是HDFS,当作业完成后,map的输出结果即可删除.
clipboard.png
二、YARN
YARN在在Hadoop框架中的位置
rwerawtr.png
YARN的核心服务有资源管理器(Resource Manager)和节点管理器(Node Manager)构成
sdfsgsg.png
步骤说明:
1.用 户 向 YARN 中 提 交 应 用 程 序( Application Master 程 序、 启 动Application Master 的命令、用户程序等);
2.ResourceManager 为该应用程序分配第一个 Container,并与对应的 NodeManager 通信,要求它在这个 Container 中启动应用程序的 ApplicationMaster;
3.ApplicationMaster 首 先 向 ResourceManager 注 册, 这 样 用 户 可 以 直 接 通 过ResourceManager 查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤 4~7;
4.ApplicationMaster 采用轮询的方式通过 RPC 协议向ResourceManager 申请和领取资源;
5.一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求它启动任务;
6.NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务;
7.各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;在应用程序运行过程中,用户可随时通过 RPC 向 ApplicationMaster 查询应用程序的当前运行状态。
8.应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己。
clipboard.png
三、Hadoop RPC
RPC Server主要使用了线程池、事件驱动和Reactor设计模式等提高并发处理能力的技术。
clipboard.png
说明:
1.整个Server只有一个Listener线程,统一负责监听来自客户端的连接请求,当监听到新的客户端请求到达后,Server采用轮询的方式从线程池(Reader Pool)中选择一个Reader线程进行处理,Reader来接收客户端连接的RPC请求;
2.考虑到某些函数调用返回结果很大或者网络速度过慢,可能难以将结果一次性发送到客户端,此时 Handler 将尝试着将后续发送任务交给 Responder 线程。
Hadoop RPC的主要参数:
1.Reader 线程数目。 默认为1,可通过ipc.server.read.threadpool.size配置;
2.每个 Handler 线程对应的最大 Call 数目。ipc.server.handler.queue.size配置,默认值是100,如果 Handler 数目为 10,则整个 Call 队列(即共享队列 callQueue)最大长度为:100×10=1000;
3.Handler 线程数目。的 Handler 数目分别由参数 yarn.resourcemanager.resource-tracker.client.thread-count 和 dfs.namenode.service.handler.count 指定,默认值分别为 50 和 10,当集群规模较大时,这两个参数值会大大影响系统性能。
4.客户端最大重试次数。数由参数 ipc.client.connect.max.retries 指定,默认值为 10,也就是会连续尝试 10 次(每两次之间相隔 1 秒)。
YARN application用到的3个RPC协议,ApplicationClientProtocol,ApplicationMasterProtocol和ContainerManagementProtocol
clipboard.png
四、ResourceManager
主要职责:
1.与客户端交互,处理来自客户端的请求;
2.启动和管理ApplicationMaster,并在失败的时候重启它;
3.管理NodeManger,接收来自NodeManager的心跳信息,并向NodeManager下达管理命令;
4.资源管理和调度,接收来自ApplicationMaster的资源请求,并分配资源。
ResourceManager的内部架构:
clipboard.png
五、Hadoop HA基本框架:
Hadoop HA采用共享存储的HA解决方案,即Active节点不断地将信息写入到共享存储系统,而StandBy节点不断地读取这些信息,从而保持二者的内存信息同步。HA的主备切换分为手动模式和自动模式。
1.手动模式框架:
clipboard.png
2.自动模式框架:
clipboard.png
说明:
ZKFailoverCOntroller是基于Zookeeper实现切换控制,ActiveStandbyElector负责与Zookeeper集群交互,通过尝试获取全局锁,以判断所管理的Master是进入Active还是进入Standby状态,HealthMonitor负责监控各个Master的状态,以根据它们状态进行切换。Zookeeper是通过维护一把全局锁控制整个集群有且仅有一个Active Master,避免脑裂。
六、YARN资源调度
YARN采用了双层资源调度模型
第一层:ResourceManager中的资源调度器将资源分配给各个ApplicationMaster·;
第二层:ApplicationMaster再进一步将资源分配给内部的各个task。
clipboard.png
YARN有三种调度器可用:FIFO调度器(First IN First Out Scheduler)、容量调度器(Capacity Scheduler)、公平调度器(Fair Scheduler)
clipboard.png clipboard.png clipboard.png
clipboard.png
七、NodeManager
NodeManager的主要功能是管理Hadoop集群中的单个计算节点,包括与ResourceManager保持通信、管理COntainer的生命周期、监控每个Container的资源使用情况,追踪节点健康状况、管理日志等。
clipboard.png
1.分布式缓存机制
Hadoop 将文件缓存到各个NodeManager节点的本地磁盘上、当NodeManager收到启动任务请求后,如果文件已经在本地磁盘上,则可以直接运行任务,否则等待文件缓存到本地磁盘后再启动。NodeManager采用LRU算法定期清理过期的缓存文件。
八、Container的生命周期
Container的三个阶段:
1.资源本地化:主要工作是初始化各种服务组件、创建工作目录、从HDFS下载所需的各种资源(文本文件,JAR、可执行文件)等,即主要是前面完成的分布式缓存机制完成的工作。
clipboard.png clipboard.png
2.Container启动:即ContainersLauncher服务调用插拔式组件ContainerExecutor;
clipboard.png
3.资源清理:即阶段1的逆过程,由ResourceLocalizationService负责。
clipboard.png
网友评论