Hadoop 用了2年多了.从最初一起创业的11人20台服务器集群到后来独立搭建基于hadoop nutch的搜索引擎并商用化 到现在也2年了.这两年来应用了很多新技术也经历了很多,从数据仓库的Hive pig 到mapreduce的编码去解决算法或是etl的问题 等等都离不开hadoop.觉得用了2年多也到了该总结的时候了.故此想重新翻译hadoop 源码,按照不同的类方法的不同作用.也希望读到这篇博客的人和我一起 经历这一段岁月,一起讲hadoop的核心结合实用主义 传递给中国的开源软件使用者。
下图为 jobClient 提交到 Mapreduce 作业到JobTracker 核心逻辑。
1.JobProfile类:
job的描述性元语,相当于bean的功能.其中包括:
user job的提交者
jobid 唯一的标志一个job的ID ->JobID 类生成:
--jobid 包括两部分.第一部分代表jobTracker 标志,第二部分代表时间.如果是本地job(local Job) 则为local,最后为 job数量,代表是第 几个job
jobFile job运行时文件
url 定位该条job的描述性信息url
name job的名字
queueName job 队列名称,
2.JobStatus 类:
-- job的几种状态
running
successed
failed
prep
killed
3.copyAndConfigureFiles() 方法:
1.JobSubmissionFiles 工具类 负责管理 job 相关文件:
conf 路径
jar 包路径
分布式缓存(distributed cache files(archives,libjars,)) 路径
拷贝job执行文件到 job执行目录
4.writeNewSplits()
mapred.max.split.size 设置最小输入分片
mapred.max.split.size 最大分片的大小
计算输入分片
FileInputFormat ->getSplits()->computeSplitSize()方法
分片计算法:
1.首先 获取文件的长度 length
2.获取blocksize
3. 获取最 大分片大小 getMaxSplitSize
4.取 maxsize 和 block 中 的较小者 A
5. 取 最新分片和 A 中的最大者 作为分片大小
6.如果文件长度 length/分片大小 >1.1 则调用FileSplit 分片
FileInputFormat 类:
setInputPaths((Job job, Path... inputPaths) 可添加多个输入路径
相关推荐
本文将深入探讨Hadoop的核心组件,包括Configuration、JobClient、JobConf以及JobTracker、TaskTracker等,并详细解析Hadoop作业提交的流程。 首先,我们从Configuration类开始。Configuration类是Hadoop中的基础...
MapReduceV1实现中,主要存在3个主要的分布式进程(角色):JobClient、JobTracker和TaskTracker,我们主要是以这三个角色的实际处理活动为主线,并结合源码,分析实际处理流程。下图是《Hadoop权威指南》一书给出的...
上一篇我们分析了Job提交过程中JobClient端的处理流程(详见文章MapReduceV1:Job提交流程之JobClient端分析),这里我们继续详细分析Job提交在JobTracker端的具体流程。通过阅读源码可以发现,这部分的处理逻辑还是...
下面我们将深入源码,详细分析这一过程。 首先,当用户编写好MapReduce程序并调用Job的submit()方法时,客户端会进行一系列的初始化工作。这包括将程序的JAR包、配置信息以及输入输出路径等打包成一个JobConf对象,...
这个hadoop-3.1.3.tar.gz文件是一个包含了Hadoop 3.1.3版本的源码压缩包,对于理解Hadoop的工作原理、进行二次开发或者定制化配置来说,研究源码是非常重要的。 首先,Hadoop的核心组件包括HDFS(Hadoop ...
这个"hadop jar包.rar"文件可能包含了Hadoop运行所需的各种库文件,如HDFS客户端、MapReduce客户端、Hadoop其他组件的jar包等,使得用户可以直接在本地或者集群上运行Hadoop相关程序,无需自行编译源码。用户在使用...
- JobInProgress:JobTracker接收到JobClient提交的作业后,会创建一个JobInProgress实例,用于跟踪和调度作业,并将其放入作业队列。 - TaskInProgress:JobTracker启动任务时,通过TaskInProgress来launchTask。...
- **作业提交**:用户通过编写Map和Reduce函数定义作业逻辑,并通过JobClient提交作业到JobTracker。 - **作业初始化**:JobTracker接收到作业后,会对其进行初始化,并创建相应的Map任务和Reduce任务。 - **任务...
`org.apache.hadoop.mapreduce.JobClient`类是这个库的核心,它负责与JobTracker(在Hadoop 2.x中被ResourceManager替代)进行通信,执行各种操作,如提交Job、获取Job状态、杀死Job等。 在Windows环境中,由于路径...
JobClient 是一个客户端 API,用于将应用程序和配置参数打包成 jar 文件,并将其提交到 JobTracker 服务中。 JobInProgress 是 JobTracker 创建的一个对象,用于跟踪和调度 Job 的执行情况。TaskInProgress 是 ...
3. MapReduce 中的 JobClient 会在用户端将应用已经配置参数打包成 jar 文件存储到 HDFS,并将路径提交到 JobTracker。 Hadoop 作者 1. Hadoop 的作者是 Doug Cutting。 HDFS Block Size 1. HDFS 默认 Block ...
7. **开发与调试**:对于开发和调试Hadoop应用,使用`hadoop jar`命令可以提交MapReduce作业到集群上执行。例如,`hadoop jar myjob.jar com.example.MyMainClass`将运行包含在`myjob.jar`中的`MyMainClass`。 总之...
为了让myEclipse能够提交和运行你的Hadoop作业,你需要配置jobTracker和taskTracker的地址,这样myEclipse就可以通过Hadoop的JobClient接口提交任务到集群。此外,你可能还需要在myEclipse的运行配置中设置Hadoop...
- 作业提交:客户端通过JobClient提交作业到JobTracker。 - 作业初始化:JobTracker解析作业配置,生成Map和Reduce任务。 - 任务分配:JobTracker将任务分配给TaskTracker执行。 - Map任务执行:TaskTracker运行...
总结来说,Hadoop MapReduce通过客户端提交任务,JobTracker分配任务,TaskTracker执行任务,以及Child执行map和reduce操作,实现了分布式数据处理。这种模型充分利用了集群资源,能高效地处理海量数据。然而,由于...
JobClient用于提交作业,JobTracker负责任务调度,而TaskTracker在各个节点上执行实际的任务。 3. **YARN(Yet Another Resource Negotiator)**: - `hadoop-yarn-project`:YARN是Hadoop的资源管理系统,它将...