随笔分类 -  hadoop

【hadoop代码笔记】Mapreduce shuffle过程之Map输出过程
摘要:一、概要描述 shuffle是MapReduce的一个核心过程,因此没有在前面的MapReduce作业提交的过程中描述,而是单独拿出来比较详细的描述。 根据官方的流程图示如下:本篇文章中只是想尝试从代码分析来说明在map端是如何将map的输出保存下来等待reduce来取。 在执行每个map task时,无论map方法中执行什么逻辑,最终都是要把输出写到磁盘上。如果没有reduce阶段,则直接输出到hdfs上,如果有有reduce作业,则每个map方法的输出在写磁盘前线在内存中缓存。每个map task都有一个环状的内存缓冲区,存储着map的输出结果,默认100m,在每次当缓冲区快满的时候由一个 阅读全文

posted @ 2014-02-26 20:48 idouba.net 阅读(3283) 评论(1) 推荐(1) 编辑

【hadoop代码笔记】hadoop作业提交之汇总
摘要:汇总自己空间内关于mapreduce作业提交的几篇博文,对mapreduce作业提交过程的代码进行完整描述。 阅读全文

posted @ 2014-02-07 16:51 idouba.net 阅读(1470) 评论(0) 推荐(0) 编辑

【Hadoop代码笔记】Hadoop作业提交之Child启动reduce任务
摘要:一、概要描述在上篇博文描述了TaskTracker启动一个独立的java进程来执行Map任务。接上上篇文章,TaskRunner线程执行中,会构造一个java –D** Child address port tasked这样第一个java命令,单独启动一个java进程。在Child的main函数中通过TaskUmbilicalProtocol协议,从TaskTracker获得需要执行的Task,并调用Task的run方法来执行。在ReduceTask而Task的run方法会通过java反射机制构造Reducer,Reducer.Context,然后调用构造的Reducer的run方法执行red 阅读全文

posted @ 2014-01-28 16:28 idouba.net 阅读(1676) 评论(0) 推荐(0) 编辑

【Hadoop代码笔记】Hadoop作业提交之Child启动map任务
摘要:一、概要描述在上篇博文描述了TaskTracker启动一个独立的java进程来执行Map或Reduce任务。在本篇和下篇博文中我们会关注启动的那个入口是org.apache.hadoop.mapred.Child的这个Java进程是如何执行用户定义的map或Reduce任务的。接上篇文章,TaskRunner线程执行中,会构造一个java –D** Child address port tasked这样第一个java命令,单独启动一个java进程。在Child的main函数中通过TaskUmbilicalProtocol协议,从TaskTracker获得需要执行的Task,并调用Task的ru 阅读全文

posted @ 2014-01-23 12:56 idouba.net 阅读(2135) 评论(0) 推荐(1) 编辑

【Hadoop代码笔记】Hadoop作业提交之TaskTracker 启动task
摘要:一、概要描述在上篇博文描述了TaskTracker从Jobtracker如何从JobTracker获取到要执行的Task。在从JobTracker获取到LaunchTaskAction后,执行addToTaskQueue方法来把要执行的Task加入到queue。在本篇博文中,我们来关注下该方法后,TaskTracker怎么来处理这些Task。实际上,TaskTracker初始化时,会初始化并启动两个TaskLauncher类型的线程,mapLauncher,reduceLauncher。在TaskTracker从JobTracher获取到任务后,对应的会把任务添加到两个TaskLauncher 阅读全文

posted @ 2014-01-22 15:57 idouba.net 阅读(1973) 评论(0) 推荐(2) 编辑

【Hadoop代码笔记】Hadoop作业提交之Job初始化
摘要:一、概要描述在上一篇博文中主要描述了JobTracker和其几个服务(或功能)模块的接收到提交的job后的一些处理。其中很重要的一部分就作业的初始化。因为代码片段图的表达问题,本应该在上篇描述的内容,分开在本篇描述。二、 流程描述1. 代码也接上文的最后一个方法EagerTaskInitializationListener的jobAdded方法把JobInProgress类型的job放到List类型的 jobInitQueue中,有个单独的线程会对新加入的每个job进行初始化,其初始化调用的方法就是JobInProgress的方法initTasks。2. 在JobInProgress的方法in 阅读全文

posted @ 2014-01-20 12:41 idouba.net 阅读(1942) 评论(0) 推荐(0) 编辑

【Hadoop代码笔记】Hadoop作业提交之TaskTracker获取Task
摘要:一、概要描述在上上一篇博文和上一篇博文中分别描述了jobTracker和其服务(功能)模块初始化完成后,接收JobClient提交的作业,并进行初始化。本文着重描述,JobTracker如何选择作业的Task分发到TaskTracker。本文只是描述一个TaskTracker如何从JobTracker获取Task任务。Task任务在TaskTracker如何执行将在后面博文中描述。二、 流程描述1. TaskTracker在run中调用offerService()方法一直死循环的去连接Jobtracker,先Jobtracker发送心跳,发送自身状态,并从Jobtracker获取任务指令来执行 阅读全文

