Hadoop技术内幕
文章平均质量分 63
阿松0311
这个作者很懒,什么都没留下…
展开
-
Task内部实现——Reduce Task内部实现
整体流程五个阶段shuffle阶段:也称为copy阶段,从各个Map Task上远程拷贝一片数据,如果大小超过阈值,落盘,否则放内存中Merge阶段:远程拷贝数据的同时,Reduce Task启动两个后台线程对内存和磁盘上的文件进行合并,防止内存使用过多或磁盘上文件过多。Sort阶段:按照MapReduce语义,用户编写的reduce()函数输入数据是按key聚集的一组数据,为了将key相同的数据聚在一起,hadoop采用了排序的策略,由于map task已经局部排序,因此,reduce tas原创 2021-12-03 11:59:33 · 163 阅读 · 0 评论 -
Task运行过程——Map Task内部实现
整体流程五个阶段Read阶段:Map Task通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/valueMap阶段:该阶段主要是将解析出的key/value交给用户编写的map()函数处理,并产生一系列新的key/valuecollect阶段:在用户编写的map()函数中,当数据处理完成后,会调用OutputCollectior.collect()输出结果,该函数会将生成的key/value分片(调用Pattitioner),并写入一个环形缓冲区中Spi原创 2021-12-03 11:35:21 · 650 阅读 · 0 评论 -
Task运行过程——基本数据结构和算法
IFile存储格式IFile是支持行压缩的存储格式。保存的是有序数据集,因为MapTask会根据key值进行排序。排序对于Map Task:将处理的结果暂时放到一个缓冲区中,当缓冲区使用率到达一定阈值后,再对缓冲区中的数据进行一次排序,并将这些有序数据以IFile文件形式写到磁盘中,而当数据处理完毕后,会对磁盘上所有文件进行一次合并,将小文件合并到一个大文件。对于Reduce Task:它从每个Map Task上远程拷贝相应的数据文件,如果文件大小超过一定阈值,则放到磁盘上,否则放到内存中,如果磁原创 2021-12-02 23:48:45 · 371 阅读 · 0 评论 -
Task运行过程——概述
应用程序分为Map和Reduce两阶段,分别由一个或多个Map Task和Reduce Task组成,每个Map Task处理输入数据集合中的一片数据(InputSplit),并将产生的若干个数据片段写到本地磁盘上,而Reduce Tsak则从每个Map Task上远程拷贝相应的数据片段,经分组聚集和归约后,将结果写到HDFS上作为最终结果。对于MapTask而言,运行过程为:通过用户提供的InputFormat将对应的InputSplit解析成一系列key/value,依次交给用户编写的map(.原创 2021-12-02 20:57:28 · 308 阅读 · 0 评论 -
TaskTracker内部原理——启动新任务
任务启动过程作业本地化本地化指在TaskTracker上为作业和任务构造一个运行环境,包括创建作业和任务的工作目录,从HDFS上下载运行任务相关的文件,可分为作业本地化和任务本地化。作业的第一个任务负责为该作业本地化,后续任务负责任务本地化。启动任务为了避免不同任务之间相互干扰,TaskTracker为各个任务启动了独立的JVM,JVM相当于包含一定资源量的容器,每个任务可在该容器内使用其资源运行。JVM启动过程:如果已启动JVM数目低于上限数目(Map slot或者Reduce slot数原创 2021-12-02 20:31:47 · 777 阅读 · 0 评论 -
TaskTracker内部原理——作业目录管理
MapReduce计算过程中,中间数据要落盘,但是这些数据不存在备份,一旦丢失,就要重新计算。所以为了提高数据的可靠性和并发写性能,Hadoop允许TaskTracker配置多个挂在不同磁盘的目录作为中间结果存放目录,对于任意一个作业,Hadoop会在每个磁盘中创建相同的目录结构,然后采用轮询策略使用这些目录(由类LocalDirAllocator实现)TaskTracker上的目录分两种:数据目录和日志目录,数据目录存放执行任务所必须的数据(比如jar包、作业配置文件)和运行中临时产生的数据;日志目录存原创 2021-12-02 20:12:49 · 131 阅读 · 0 评论 -
TaskTracker内部原理——行为分析
启动新任务TaskTracker出现空闲资源,将资源使用情况通过心跳汇报给JobTrackerJobTracker收到信息后,解析心跳信息,发现TaskTracker上有空闲资源,则调用调度器模块的assignTasks()函数为TaskTracker分配任务。JobTracker将新分配的任务封装成一个或者多个LaunchTaskAction对象,将其添加到心跳应答中返回给TaskTracker。TaskTracker收到心跳后,解析出LaunchTaskAction对象,创建JVM启动任务。原创 2021-12-02 17:44:37 · 377 阅读 · 0 评论 -
TaskTracker内部原理——TaskTracker启动过程和心跳机制
启动过程TaskTracker是一个独立的服务,有一个对应的main函数启动它。TaskTracker构造函数中初始化一些重要对象和线程,再run方法中维护一个与JobTracker的通信连接,以周期性地向JobTracker发送心跳并领取新的任务。变量初始化对象初始化心跳机制单次心跳发送TaskTracker会主动汇报信息并领取对应的命令,TaskTracker周期性向JobTracker汇报信息并领取任务形成心跳。状态发送TaskTracker发送的信息被封装到可序列化类Task原创 2021-12-01 22:30:42 · 599 阅读 · 0 评论 -
TaskTracker内部原理——概述
TaskTracker概述Tracker是JobTracker与Task之间的“沟通桥梁”,一方面,从JobTracker端接收并执行各种命令,比如运行任务、提交任务、杀死任务等等;另一方面,它将本节点上的各个任务状态通过周期性心跳汇报给JobTracker。Task Tracker实现两个功能:汇报心跳和执行命令汇报心跳:TaskTracker周期性将所在节点各种信息通过心跳机制汇报给JobTracker,包括,机器级别信息如节点健康状况、资源使用情况等;任务级别信息如任务执行进度、任务运行状态原创 2021-12-01 22:01:06 · 718 阅读 · 0 评论 -
JobTracker内部原理——Hadoop资源管理
Hadoop资源管理分两部分:资源表示模型和资源分配模型。资源表示模型:hadoop用槽位(slot)来组织各节点上的资源。hadoop将各个节点上的资源等量切分为若干份,每一份用一个slot表示,同时规定一个task可根据需要占用多个slot。slot也分map slot和reduce slot,可根据参数修改分配的slot数,节点的slot数回决定该节点的最大允许任务并发度。资源分配模型:由一个可插拔式的调度器完成。资源分配实际上的任务调度问题,是一个多目标优化问题,hadoop中,map ta原创 2021-12-01 21:18:32 · 747 阅读 · 0 评论 -
JobTracker内部原理—— 任务推测执行原理
啥是任务推测分布式集群环境下, 一个作业的多个任务可能运行速度不一致,可能出现某个任务拖后腿,拖慢整个进度,为了避免这种情况,hadoop采用了推测执行机制(speculative execution) , 根据一定法则推测出拖后腿的任务,并为此任务启动一个备份任务,让该任务与原始任务同时处理同一份数据,并最终选用最先成功运行完成任务的计算结果作为最终结果。任务推测的算法:1.0.0版本和0.21.0版本都有对应的算法,但是在2.0版本后采用了和之前不一样的推测执行机制,它重点关注新启动的备份任务原创 2021-12-01 19:35:02 · 175 阅读 · 0 评论 -
JobTracker内部原理—— 容错机制
JobTracker容错三种级别的恢复机制:级别由低到高作业级别任务级别记录级别级别越低,实现越简单,但造成的资源浪费越严重。1.0版本以前,hadoop采用任务级别的恢复机制,基于事务型日志完成作业恢复的。它只关注两种任务:运行完成的和未运行完成的。作业运行过程中,JobTracker会以日志形式将作业以及任务状态记录下来,一旦重启,则可从日志中恢复作业的运行状态,未开始运行的要重新运行,实现比较复杂。0.21.0版本开始,hadoop采用作业级别的恢复机制,当JobTracker重原创 2021-12-01 17:22:04 · 153 阅读 · 0 评论 -
JobTracker内部原理——Job和Task运行时的信息维护
作业描述模型”三叉树“作业描述方式:JobTracker为每个作业创建一个JobInProgress对象以跟踪和监控其运行状态,该对象存在于作业整个运行过程,作业提交时就创建,作业运行完成时就销毁。同时,为了采用分治的策略解决问题,JobTracker将每个作业拆分成若干个任务,并为每个任务创建一个TaskInProcess对象以跟踪和监控其运行状态,任务运行可能失败,JobTracker会按照一定的策略重新运行,所以每个任务可能尝试多次,直到成功,JobTracker每运行一次任务称为一次”任务运原创 2021-12-01 15:58:28 · 179 阅读 · 0 评论 -
JobTracker内部原理——心跳接收与应答
心跳实际上是一个RPC函数。TaskTracker周期性调用该函数汇报节点和任务状态信息,形成心跳。三个作用:判断TaskTracker是否活着及时让JobTracker获取各个节点上的资源使用情况和任务运行状态。为TaskTracker分配任务。TaskTracker周期性调用RPC函数heartbeat向JobTracker汇报信息和领取任务public synchronized HeartbeatResponse heartbeat(TaskTrackerStatus status原创 2021-11-30 23:47:52 · 297 阅读 · 0 评论 -
JobTracker内部实现——JobTracker启动过程
概述JobTrakcer包含一个main函数,main函数中有两行启动JobTracker的核心代码:JobTracker tracker = startTracker(new JobConf());//创建JobTracker对象tracker.offerService(); //启动各个服务重要对象初始化跟踪startTracker()函数内部,它最终创建了一个JobTracker对象,该对象对一些重要对象进行了初始化。ACLsManager类:权限管理类,提供了checkAccess原创 2021-11-30 21:13:06 · 765 阅读 · 0 评论 -
MapReduce核心设计(四)—— JobTracker内部实现
这部分没去追源码,纯看理论了概述JobTracker主要负责作业控制和资源管理。作业控制负责作业 的分解和状态监控,主要作用:容错和为任务调度提供决策依据。JobTracker再内部以“三层多叉树”的方式描述和跟踪每个作业的运行状态,作业被抽象为三层,从上往下依次:作业监控层-任务监控层-任务执行层。在作业监控层,每个作业由一个JobInProgress(JIP)对象描述和跟踪其整体运行状态以及每个任务的运行情况;任务监控层,每个任务由一个TaskInProgress(TIP)对象描述和跟踪其状态原创 2021-11-30 20:42:34 · 413 阅读 · 0 评论 -
MapReduce核心设计(三)—— 作业提交与初始化过程分析
三个组件JobClient(准备运行环境)JobTracker(接收作业)TaskTracker(初始化作业)注意,本书写的是1.x版本,hadoop2.x版本以及使用yarn来管理了,没有JobTracker和TaskTracker了新旧Hadoop MapReduce框架对比1、客户端不变,其调用API及接口大部分保持兼容,这也是为了开发使用者透明化,对原码不必做大的改变,但是原框架的JobTracker和TaskTracker不见了,取而代之的是ResourceManager App.原创 2021-11-30 19:54:26 · 298 阅读 · 0 评论 -
MapReduce核心设计(二)—— MapReduce通信协议
在Hadoop MapReduce中,不同组件之间的通信协议均基于RPC。MapReduce框架中有6个主要的通信协议,面向Client4个,MapReduce框架内部2个。分别是:JobSubmissionProtocol:Client与JobTracker之间的通信协议。用户通过该协议提交作业,查看作业运行情况。RefreshUserMappingsProtocol:Client通过该协议更新用户-用户组映射关系。RefreshAuthorizationPolicyProtocol:Cli原创 2021-11-30 15:28:07 · 668 阅读 · 0 评论 -
MapReduce核心设计(一)—— Hadoop RPC框架
Hadoop RPC分为四部分序列化层:将结构化对象在转为字节流以便通过网络传输或写入持久存储。在RPC框架中,主要用于将用户请求中的参数或者应答转化为字节流以便跨机器传输。函数调用层:定位要调用的函数并执行该函数,Hadoop RPC采用Java反射机制与动态代理实现函数调用。网络传输层:描述Client与Server之间消息传输的方式,Hadoop RPC采用了基于TCP/IP的Socket机制。服务器端处理框架:可被抽象为网络I/O模型,描述了客户端与服务器端间信息交互的方式,它的设计直接决原创 2021-11-29 21:48:28 · 212 阅读 · 0 评论 -
MapReduce核心设计--介绍
这个部分主要学习以下内容:Hadoop RPC框架作业提交和初始化过程分析JobTracker内部实现TaskTracker内部实现Task运行过程分析原创 2021-11-29 19:18:04 · 142 阅读 · 0 评论 -
MapReduce编程模型
概述MR分布式计算框架,应用场景有个共同特点:任务可被分解为相互独立的子问题。所以MR编程模型的分布式编程方法,5步:迭代:遍历输入数据,解析为kv对映射:输入kv对映射为其他kv对分组:根据key对中间数据进行分组(grouping)归约:以组为单位对数据进行归约(reduce)迭代:最终产生的kv对保存到输出文件中MR API 基本概念序列化:主要作用两个,永久存储和进程间通信。输入输出数据中的key和value都要是可序列化的,在Hadoop MapReduce中,使一个Ja原创 2021-11-29 17:33:48 · 543 阅读 · 0 评论 -
MR作业的生命周期
五步骤步骤一:作业提交和初始化提交作业,JobClient实例将作业相关信息,比如程序jar包、作业配置文件、分片元信息文件(记录了每个输入分片的逻辑位置信息)等上传到HDFS上。JobClient通过RPC通知JobTrackerJobTracker收到新作业提交请求后,由作业调度模块对作业进行初始化:为作业创建一个JobInProgress对象以跟踪作业运行状况,而JobInProgress则会为每个Task创建一个TaskInProgress对象以跟踪每个任务的运行状态,TaskInPr.原创 2021-11-28 20:15:41 · 476 阅读 · 0 评论 -
深入解析MapReduce架构设计与实现原理
打算一周看完这本书立个flag要有输出原创 2021-11-27 21:51:43 · 281 阅读 · 0 评论 -
深入理解MapReduce架构设计与实现原理--目录结构
12章1-2章:hadoop源代码的组织结构、获取、编译、调试、阅读环境搭建,以及mapreduce的设计理念和基本架构。3章:mapreduce的编程接口,hadoop的工作流4-8章:mapreduce的运行时环境,包括rpc框架、客户端、JobTracker、TaskTracker和Task内部实现细节和机制剖析9-12章:hadoop性能优化、多用户作业调度器、安全机制和下一代mapreduce框架等高级主题...原创 2021-11-27 21:57:30 · 303 阅读 · 0 评论