现在来总结一下hadoop从命令输入到map接收指定输入split的整个代码分析,下面是转自http://forfuture1978.iteye.com/blog/811119#comments的一张图片,介绍了hadoop的数据运行流程:
我这里用的hadoop-0.20.2的代码实例,先从命令行输入开始bin/hadoop jar *** ,当hadoop的二进制文件(bin/hadoop)接收并在它的第229行:
elif [ "$COMMAND" = "jar" ] ; then
CLASS=org.apache.hadoop.util.RunJar
开始执行相关的类文件,RunJar类中的代码:
Method main = mainClass.getMethod("main", new Class[] {
Array.newInstance(String.class, 0).getClass()
});
代码显示了用java的反射机制,从命令行的第一个参数也就是执行的类名称中去寻找main方法,也就是该hadoop任务的入口处,main方法中对hadoop任务进行配置,创建job。在我的版本中的wordcount的main方法中我唯一能看到把作业的配置信息提交到系统中的入口就是这么一句:
System.exit(job.waitForCompletion(true) ? 0 : 1);
系统等待作业的一系列的配置信息的提交和任务的完成(应该这就是入口了吧)。该方法完成任务的提交,告诉系统运行任务追踪和打印器,在job的submit方法中,返回任务信息的完成情况(其实是向jobtracker询问的),并且利用JobClient中的一个名为submitJobInternal的内部方法向jobtracker提交作业,代码如下:
public void submit() throws IOException, InterruptedException,
ClassNotFoundException {
ensureState(JobState.DEFINE);
setUseNewAPI();
info = jobClient.submitJobInternal(conf);
state = JobState.RUNNING;
}
/**
* Submit the job to the cluster and wait for it to finish.
* @param verbose print the progress to the user
* @return true if the job succeeded
* @throws IOException thrown if the communication with the
* <code>JobTracker</code> is lost
*/
public boolean waitForCompletion(boolean verbose
) throws IOException, InterruptedException,
ClassNotFoundException {
if (state == JobState.DEFINE) {
submit();
}
if (verbose) {
jobClient.monitorAndPrintJob(conf, info);
} else {
info.waitForCompletion();
}
return isSuccessful();
}
JobClinet是实际向jobtracker提交作业,并且拷贝配置信息到hdfs中的处理类,提交代码中的最后:
//
// Now, actually submit the job (using the submit name)
//
JobStatus status = jobSubmitClient.submitJob(jobId);
注释也写清楚了:现在,实际上的提交作业。其中的JobStatus status是一个状态类,反映了作业完成信息,其中这就用到了心跳机制,JobClient会定时向jobtracker询问作
业的完成情况,jobSubmitClient是一个本地作业运行实例,属于LocalJobRunner类,这里重点是submitJob方法,跳转到
其内部代码中:
public JobStatus submitJob(JobID jobid) throws IOException {
return new Job(jobid, this.conf).status;
}
该方法返回一个本地运行作业的实例,该类是一个thread,当初始化完该job后,启动作业的守护线程,下面是具体的启动MapTask运行Map实例具体代码:
for (int i = 0; i < rawSplits.length; i++) {
if (!this.isInterrupted()) {
TaskAttemptID mapId = new TaskAttemptID(new TaskID(jobId, true, i),0);
mapIds.add(mapId);
MapTask map = new MapTask(file.toString(),
mapId, i,
rawSplits[i].getClassName(),
rawSplits[i].getBytes());
JobConf localConf = new JobConf(job);
map.setJobFile(localFile.toString());
map.localizeConfiguration(localConf);
map.setConf(localConf);
map_tasks += 1;
myMetrics.launchMap(mapId);
map.run(localConf, this);
myMetrics.completeMap(mapId);
map_tasks -= 1;
updateCounters(map);
} else {
throw new InterruptedException();
}
}
后面的从MapTask中获取Map实例,到Map实例接收指定split运行其自定义的map方法,就不多说了。
- 大小: 53.4 KB
分享到:
相关推荐
Hadoop源代码分析完整版.pdf
Hadoop 源代码分析 Hadoop 是一个开源的分布式计算框架,由 Apache 基金会维护。Hadoop 的核心组件包括 HDFS(Hadoop Distributed File System)和 MapReduce。HDFS 是一个分布式文件系统,可以存储大量的数据,而 ...
《Hadoop源代码分析》是一本深入探讨Hadoop核心组件MapReduce的专著。Hadoop是Apache软件基金会的一个开源项目,旨在提供分布式存储和计算框架,以处理和存储大量数据。MapReduce是Hadoop的核心计算模型,它通过将大...
深入云计算:Hadoop源代码分析(修订版)
### 深入云计算 Hadoop源代码分析 #### 一、引言 随着大数据时代的到来,数据处理成为了各个领域中的关键技术之一。Hadoop作为一个开源的大数据处理框架,因其优秀的分布式计算能力,在业界得到了广泛的应用。...
Hadoop分析气象数据完整版源代码(含Hadoop的MapReduce代码和SSM框架) 《分布式》布置了一道小作业,这是作业的所有代码,里面包含了Hadoop的MapReduce代码、和SSM框架显示数据的代码
"Hadoop源代码分析完整版" Hadoop作为一个开源的分布式计算框架,具有高可扩展性和高性能的特点。Hadoop的源代码分析可以分为多个部分,包括HDFS、MapReduce、YARN等。 首先,让我们了解Hadoop的架构。Hadoop的...
在IT行业中,Hadoop是一个广泛使用的开源大数据处理框架,它主要由Apache软件基金会维护。...在阅读博客文章《Hadoop源代码分析(一)》时,可以结合Hadoop的源码,逐步揭开这个强大框架的神秘面纱。
在这个项目中,我们重点关注的是一套完整的Hadoop分析气象数据的代码,这涉及到分布式计算、数据处理以及数据可视化等多个关键知识点。 首先,我们要理解Hadoop的核心组件:HDFS(Hadoop Distributed File System)...
### Hadoop源代码分析知识点详解 #### 一、Hadoop与云计算的核心技术 Hadoop作为分布式计算领域的核心框架,其源代码分析对于深入理解云计算的底层实现至关重要。Hadoop最初的设计灵感来源于Google的一系列论文,...
### Hadoop源代码分析知识点详解 #### 一、Hadoop背景与关键技术介绍 Hadoop作为一款开源的大数据处理框架,其设计灵感源自Google的一系列核心论文。这些论文详细阐述了Google构建其基础设施的方法论和技术原理,...
在Hadoop源代码分析中,首先,我们可以看到HDFS(Hadoop分布式文件系统)是所有基于Hadoop项目的基础。HDFS的设计灵感来源于Google的GFS(Google File System),它通过将大文件分割成块并复制到多个节点来确保数据...
根据提供的文件内容,以下是关于Hadoop源代码分析的知识点总结。 首先,Hadoop项目起源于Google的核心技术论文。Google开发了一系列创新技术用于构建其大规模的分布式计算平台,这些技术包括Google Cluster、Chubby...
在大数据处理领域,Hadoop和HBase是两个非常重要...以上就是关于"Hadoop代码"资源的详细解析,这个资源提供了从基础API使用到高级优化策略的全面学习材料,对于想要深入理解并应用Hadoop和HBase的开发者来说极具价值。
- 性能调优:学习如何通过调整参数和优化代码来提升Hadoop集群的性能。 通过深入学习和理解Hadoop源码,你将能够更好地驾驭这个强大的大数据处理工具,解决实际项目中的问题,甚至为Hadoop社区贡献自己的改进和...
### Hadoop源代码分析报告知识点总结 #### 一、概览 本报告是对Hadoop源代码进行深入分析的结果,重点研究了Hadoop分布式文件系统(HDFS)的内部实现细节。Hadoop是一种开源软件框架,主要用于分布式存储和处理大...