posted @ 2014-01-19 22:13 idouba.net 阅读(2088) 评论(0) 推荐(1) 编辑

【Hadoop代码笔记】Hadoop作业提交之JobTracker接收作业提交
摘要:一、概要描述在上一篇博文中主要描述了JobTracker接收作业的几个服务(或功能)模块的初始化过程。本节将介绍这些服务(或功能)是如何接收到提交的job。本来作业的初始化也可以在本节内描述,但是涉及到JobInProgress的初始化过程放在一张图上太拥挤,就分开到下一篇文章中描述。二、 流程描述1. JobClient通过RPC的方式向JobTracker提交作业;2. 调用JobTracker的submitJob方法。该方法是JobTracker向外提供的供调用的提交作业的接口。3. submit方法中调用JobTracker的addJob方法。4. 在addJob方法中会把作业加入到集 阅读全文

posted @ 2014-01-18 21:14 idouba.net 阅读(1847) 评论(1) 推荐(0) 编辑

【Hadoop代码笔记】Hadoop作业提交之JobTracker等相关功能模块初始化
摘要:一、概要描述本文重点描述在JobTracker一端接收作业、调度作业等几个模块的初始化工作。想过模块的介绍会在其他文章中比较详细的描述。受理作业提交在下一篇文章中会进行描述。为了表达的尽可能清晰一点只是摘录出影响逻辑流转的主要代码。重点强调直接的协作调用,每个内部完成的逻辑(一直可以更细的说明、有些细节可能自己也理解并不深刻:-()在后续会描述。主要包括JobTracker、TaskScheduler(此处以FairScheduler为例)、JobInProgressListener(以用的较多的EagerTaskInitializationListener为例)、TaskSelector(以 阅读全文

posted @ 2014-01-18 11:05 idouba.net 阅读(1185) 评论(0) 推荐(0) 编辑

【hadoop代码笔记】Hadoop作业提交中EagerTaskInitializationListener的作用
摘要:在整理FairScheduler实现的task调度逻辑时,注意到EagerTaskInitializationListener类。差不多应该是job提交相关的逻辑代码中最简单清楚的一个了。todo:标红文字表示要加前向链接,待相关文字草稿提交后。一、概述继承自JobInProgressListener,实现了jobAdded,jobRemoved,jobUpdated方法。哦,不能说实现,应该说继承,JobInProgressListener居然是个抽象类,看着怎么这样的listener也应该是个interface。在该listener被注册后,就响应jobAdded,jobRemoved,j 阅读全文

posted @ 2014-01-16 12:20 idouba.net 阅读(505) 评论(0) 推荐(0) 编辑

【Hadoop代码笔记】通过JobClient对Jobtracker的调用详细了解Hadoop RPC
摘要:Hadoop的各个服务间,客户端和服务间的交互采用RPC方式。关于这种机制介绍的资源很多,也不难理解,这里不做背景介绍。只是尝试从Jobclient向JobTracker提交作业这个最简单的客户端服务器交互的代码中,去跟踪和了解下RPC是怎么被使用的。不同于准备发表博客时搜索的几篇博文,试图通过一种具体的场景来介绍,属于比较初级。其他DataNode和Namenode之间,Tasktracker和JobTracker之间的交互基本也都一样。为了引用的代码篇幅尽可能少,忽略了代码中写日志(包括Metrics)、某些判断等辅助代码。1 RPC客户端请求(从JobClient 的jobSubmitC 阅读全文

posted @ 2014-01-12 21:46 idouba.net 阅读(1424) 评论(0) 推荐(0) 编辑

【Hadoop代码笔记】Hadoop作业提交之客户端作业提交
摘要:1. 概要描述仅仅描述向Hadoop提交作业的第一步,即调用Jobclient的submitJob方法,向Hadoop提交作业。2. 详细描述Jobclient使用内置的JobSubmissionProtocol 实例jobSubmitClient 和JobTracker交互,最主要是提交作业、获取作业执行信息等。在JobClient中作业提交的主要过程如下:1)通过调用JobTracker的getNewJobId()向jobtracker请求一个新的作业ID2)获取job的jar、输入分片、作业描述等几个路径信息,以jobId命名。3)其中getSystemDir()是返回jobtracke 阅读全文

posted @ 2014-01-12 21:43 idouba.net 阅读(1261) 评论(0) 推荐(0) 编辑

【Hadoop代码笔记】目录
摘要:整理09年时候做的Hadoop的代码笔记。开始。【Hadoop代码笔记】Hadoop作业提交之客户端作业提交【Hadoop代码笔记】通过JobClient对Jobtracker的调用看详细了解Hadoop RPC待续。。 阅读全文

posted @ 2014-01-12 21:40 idouba.net 阅读(216) 评论(0) 推荐(0) 编辑

导航