调度器调用JobTracker.initJob()函数对新作业进行初始化。相关代码如下:
// 调度器调用eagerTaskInitializationListener.start()方法。 class JobQueueTaskScheduler extends TaskScheduler { @Override public synchronized void start() throws IOException { super.start(); ... ... eagerTaskInitializationListener.start(); ... ... } } // EagerTaskInitializationListener.start()方法启动作业管理器线程。 class EagerTaskInitializationListener extends JobInProgressListener { ... ... public void start() throws IOException { this.jobInitManagerThread = new Thread(jobInitManager, "jobInitManager"); ... ... this.jobInitManagerThread.start(); } ... ... } // 作业初始化管理器执行作业初始化动作。 class JobInitManager implements Runnable { public void run() { ... ... threadPool.execute(new InitJob(job)); ... ... } } |
作业初始化的主要工作是构造Map Task和Reduce Task并对它们进行初始化。
Hadoop将每个作业分解成4种类型的任务,分别是Setup Task、Map Task、Reduce Task和Cleanup Task。它们的运行时信息由TaskInProgress类维护,因此,创建这些任务实际上是创建TaskInProgress对象。
上述4种任务的作用及创建过程如下。
n Setup Task:作业初始化标识性任务。它进行一些非常简单的作业初始化工作,比如将运行状态设置为“setup”,调用OutputCommitter.setupJob()函数等。该任务运行完后,作业由PREP状态变为RUNNING状态,并开始运行Map Task。该类型任务又被分为Map Setup Task和Reduce Setup Task两种,且每个作业各有一个。它们运行时分别占用一个Map slot和Reduce slot。由于这两种任务功能相同,因此有且只有一个可以获得运行的机会(即只要有一个开始运行,另一个马上被杀掉,而具体哪一个能够运行,取决于当时存在的空闲slot种类及调度策略。相关代码如下:
public class JobInProgress { TaskInProgress setup[] = new TaskInProgress[0]; ... ... public synchronized void initTasks() { ... ... // create two setup tips, one map and one reduce. setup = new TaskInProgress[2]; // setup map tip. This map doesn't use any split. Just assign an empty // split. setup[0] = new TaskInProgress(jobId, jobFile, emptySplit, jobtracker, conf, this, numMapTasks + 1, 1); setup[0].setJobSetupTask(); // setup reduce tip. setup[1] = new TaskInProgress(jobId, jobFile, numMapTasks, numReduceTasks + 1, jobtracker, conf, this, 1); setup[1].setJobSetupTask(); ... ... } } |
n Map Task:Map阶段处理数据的任务。其数目及对应的处理数据分片由应用程序中的
InputFormat组件确定。关代码如下:
public class JobInProgress { TaskInProgress maps[] = new TaskInProgress[0]; ... ... public synchronized void initTasks() { // read input splits and create a map per a split TaskSplitMetaInfo[] splits = createSplits(jobId); numMapTasks = splits.length; ... ... maps = new TaskInProgress[numMapTasks]; for(int i=0; i < numMapTasks; ++i) { inputLength += splits[i].getInputDataLength(); maps[i] = new TaskInProgress(jobId, jobFile, splits[i], jobtracker, conf, this, i, numSlotsPerMap); } ... ... } } |
n Reduce Task:Reduce阶段处理数据的任务。其数目由用户通过参数mapred.reduce.tasks(默认数目为1)指定。考虑到Reduce Task能否运行依赖于Map Task的输出结果,因此,Hadoop刚开始只会调度Map Task,直到Map Task完成数目达到一定比例(由参数mapred.reduce.slowstart.completed.maps指定,默认是0.05,即5%)后,才开始调度Reduce Task。关代码如下:
public class JobInProgress { TaskInProgress reduces[] = new TaskInProgress[0]; ... ... public synchronized void initTasks() { ... ... // Create reduce tasks this.reduces = new TaskInProgress[numReduceTasks]; for (int i = 0; i < numReduceTasks; i++) { reduces[i] = new TaskInProgress(jobId, jobFile, numMapTasks, i, jobtracker, conf, this, numSlotsPerReduce); nonRunningReduces.add(reduces[i]); } ... ... } |
n Cleanup Task:作业结束标志性任务,主要完成一些清理工作,比如删除作业运行过程中用到的一些临时目录(比如_temporary目录)。一旦该任务运行成功后,作业由RUNNING状态变为SUCCESSED状态。关代码如下:
public class JobInProgress { TaskInProgress cleanup[] = new TaskInProgress[0]; ... ... public synchronized void initTasks() { ... ... // create cleanup two cleanup tips, one map and one reduce. cleanup = new TaskInProgress[2]; // cleanup map tip. This map doesn't use any splits. Just assign an empty // split. TaskSplitMetaInfo emptySplit = JobSplit.EMPTY_TASK_SPLIT; cleanup[0] = new TaskInProgress(jobId, jobFile, emptySplit, jobtracker, conf, this, numMapTasks, 1); cleanup[0].setJobCleanupTask(); // cleanup reduce tip. cleanup[1] = new TaskInProgress(jobId, jobFile, numMapTasks, numReduceTasks, jobtracker, conf, this, 1); cleanup[1].setJobCleanupTask(); ... ... } |
相关推荐
一个基于Hadoop平台进行的单词统计系统,其中包含了伪分布架构,并且包含HDFS数据存储,结合Java后台利用Mapreduce架包进行单词的统计与分析。包含了完整的实践过程,内涵源代码,以及实验命令,内容丰富,实验过程...
该文档简要介绍了大数据与Hadoop的概念及相关大数据框架,对于在大数据的初学者来说有一定的帮助,可以指导如何学习,以及学习各个框架的步骤
03_Hadoop_概论_大数据的特点.mp4 04_Hadoop_概论_大数据的应用场景.mp4 06_Hadoop_概论_未来工作内容.mp4 07_Hadoop_入门_课程介绍.mp4 11_Hadoop_入门_Hadoop优势.mp4 13_Hadoop_入门_HDFS概述.mp4 14_Hadoop_入门...
Netflix基于AWS的大数据平台Hadoop架构解析.docxNetflix基于AWS的大数据平台Hadoop架构解析.docxNetflix基于AWS的大数据平台Hadoop架构解析.docxNetflix基于AWS的大数据平台Hadoop架构解析.docxNetflix基于AWS的...
本系统利用大数据技术,合理的为用户做出推荐,推荐的结果可靠程度很高,这就是我的优势所在,因为它和一般的推荐系统的推荐算法不太一样,我的推荐算法是利用Hadoop技术写的,我们可以利用Hadoop集群的高吞吐量,一...
1.大数据框架hadoop; 2.根据表名,获取全部数据,支持翻页; 3.获取数据总条数; 4.根据表名、上次查询最后一条记录的rowkey,获取下一页数据; 5.数据支持jsonarray/list等;
大数据之Hadoop学习教程+笔记合计_超详细完整.zip
大数据系列内部培训经典内容,包括大数据系列架构,大数据Hadoop系列、Spark、Hive、Storm、Hbase、Sqoop......
大数据Hadoop框架核心技术对比与实现.pdf
Netflix基于AWS的大数据平台Hadoop架构解析.pdfNetflix基于AWS的大数据平台Hadoop架构解析.pdfNetflix基于AWS的大数据平台Hadoop架构解析.pdfNetflix基于AWS的大数据平台Hadoop架构解析.pdfNetflix基于AWS的大数据...
尚硅谷大数据之Hadoop入门,Hadoop是目前大数据领域的流行框架,用java编写,运行在Linux集群上,这篇笔记关于Hadoop做了详细的介绍,并且还讲解了如何搭建Hadoop本地模式,伪分布模式和完全分布式模式
课后作业 1.SAAS、PAAS、IAAS、XAAS都是什么意思?另外猜猜DAAS是什么意思? 2.大数据的4个特点是什么? 3.虚拟机与主机构成闭环局域网的链接叫什么? 4.在用户目录下的test目录下,创建一个文件hello.txt,文件内容...
大数据整理hadoop/hive
大数据Hadoop视频教程大数据Hadoop视频教程大数据Hadoop视频教程
针对数据分析介绍分布式计算涉及的大量概念、工具和技术,纵览Hadoop生态系统。
《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf...
大数据专业Hadoop开发技术课程实践教学探索.pdf
大数据之hadoop,spart全套全技术栈视频课程,包含spark,hadoop,storm,kafka,mllib等组件的安装,编程等,依次从基础,进阶直到实际实践。