
Hadoop 3.2.1 源码
文章平均质量分 88
Hadoop 3.2.1 源码分析
张伯毅
某厂技术,Apache DolphinScheduler Committer.
专注于调度&实时&大数据体系~
展开
-
Hadoop3.2.x HDFS源码分析目录汇总 [完结]
Hadoop3.2.0 源码编译 [一]MAC版本: Hadoop3.2.0 源码编译 [ 二 ]Hadoop3.2.0 源码分析: SHELL启动脚本 DEBUG 模式Hadoop3.2.0 源码分析: namenode 启动Hadoop3.2.0 源码分析: datanode 启动Hadoop3.2.0 源码分析: ResourceManager启动Hadoop3.2.0 源码分析: NodeManagerHadoop3.2.0 源码分析: Container 之...原创 2020-09-27 09:28:38 · 13821 阅读 · 2 评论 -
Hadoop3.2.1 RPC通讯 一锅端
下面是最近整理的关于Hadoop3.2.1 RPC 的通讯文章汇总,以及我最后画的一张从Client端请求到Server端的流程图.有什么不对的地方,欢迎指正...Hadoop3.2.1 【 HDFS 】源码分析 : RPC实现 [一] proto接口协议Hadoop3.2.1 【 HDFS 】源码分析 : RPC实现 [二] 概述&使用Hadoop3.2.1 【 HDFS 】源码分析 : RPC原理 [三] 概述&原理Hadoop3.2.1 【 HDFS 】源...原创 2020-06-21 23:08:28 · 11213 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : LinuxContainerExecutor 浅析 [ 二 ]
111原创 2021-07-04 16:02:48 · 1305 阅读 · 2 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ResourceLocalizationService解析
org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer原创 2021-02-12 20:29:30 · 1126 阅读 · 1 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : DeletionService解析
一 .前言NodeManager将文件删除功能服务化,即提供一个专门的文件删除服务异步删除失效文件, 这样可避免同步删除文件带来的性能开销二 .属性 // 延迟 private int debugDelay; // ContainerExecutor private final ContainerExecutor containerExecutor; //存储 private final NMStateStoreService stateStore; // 线程池原创 2021-02-05 23:58:19 · 407 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : LinuxContainerExecutor 浅析 [ 一 ]
一 .前言而LinuxContainerExecutor则以应用程序拥有者的身份启动和停止Container, 因此更加安全, 此外, LinuxContainerExecutor允许用户通过Cgroups对CPU资源进行隔离 .与DefaultContainerExecutor的逻辑类似, 但不同之处是它以应用程序所属用户身份运行该脚本, 这是通过调用一个采用C语言实现的setuid可执行程序container-executor完成的。 LinuxContainerExecutor 是Hadoop引入原创 2021-02-03 00:52:15 · 850 阅读 · 0 评论 -
Hadoop 3.2.1 【 YARN 】源码分析 : DefaultContainerExecutor 浅析
一 .前言DefaultContainerExecuter 类提供通用的container 执行服务. 负责启动Container . 是默认实现, 未提供任何权安全措施, 它以NodeManager启动者的身份启动和停止Container;流程执行是以独立于平台的方式通过 . 其实主要是执行launch_container.sh 脚本.主要注意的是两个地方:其实就是构造并执行launch_container.sh 脚本. 在脚本里有需要执行的任务.launch_container.sh 脚本原创 2021-02-02 21:53:09 · 1141 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ContainerExecutor 浅析
一. 前言用于在底层操作系统上启动container的机制的抽象类。 所有的executor 必须继承ContainerExecutor.ContainerExecutor可与底层操作系统交互, 安全存放Container需要的文件和目录, 进而以一种安全的方式启动和清除Container对应的进程。 目前,YARN提供了DefaultContainerExecutor和LinuxContainerExecutor两种实现。 其中,DefaultContainerExecutor是默认实现, 未提供任何原创 2021-01-28 22:55:04 · 1055 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ContainerLaunch源码浅析
一. 前言ContainerLaunch组件为Container创建工作目录和构造执行脚本, 并通知ContainerExecutor执行该脚本, 使得Container进入RUNNING状态二. xxx三.xxx四.xxx五.xxx六.xxx原创 2021-01-27 20:03:42 · 850 阅读 · 2 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : RMAppManager 浅析
This class manages the list of applications for the resource manager.一. 前言RMAppManager负责应用程序的启动和关闭。ClientRMService收到来自客户端的提交应用程序请求后, 将调用函数RMAppManager#submitApplication创建一个RMApp对象,它将维护这个应用程序的整个生命周期, 从开始运行到最终结束 ; 当RMApp运行结束后, 将向RMAppManager发送一个RMAppMan.原创 2021-01-26 20:18:06 · 1102 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ResourceTrackerService 浅析
This is used by the Node Manager to register/nodeHeartbeat/unregister with the ResourceManager.一. 前言处理来自NodeManager的请求, 主要包括注册和心跳两种请求, 其中, 注册是NodeManager启动时发生的行为, 请求包中包含节点ID、 可用的资源上限等信息; 而心跳是周期性行为, 包含各个Container运行状态, 运行的Application列表、 节点健康状况(可通过一个脚本设置).原创 2021-01-26 20:17:49 · 1057 阅读 · 1 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ContainerManager浅析
一. 前言Container启动命令是由各个ApplicationMaster通过RPC函数ContainerManagementProtocol#startContainer向NodeManager发起的,NodeManager中的ContainerManager组件(组件实现为ContainerManagerImpl) 负责接收并处理该请求。...原创 2021-01-26 20:17:19 · 1727 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ContainersLauncher源码浅析
一. 前言二.三.四.五.六.七.原创 2021-01-26 20:17:01 · 1008 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ApplicationMasterLauncher
一.前言用户向YARN ResourceManager提交应用程序, ResourceManager收到提交请求后, 先向资源调度器申请用以启动ApplicationMaster的资源, 待申请到资源后,再由ApplicationMasterLauncher与对应的NodeManager通信, 从而启动应用程序的ApplicationMaster。二. 属性一共有四个主要属性.其中最重要的就三个.masterEvents : 阻塞式队列launcherPool: 工作线程池launche原创 2021-01-25 03:10:08 · 895 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ApplicationMasterService 源码浅析 [ 二 ]
一. 前言ApplicationMasterService在执行registerApplicationMaster , finishApplicationMaster , allocate这三个方法的时候,都调用了amsProcessingChain中对应的方法, 所以我们看来一下amsProcessingChain到底干了啥.二. 数据结构AMSProcessingChain 实现了ApplicationMasterServiceProcessor 接口 , 一共三个方法.init 初始化re原创 2021-01-24 20:05:12 · 1060 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ApplicationMasterService 源码浅析 [ 一 ]
一. 前言处理来自ApplicationMaster的请求, 主要包括注册和心跳两种请求, 其中, 注册是ApplicationMaster启动时发生的行为, 注册请求包中包含ApplicationMaster启动节点; 对外RPC端口号和tracking URL等信息; 而心跳则是周期性行为, 汇报信息包含所需资源描述、 待释放的Container列表、 黑名单列表等, 而AMS则为之返回新分配的Container、 失败的Container、 待抢占的Container列表等信息。二. 接口协议原创 2021-01-23 16:22:17 · 1175 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : 程序文件目录结构管理概述
一. 前言NodeManager上的Container运行任务时通常会将一些临时数据写到本地磁盘上.且不同Container之间往往并行向磁盘写数据, 这会因占用大量IO资源进而相互干扰。 为了避免以上这些问题, 尽量提高写数据的可靠性和并发写性能, YARN允许NodeManager配置多个挂在不同磁盘的目录作为中间结果存放目录。 对于任意一个应用程序, YARN会在每个磁盘中创建相同的目录结构, 然后采用轮询策略使用这些目录.NodeManager上的目录可分为两种: 数据目录和日志目录, 其中数原创 2021-01-20 21:53:17 · 1388 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : 程序文件分布式缓存机制概述
一. 前言在YARN中, 分布式缓存是一种分布式文件分发与缓存机制,主要作用是将用户应用程序执行时所需的外部文件资源自动透明地下载并缓存到各个节点上, 从而省去了用户手动部署这些文件的麻烦。二. 工作流程YARN分布式缓存工作流程具体如下:步骤1 客户端将应用程序所需的文件资源(外部字典、 JAR包、 二进制文件等) 提交到HDFS上。步骤2 客户端将应用程序提交到ResourceManager上。步骤3 ResourceManager与某个NodeManager通信, 启动应用程序A原创 2021-01-20 21:51:47 · 1474 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : NodeStatusUpdaterImpl概述
一. 前言NodeStatusUpdater是NodeManager与ResourceManager通信的唯一通道。 当NodeManager启动时, 该组件负责向ResourceManager注册, 并汇报节点上总的可用资源( 该值在运行过程中不再汇报) ; 之后, 该组件周期性与ResourceManager通信, 汇报各个Container的状态更新, 包括节点上正运行的Container、 已完成的Container等信息, 同时ResourceManager会为之返回待清理Container列表原创 2021-01-17 23:06:42 · 3702 阅读 · 2 评论 -
对象存储入门 [ minIo ozone ]
一. 前言OSS(Object Storage Service)俗称对象存储,主要提供图片、文档、音频、视频等二进制文件的海量存储功能。目前除了公有云提供对象存储服务外,一般私有云比较关心一些开源的分布式对象存储解决方案。公有云一般都提供对象存储服务,如阿里云的OSS,华为云的OBS,腾讯云的COS。一些开源的对象存储都会遵循Amazon s3协议。Amazon s3协议定义了操作对象存储的Resestfull风格的API。通过在pom中引用aws-java-sdk-s3可以实现对存储的操作。原创 2021-01-07 21:34:12 · 3513 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : 节点健康状况检测
一. 前言节点健康状况检测是NodeManager自带的健康状况诊断机制, 通过该机制,NodeManager可时刻掌握自己的健康状况, 并及时汇报给ResourceManager。 而ResourceManager则根据每个NodeManager的健康状况适当调整分配的任务数目。 当NodeManager认为自己的健康状况“欠佳”时, 可通知ResourceManager不再为之分配新任务, 待健康状况好转时, 再分配任务。 该机制不仅可帮助及时发现存在问题的NodeManager, 避免不必要的任务分原创 2021-01-04 03:04:32 · 2190 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : AsyncDispatcher概述
一. 前言YARN采用了基于事件驱动的并发模型, 该模型能够大大增强并发性, 从而提高系统整体性能。 为了构建该模型, YARN将各种处理逻辑抽象成事件和对应事件调度器, 并将每类事件的处理过程分割成多个步骤, 用有限状态机表示。整个处理过程大致为: 处理请求会作为事件进入系统, 由中央异步调度器(AsyncDispatcher) 负责传递给相应事件调度器(Event Handler) 。 该事件调度器可能将该事件转发给另外一个事件调度器, 也可能交给一个带有有限状态机的事件处理器, 其处理结果也以原创 2021-01-03 19:02:22 · 910 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : NodeManager概述
一. 前言NodeManager是运行在单个节点上的代理, 它需要与应用程序的ApplicationMaster和集群管理者ResourceManager交互: 从ApplicationMaster上接收有关Container的命令并执行之(比如启动、 停止Container) ; 向ResourceManager汇报各个Container运行状态和节点健康状况, 并领取有关Container的命令(比如清理Container) 执行之.NodeManager(NM) 是YARN中单个节点上的代理, 它原创 2021-01-02 22:14:50 · 1736 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : RMApp状态机浅析
一. 前言在YARN中, 如果一个对象由若干个状态以及触发这些状态发生转移的事件构成, 它将被抽象成在这里插入代码片一个状态机, 在YARN ResourceManager内部, 共有4类状态机, 分别是RMApp、 RMAppAttempt、 RMContainer和RMNode。其中, 前2类状态机维护了一个应用程序相关的生命周期, 包括Application生命周期、 一次运行尝试的生命周期;RMContainer则维护了分配出去的各个资源的使用状态; RMNode维护了一个NodeManage原创 2020-12-31 10:34:14 · 1543 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : StateMachineFactory解析[二]
一. 前言RMNode是ResourceManager中用于维护一个节点生命周期的数据结构, 它的实现是RMNodeImpl类, 该类维护了一个节点状态机, 记录了节点可能存在的各个状态以及导致状态间转换的事件。 当某个事件发生时, RMNodeImpl会根据实际情况进行节点状态转移, 同时触发一个行为。在这里我们拿RMNodeImpl 查看一下构建后状态机的数据存储结构. 具体的状态不做说明, 先看一下RMNodeImpl流程图.二 . StateMachineFactory构建代码在实现类里面有原创 2020-12-30 20:29:53 · 974 阅读 · 2 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : StateMachineFactory解析[一]
一. 事件处理模型YARN采用了基于事件驱动的并发模型, 该模型能够大大增强并发性, 从而提高系统整体性能。 为了构建该模型, YARN将各种处理逻辑抽象成事件和对应事件调度器, 并将每类事件的处理过程分割成多个步骤, 用有限状态机表示。整个处理过程大致为: 处理请求会作为事件进入系统, 由中央异步调度器(AsyncDispatcher) 负责传递给相应事件调度器(Event Handler) 。 该事件调度器可能将该事件转发给另外一个事件调度器, 也可能交给一个带有有限状态机的事件处理器, 其处理结原创 2020-12-29 02:50:28 · 1165 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : RMNode状态机浅析
一. 前言ResourceManager中用来维护一个节点生命周期的数据结构是RMNode。 RMNode记录了节点可能存在的各个状态, 由RMNodeImpl类实现, 各状态之间的转换由事件触发。二.RMNode状态机2.1. RMNode状态机概述RMNode是ResourceManager中用于维护一个节点生命周期的数据结构, 它的实现是RMNodeImpl类, 该类维护了一个节点状态机, 记录了节点可能存在的各个状态以及导致状态间转换的事件。 当某个事件发生时, RMNodeImpl会根据实原创 2020-12-31 14:13:59 · 888 阅读 · 0 评论 -
Hadoop3.2.x YARN源码分析目录汇总 [持续更新中....]
Hadoop3.2.x YARN源码分析目录汇总如下:Hadoop3.2.1 【 YARN 】源码分析 : RPC通讯解析Hadoop3.2.1 【 YARN 】源码分析 : ResourceManager 浅析Hadoop3.2.1 【 YARN 】源码分析 : ClientRMService 浅析Hadoop3.2.1 【 YARN 】源码分析 : AdminService 浅析Hadoop3.2.1 【 YARN 】源码分析 : ApplicationMaster 浅析Hadoop3.2原创 2020-12-28 09:26:38 · 2208 阅读 · 0 评论 -
Hadoop3.2.1状态机图生步骤.
1. 进入项目目录, 执行命令mvn compile -Pvisualize2. 安装指令(mac 版本)brew install graphviz3. 执行转换操作dot -Tpng ResourceManager.gv > ResourceManager.pngdot -Tpng NodeManager.gv > NodeManager.pngdot -Tpng MapReduce.gv> MapReduce.png4. ResourceManager图原创 2020-12-16 23:20:44 · 7976 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ResourceManager # Application管理
一.前言在YARN中, Application是指应用程序, 它可能启动多个运行实例, 每个运行实例由一个ApplicationMaster与一组该ApplicationMaster启动的任务组成, 它拥有名称、 队列名、优先级等属性, 是一个比较宽泛的概念, 可以是一个MapReduce作业、 一个DAG应用程序, 甚至可以是一个Storm集群实例。YARN中Application管理涉及应用程序的权限管理、启动与关闭、 生命周期管理等…二. ApplicationACLsManagerAppl原创 2020-12-15 17:15:01 · 8447 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ResourceManager # NodeManager 浅析
一. 前言NodeManager管理部分主要由三个服务构成, 分别是NMLivelinessMonitor、 NodesListManager和ResourceTrackerService, 它们共同管理NodeManager的生存周期 .二. NMLivelinessMonitor该服务周期性遍历集群中所有NodeManager, 如果一个NodeManager在一定时间(可通过参数yarn.nm.liveness-monitor.expiry-interval-ms配置, 默认为10min) 内未原创 2020-12-14 01:30:30 · 8946 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ApplicationMaster 浅析
一 . 前言ApplictionMaster管理部分主要由三个服务构成, 分别是ApplicationMasterLauncher、AMLivelinessMonitor和ApplicationMasterService, 它们共同管理应用程序的ApplicationMaster的生存周期。二 . 整体流程步骤1 : 用户向YARN ResourceManager提交应用程序, ResourceManager收到提交请求后, 先向资源调度器申请用以启动ApplicationMaster的资源, 待原创 2020-12-13 20:09:21 · 2247 阅读 · 0 评论 -
hadoop3.2.1版本docker编译报错 : [ Unable to locate package ghc ]
一.前言最近在用docker编译3.2.1版本的haodop代码的时候,发现 ghc 这个依赖无法下载.报错信息如下:Step 34/49 : RUN apt-get install -y ghc && apt-get -q update && apt-get -q install -y --no-install-recommends shellcheck && apt-get clean && rm -rf原创 2020-12-12 23:50:09 · 1525 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : AdminService 浅析
一. 前言AdminService是一个RPC Server [ 8033端口 ], 但它的服务对象是管理员。 在YARN中, 管理员列表由属性yarn.admin.acl指定(在yarn-site.xml中设置) , 默认情况下, 属性值为“*”, 表示所有用户都是管理员。 从实现角度看,它是一个实现了ResourceManagerAdministrationProtocol协议的服务在ResourceManager中, ClientRMService和AdminService两个服务分别负责处理来自原创 2020-12-11 17:47:54 · 1473 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ClientRMService 浅析
一. 前言在ResourceManager中, ClientRMService和AdminService两个服务分别负责处理来自普通用户和管理员的请求, 需要注意的是, 之所以让这两类请求通过两个不同的通信通道发送给ResourceManager, 是因为要避免普通用户请求过多导致管理员请求被阻塞而迟迟得不到处理。二.ClientRMServiceClientRMService是一个RPC Server, 为来自客户端的各种RPC请求提供服务。它实现了ApplicationClientProtoco原创 2020-12-11 00:24:59 · 1463 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : ResourceManager 浅析
一.前言在YARN中, ResourceManager负责集群中所有资源的统一管理和分配, 它接收来自各个节点(NodeManager) 的资源汇报信息, 并把这些信息按照一定的策略分配给各个应用程序(实际上是ApplicationMaster) 。二. ResourceManager通讯❑ ResourceTracker [8031]: NodeManager通过该RPC协议向ResourceManager注册、 汇报节点健康状况和Container运行状态, 并领取ResourceManager原创 2020-12-09 00:41:54 · 1548 阅读 · 0 评论 -
Hadoop3.2.1 【 YARN 】源码分析 : RPC通讯解析
一.前言远程过程调用(Remote Procedure Call, RPC) 是一个计算机通信协议。 该协议允许运行于一台计算机的程序调用另一台计算机的子程序, 同时将网络的通信细节隐藏起来,而程序员无需额外地为这个交互作用编程。作为一个分布式系统, Hadoop实现了自己的RPC通信协议, 它是上层多个分布式子系统(MR、 YARN、 HDFS等) 的公用网络通信模块, 保证其轻量级、 高性能。典型的RPC框架, 主要包括以下几个部分。( 1) 通信模块: 主要是请求-应答协议, 包括同步方式和原创 2020-12-07 03:08:36 · 2133 阅读 · 2 评论 -
Hadoop3.2.1 【 HDFS 】源码分析 : DirectoryScanner 实现
一. 前言DirectoryScanner的主要任务是定期扫描磁盘上的数据块, 检查磁盘上的数据块信息是否与FsDatasetImpl中保存的数据块信息一致, 如果不一致则对FsDatasetImpl中的信息进行更新。 注意, DirectoryScanner只会检查内存和磁盘上FINALIZED状态的数据块是否一致二....原创 2020-11-29 01:04:44 · 3425 阅读 · 0 评论 -
Hadoop3.2.1 【 HDFS 】源码分析 : BlockScanner & VolumeScanner 实现
一. 前言每个Datanode都会初始化一个数据块扫描器周期性地验证Datanode上存储的所有数据块的正确性, 并把发现的损坏数据块报告给Namenode。 BlockScanner类就是Datanode上数据块扫描器的实现。二.BlockScannerBlockScanner中有一个属性scanners 用于存放BlockScanner所要监控的VolumeScanner对象. 然后VolumeScanner会启动线程来监控block状态.addVolumeScanner ,removeVolum原创 2020-11-25 17:17:52 · 3410 阅读 · 0 评论 -
Hadoop3.2.1 【 HDFS 】源码分析 : 写数据
一. 前言DataTransferProtocol.write()方法给出了写操作的接口定义, 操作码是80, DataXceiver.writeBlock()则真正实现了DataTransferProtocol.writeBlock()方法。HDFS使用数据流管道方式来写数据。 DFSClient通过调用Sender.writeBlock()方法触发一个写数据块请求, 这个请求会传送到数据流管道中的每一个数据节点, 数据流管道中的最后一个数据节点会回复请求确认, 这个确认消息逆向地通过数据流管道送回D原创 2020-11-25 01:27:44 · 3681 阅读 · 0 评论