- 浏览: 129102 次
- 性别:
- 来自: 北京
文章分类
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://luobeng.blogbus.com/logs/105015789.html
hadoop一个节点默认起两个map slot,请问这两个slot是多线程吗?
hadoop-0.21.0 源码中是这样的:
首先看看 org.apache.hadoop.mapred.TaskTracker 类:
=====================================================================================
> 两个类变量 maxMapSlots 和 maxReduceSlots:
-------------------------------------------
maxMapSlots = conf.getInt(TT_MAP_SLOTS, 2);
maxReduceSlots = conf.getInt(TT_REDUCE_SLOTS, 2);
其中
public static final String TT_MAP_SLOTS = "mapreduce.tasktracker.map.tasks.maximum";
public static final String TT_REDUCE_SLOTS = "mapreduce.tasktracker.reduce.tasks.maximum";
-------------------------------------------
> 类方法 initializeMemoryManagement() 中 ,根据 slots 来决定申请内存的大小
-------------------------------------------
totalMemoryAllottedForTasks =
maxMapSlots * mapSlotMemorySizeOnTT + maxReduceSlots
* reduceSlotSizeMemoryOnTT;
-------------------------------------------
> 类方法 TaskTracker.initialize() 中会起两个 TaskLauncher 线程,分别负责启动 Mapper 和 Reduce 任务:
-------------------------------------------
mapLauncher = new TaskLauncher(TaskType.MAP, maxMapSlots);
reduceLauncher = new TaskLauncher(TaskType.REDUCE, maxReduceSlots);
-------------------------------------------
=====================================================================================
再看看 org.apache.hadoop.mapred.TaskTracker.TaskLauncher 类,它负责启动 Mapper/Reducer 任务。
=====================================================================================
> 初始化 TaskLauncher 时,需要传入 slots 的数量:
-------------------------------------------
public TaskLauncher(TaskType taskType, int numSlots) {
... ...
this.maxSlots = numSlots;
this.numFreeSlots = new IntWritable(numSlots);
... ...
}
特别要注意 numFreeSlots 这个类变量:
private IntWritable numFreeSlots;
-------------------------------------------
> TaskLauncher.run() 中,循环地看是否有新的 Task 需要启动,并且看是否有足够的 slots 可用:
-------------------------------------------
while () {
while (numFreeSlots.get() < task.getNumSlotsRequired()) {
.......
}
numFreeSlots.set(numFreeSlots.get() - task.getNumSlotsRequired()); // 用完了就减掉
}
-------------------------------------------
> Task 执行完了以后,需要释放 slots :
-------------------------------------------
public void addFreeSlots(int numSlots) {
... ...
numFreeSlots.set(numFreeSlots.get() + numSlots);
... ...
}
-------------------------------------------
=====================================================================================
所以,综合上面看, slots 只是一个逻辑值 ( org.apache.hadoop.mapred.TaskTracker.TaskLauncher.numFreeSlots ),而不是对应着一个线程或者进程。TaskLauncher 会维护这个值,以保证资源使用在控制范围内。
帮助理解的最主要的代码可见 : org.apache.hadoop.mapred.TaskTracker.TaskLauncher.run() 。
Mapper 和 Reducer 都是单独的进程,但是它们与 slots 的关系是这样的:
-------------------------------------------
org.apache.hadoop.mapred.TaskTracker.TaskLauncher.run() {
... ...
//got a free slot. launch the task
startNewTask(tip);
... ...
}
-------------------------------------------
这里的 slots 有点类似 “令牌” 的感觉:申请资源,先获得令牌;释放资源,交还令牌。
> mapper 和 reducer 都是单独的进程?好像有点不对,是单独的线程吧?
是单独的进程。
启动Mapper/Reducer的总的调用路径是:
-------------------------------------------
org.apache.hadoop.mapred.TaskTracker.TaskLauncher.run()
->
org.apache.hadoop.mapred.TaskTracker.startNewTask()
->
org.apache.hadoop.mapred.TaskTracker.launchTaskForJob()
->
org.apache.hadoop.mapred.TaskTracker.TaskInProgress.launchTask()
->
org.apache.hadoop.mapred.Task.createRunner() // 抽象方法,具体实现在子类 MapTask 和 ReduceTask 中
|-> org.apache.hadoop.mapred.MapTask.createRunner() // 创建 MapTaskRunner 类实例
|-> org.apache.hadoop.mapred.ReduceTask.createRunner() // 创建 ReduceTaskRunner 类实例
-------------------------------------------
最终,跟踪到了 MapTaskRunner 和 ReduceTaskRunner 这两个类。
至此,我们看看它们的父类 org.apache.hadoop.mapred.TaskRunner ,以下是类的说明:
-------------------------------------------
/** Base class that runs a task in a separate process. Tasks are run in a
* separate process in order to isolate the map/reduce system code from bugs in
* user supplied map and reduce functions.
*/
-------------------------------------------
TaskRunner 虽然 extends Thread (看起来是个线程),但是真正启动Mapper和Reduce进程的代码在函数 TaskRunner.run() 中:
-------------------------------------------
public final void run() {
... ...
launchJvmAndWait(setup, vargs, stdout, stderr, logSize, workDir, env);
... ...
}
-------------------------------------------
其调用了 TaskRunner.launchJvmAndWait() 方法(在此之前还有些创建文件夹、设置配置参数和环境变量等准备性的操作):
-------------------------------------------
void launchJvmAndWait(List setup, Vector vargs, File stdout,
File stderr, long logSize, File workDir, Map env)
throws InterruptedException {
jvmManager.launchJvm(this, jvmManager.constructJvmEnv(setup, vargs, stdout,
stderr, logSize, workDir, env, conf));
synchronized (lock) {
while (!done) {
lock.wait();
}
}
}
-------------------------------------------
上面代码主要是 launch 一个 java虚拟机进程。这也是Hadoop启动代价很高的原因,因为launch虚拟机是比较耗资源的;于是又提供了Task JVM Reuse机制。
单
独起进程的原因也说得很清楚,就是: isolate the map/reduce system code from bugs in user
supplied map and reduce
functions。其实就是,通过使用不同的进程空间,进行隔离,防止用户提供的代码中有bug死掉后,造成 TaskTracker
所在进程也死掉(这个死掉了,效果就跟阿凡达里面的发光树被毁了一样)。
Hadoop-0.20.2源码中的实现基本也是差不多的。
发表评论
-
HDFS架构简介
2012-07-17 15:02 1615转自:http://asyty-cp.blog.163.com ... -
Hadoop Dont's: What not to do to harvest Hadoop's full potential
2012-07-15 15:45 694We've all heard this story. ... -
hadoop-0.20.203启用LZO压缩 安装成功
2012-07-13 18:10 2603#准备各安装包,并scp到各节点 pwd /work/lz ... -
Hadoop TaskScheduler浅析
2012-07-13 14:01 893转自:http://hi.baidu.com/_kouu/bl ... -
Hadoop OutputFormat浅析
2012-07-13 14:00 2167转自:http://hi.baidu.com/_kouu/bl ... -
Hadoop InputFormat浅析
2012-07-13 13:57 892在执行一个Job的时候,Hadoop会将输入数据划分成N个Sp ... -
hadoop面试可能遇到的问题
2012-07-13 13:50 1148Q1. Name the most common Inpu ... -
hadoop-0.20.203启用LZO压缩
2012-07-12 16:45 14941.准备工作,安装ant,(编译第三步lzo编码解码时使用,现 ... -
24 Interview Questions & Answers for Hadoop MapReduce developers
2012-07-12 10:12 732A good understanding of Hadoop ... -
hadoop hbase log backup
2012-06-28 16:43 849hadoop hbase logs目录下日志越来越多,写个简单 ... -
Hadoop Job失败解决
2012-06-27 17:07 3060现象:map 某个task始终实行失败,直到超时,attemp ... -
Hadoop的那些事儿
2012-06-25 14:37 677在说Hadoop之前,作为一个铁杆粉丝先粉一下Googl ... -
Hadoop学习总结:Map-Reduce的过程解析
2012-06-25 10:47 807一、客户端 Map-Re ... -
Hadoop集群上使用Lzo压缩
2012-06-21 14:14 1052自从Hadoop集群搭建以来,我们一直使用的是G ... -
hadoop 相关博客推荐
2012-06-04 10:26 816http://www.cnblogs.com/xuqiang/ ... -
hdfs小文件问题
2012-06-04 10:23 738http://www.cloudera.com/blog/20 ... -
hadoop tuning blog
2012-05-24 14:16 8707 Tips for Improving MapReduce ... -
hadoop作业调优参数整理及原理
2012-05-24 13:58 732转自:http://www.tbdata.org/archiv ... -
Kerberos authentication
2012-05-19 21:46 1390转自:http://www.sunchangming.com/ ... -
hadoop 优化的一些点
2012-05-17 16:43 805版权声明:转载时请以超链接形式标明文章原始出处和作者 ...
相关推荐
Hadoop 讲义 基础篇
hadoop起源Google发表的三篇论文:GFS, Bigtable, MapReduce,英文版
在windows环境下开发hadoop时,需要配置HADOOP_HOME环境变量,变量值D:\hadoop-common-2.7.3-bin-master,并在Path追加%HADOOP_HOME%\bin,有可能出现如下错误: org.apache.hadoop.io.nativeio.NativeIO$Windows....
hadoop相关的十几篇论文,有中文和英文的,学习hadoop很好的资料
包括《The Google File System》 ...《Mochi:Visual Log-Analysis Based Tools for Debugging Hadoop》 《Ganesha:blackBox diagnosis of MapReduce systems》 《SALAS:Analyzing Logs as StAte Machines》
关于hadoop开题报告参考.pdf关于hadoop开题报告参考.pdf关于hadoop开题报告参考.pdf关于hadoop开题报告参考.pdf关于hadoop开题报告参考.pdf关于hadoop开题报告参考.pdf关于hadoop开题报告参考.pdf关于hadoop开题报告...
关于hadoop开题报告参考.docx关于hadoop开题报告参考.docx关于hadoop开题报告参考.docx关于hadoop开题报告参考.docx关于hadoop开题报告参考.docx关于hadoop开题报告参考.docx关于hadoop开题报告参考.docx关于hadoop...
Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo 的工程师 Doug Cutting 和 Mike Cafarella Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo...
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不...
hadoop_tutorial hadoop入门经典 Hadoop 是一个能够对大量数据进行分布式处理的软件框架。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。...
Hadoop基础篇之搭建Hadoop2.2
关于Hadoop的在Rad hat Linux下的安装资料,
《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf...
网上很难找的hadoop代码,很适合初学或想从事大数据方向的程序猿,心动者赶紧下载。
零基础学习hadoop(编程篇).pdf
大数据时代基于Hadoop的一个数据仓库工具hive
Hadoop是一个分布式系统基础架构,由Apache基金会开发
本书从hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍hado叩这一高性能处理海量数据集的理想工具。全书共14章,3个附录,涉及的主题包括:haddoop简介:mapreduce简介:hadoop分布式文件系统;hadoop的i...
资源名称:云计算Hadoop:快速部署Hadoop集群内容简介: 近来云计算越来越热门了,云计算已经被看作IT业的... Apache Hadoop 是一个软件框架,它可以分布式 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。