- 浏览: 375308 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
lhbthanks:
楼主写的很多,也很实用,要是再增加一些描述就会更好了。
oracle 用户 从一个表空间 另一个表空间 -
wuhuajun:
private int _connectionMax = 51 ...
resin jboss 最大连接数设置 -
shixiaomu:
自己丁丁丁一下 学了忘忘了再学。。主要是应用场景太少
python -
shixiaomu:
我自己有了方案了java+rabbitmq_server-2. ...
hadoop hive zookeeper 还不够 -
shixiaomu:
看到这个帖子 羞愧极了 ,原来 我 09 年就想学 pytho ...
python
hadoop-map-reduce执行流程调研报告
参与者:
Client 简称:C
JobTracker 简称:JT
TaskTracker 简称:TT
DataNode 简称:DN
NameNode 简称:NN
流程描述:
简述:
作业的提交 -> Map任务的分配和执行 -> Reduce任务的分配和执行 -> 作业的完成
每个具体的任务又分: 准备输入-> 算法的执行 -> 输出结果,三个步骤.
作业的提交:
1. /home/hadoop/hadoop-1.0.3/bin/hadoo jar ~/learning-hadoop.jar com.easou.mr.bookMark.BookMarkMR
2. RunJar.java -> main
3.反射 -BookMarkMR->main
4. org.apache.hadoop.mapreduce.Job ->waitForCompletion
//提交
i f (state == JobState.DEFINE) {
submit();
}
5. org.apache.hadoop.mapred.JobClient -> submitJobInternal
6.
/data/tmp/core/mapred/staging/hadoop/.staging/jobid/job.jar(执行jar)
/data/tmp/core/mapred/staging/hadoop/.staging/jobid/job.split(输入分片文件)
/data/tmp/core/mapred/staging/hadoop/.staging/jobid/job.splitmetainfo(分片meta)
/data/tmp/core/mapred/staging/hadoop/.staging/jobid/job.xml(jobconf配置信息)
7.
this.jobSubmitClient = createRPCProxy(JobTracker.getAddress(conf), conf);
JobID jobId = jobSubmitClient.getNewJobId();//jobid的生成方式
public JobStatus submitJob(JobID jobId, String jobSubmitDir, Credentials ts) throws IOException
synchronized (jobs) {
synchronized (taskScheduler) {
jobs.put(job.getProfile().getJobID(), job);
for (JobInProgressListener listener : jobInProgressListeners) {
listener.jobAdded(job);
}
}
}
Map reduce任务的分配和执行:
C rpc 调用 addJob 触发监听:
JobQueueJobInProgressListener(用于监控job的运行状态)
EagerTaskInitializationListener;(用于对Job进行初始化)
public void run() {
JobInProgress job = null;
while (true) {
try {
synchronized (jobInitQueue) {
while (jobInitQueue.isEmpty()) {
jobInitQueue.wait();
}
job = jobInitQueue.remove(0);
}
threadPool.execute(new InitJob(job));
} catch (InterruptedException t) {
LOG.info("JobInitManagerThread interrupted.");
break;
}
}
LOG.info("Shutting down thread pool");
threadPool.shutdownNow();
}
//后台守护运行
jobInitManagerThread.setDaemon(true);
this.jobInitManagerThread.start();
死循环等待job加入,并初始化.
JT初始化task
JobInProgress -> initTasks
1.从HDFS中读取job.split文件从而生成input splits
2.map task的个数就是input split的个数
numMapTasks = splits.length;
3.为每个map tasks生成一个TaskInProgress来处理一个input split
4.对于map task,将其放入nonRunningMapCache,是一个Map<Node, List<TaskInProgress>>,也即对于map task来讲,其将会被分配到其input split所在的Node上。nonRunningMapCache将在JobTracker向TaskTracker分配map task的时候使用。
5.创建reduce task
6.reduce task放入nonRunningReduces,其将在JobTracker向TaskTracker分配reduce task的时候使用。
6.创建两个cleanup task,一个用来清理map,一个用来清理reduce.
7.创建两个初始化 task,一个初始化map,一个初始化reduce.
TT:
1. 一直运行
2. 每隔一段时间就向JobTracker发送heartbeat
3. 在heartbeat中要返回给JobTracker一些统计信息, 报告给JobTracker,此TaskTracker的当前状态
4. 发送Heartbeat到JobTracker,得到response
5. 从Response中得到此TaskTracker需要做的事情
6. 如果是运行一个新的Task,则将Action添加到任务队列中
7. 当满足下面的条件的时候,此TaskTracker请求JobTracker为其分配一个新的Task来运行:
当前TaskTracker正在运行的map task的个数小于可以运行的map task的最大个数
当前TaskTracker正在运行的reduce task的个数小于可以运行的reduce task的最大个数
8. 向JobTracker发送RPC调用Heartbeat
JT 分配 task:
根据数据所处的位置与Task Tracker的距离,有如下几种data locality级别:
0 node-local 输入分片就在Task Tracker本地
1 rack-local 输入分片在Task Tracker所在的rack内其它Task Tracker上
2 off-switch 输入分片在其它的rack内
1.先调度优先级高的作业,统一优先级的作业则先进先出;
2.尽量使集群每一个TaskTracker达到负载均衡(这个均衡是task数量上的而不是实际的工作强度);
3.尽量分配作业的本地任务给TaskTracker,但不是尽快分配作业的本地任务给TaskTracker,最多分配一个非本地任务给TaskTracker(一是保证任务的并发性,二是避免有些TaskTracker的本地任务被偷走),最多分配一个reduce任务;
4..为紧急的Task预留一定的slot;
作业的完成:
Map Clean Up Task(Map任务服务器的清理任务,用于清理相关的过期的文件和环境...) -> Map Setup Task(Map任务服务器的安装任务,负责配置好相关的环境...) -> Map Tasks -> Reduce Clean Up Task -> Reduce Setup Task -> Reduce Tasks
流程图:
整体分配流程:
Map的具体流程
Reduce的具体流程
参与者:
Client 简称:C
JobTracker 简称:JT
TaskTracker 简称:TT
DataNode 简称:DN
NameNode 简称:NN
流程描述:
简述:
作业的提交 -> Map任务的分配和执行 -> Reduce任务的分配和执行 -> 作业的完成
每个具体的任务又分: 准备输入-> 算法的执行 -> 输出结果,三个步骤.
作业的提交:
1. /home/hadoop/hadoop-1.0.3/bin/hadoo jar ~/learning-hadoop.jar com.easou.mr.bookMark.BookMarkMR
2. RunJar.java -> main
3.反射 -BookMarkMR->main
4. org.apache.hadoop.mapreduce.Job ->waitForCompletion
//提交
i f (state == JobState.DEFINE) {
submit();
}
5. org.apache.hadoop.mapred.JobClient -> submitJobInternal
6.
/data/tmp/core/mapred/staging/hadoop/.staging/jobid/job.jar(执行jar)
/data/tmp/core/mapred/staging/hadoop/.staging/jobid/job.split(输入分片文件)
/data/tmp/core/mapred/staging/hadoop/.staging/jobid/job.splitmetainfo(分片meta)
/data/tmp/core/mapred/staging/hadoop/.staging/jobid/job.xml(jobconf配置信息)
7.
this.jobSubmitClient = createRPCProxy(JobTracker.getAddress(conf), conf);
JobID jobId = jobSubmitClient.getNewJobId();//jobid的生成方式
public JobStatus submitJob(JobID jobId, String jobSubmitDir, Credentials ts) throws IOException
synchronized (jobs) {
synchronized (taskScheduler) {
jobs.put(job.getProfile().getJobID(), job);
for (JobInProgressListener listener : jobInProgressListeners) {
listener.jobAdded(job);
}
}
}
Map reduce任务的分配和执行:
C rpc 调用 addJob 触发监听:
JobQueueJobInProgressListener(用于监控job的运行状态)
EagerTaskInitializationListener;(用于对Job进行初始化)
public void run() {
JobInProgress job = null;
while (true) {
try {
synchronized (jobInitQueue) {
while (jobInitQueue.isEmpty()) {
jobInitQueue.wait();
}
job = jobInitQueue.remove(0);
}
threadPool.execute(new InitJob(job));
} catch (InterruptedException t) {
LOG.info("JobInitManagerThread interrupted.");
break;
}
}
LOG.info("Shutting down thread pool");
threadPool.shutdownNow();
}
//后台守护运行
jobInitManagerThread.setDaemon(true);
this.jobInitManagerThread.start();
死循环等待job加入,并初始化.
JT初始化task
JobInProgress -> initTasks
1.从HDFS中读取job.split文件从而生成input splits
2.map task的个数就是input split的个数
numMapTasks = splits.length;
3.为每个map tasks生成一个TaskInProgress来处理一个input split
4.对于map task,将其放入nonRunningMapCache,是一个Map<Node, List<TaskInProgress>>,也即对于map task来讲,其将会被分配到其input split所在的Node上。nonRunningMapCache将在JobTracker向TaskTracker分配map task的时候使用。
5.创建reduce task
6.reduce task放入nonRunningReduces,其将在JobTracker向TaskTracker分配reduce task的时候使用。
6.创建两个cleanup task,一个用来清理map,一个用来清理reduce.
7.创建两个初始化 task,一个初始化map,一个初始化reduce.
TT:
1. 一直运行
2. 每隔一段时间就向JobTracker发送heartbeat
3. 在heartbeat中要返回给JobTracker一些统计信息, 报告给JobTracker,此TaskTracker的当前状态
4. 发送Heartbeat到JobTracker,得到response
5. 从Response中得到此TaskTracker需要做的事情
6. 如果是运行一个新的Task,则将Action添加到任务队列中
7. 当满足下面的条件的时候,此TaskTracker请求JobTracker为其分配一个新的Task来运行:
当前TaskTracker正在运行的map task的个数小于可以运行的map task的最大个数
当前TaskTracker正在运行的reduce task的个数小于可以运行的reduce task的最大个数
8. 向JobTracker发送RPC调用Heartbeat
JT 分配 task:
根据数据所处的位置与Task Tracker的距离,有如下几种data locality级别:
0 node-local 输入分片就在Task Tracker本地
1 rack-local 输入分片在Task Tracker所在的rack内其它Task Tracker上
2 off-switch 输入分片在其它的rack内
1.先调度优先级高的作业,统一优先级的作业则先进先出;
2.尽量使集群每一个TaskTracker达到负载均衡(这个均衡是task数量上的而不是实际的工作强度);
3.尽量分配作业的本地任务给TaskTracker,但不是尽快分配作业的本地任务给TaskTracker,最多分配一个非本地任务给TaskTracker(一是保证任务的并发性,二是避免有些TaskTracker的本地任务被偷走),最多分配一个reduce任务;
4..为紧急的Task预留一定的slot;
作业的完成:
Map Clean Up Task(Map任务服务器的清理任务,用于清理相关的过期的文件和环境...) -> Map Setup Task(Map任务服务器的安装任务,负责配置好相关的环境...) -> Map Tasks -> Reduce Clean Up Task -> Reduce Setup Task -> Reduce Tasks
流程图:
整体分配流程:
Map的具体流程
Reduce的具体流程
发表评论
-
左右鞋的java多线程,哪位大师帮忙优化一下?
2015-11-30 16:21 43922个线程 1个打包 1个指挥 20个负责生产左右鞋. ... -
Java内部类的使用小结
2014-05-30 10:00 811内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相 ... -
crontabl -e
2013-12-19 14:41 636SHELL=/bin/bash PATH=/sbin:/bin ... -
神器gdb(整合)
2013-06-15 14:54 1561来源:http://fanqiang.chinaunix.ne ... -
一种高效无锁内存队列的实现
2013-02-05 18:21 5282Disruptor是LMAX公司开源的一个高效的内存无锁队列 ... -
java io nio 区别和联系.
2013-02-05 18:08 4219IO ... -
Paxos-基于消息的分布式一致性
2012-12-04 11:16 760描述了这样一个场景, ... -
IntelliJ
2012-11-19 16:07 776使用了一段时间的Intelli ... -
利用 org.apache.commons.io.FileUtils快速读写文件(转)
2012-11-07 12:25 2854利用 org.apache.commons.io.FileUt ... -
google 集合类 -loadcache-弱引用
2012-10-31 17:45 868google 集合类 l ... -
awk 交集 并集 累加
2012-10-17 18:55 3634这段时间多亏大家的帮助,利用awk命令解决了很多问题,在此也总 ... -
Shuffle-我能找到的最详细的文档-(转)
2012-09-11 16:02 853MapReduce:详解Shuffle过程 ... -
自动化运维系统雏形
2012-09-07 17:43 959java+python+robbitMQ+subprocess ... -
ping 监控+监控网络状况+监控服务器运行状态
2012-08-23 09:43 939screen ping 10.13.25.119 |whi ... -
Hadoop杂记
2012-07-31 22:35 748Hadoop杂记 namenode(hdfs)+jobtra ... -
hadoop添加垃圾回收站 管用
2012-07-31 19:24 768hadoop添加垃圾回收站 管用 在core-site.xm ... -
hadoop集群管理之 SecondaryNameNode和NameNode(转)
2012-07-31 19:13 880光从字面上来理解 ... -
hadoop hive zookeeper 还不够
2012-07-24 18:03 1305hadoop hive zookeeper 还不够 好久不 ... -
linux 性能分析工具汇总(转 ) (2012-02-24 11:57)
2012-02-24 13:49 867linux 性能分析工具汇总(转 ) (2012-02-24 ... -
java try catchfinaly throws throw return 关系 终于搞明白了.
2012-02-24 01:40 3532package com.easou.cas06proxytes ...
相关推荐
赠送jar包:hadoop-mapreduce-client-jobclient-2.6.5.jar; 赠送原API文档:hadoop-mapreduce-client-jobclient-2.6.5-javadoc.jar; 赠送源代码:hadoop-mapreduce-client-jobclient-2.6.5-sources.jar; 赠送...
赠送jar包:hadoop-yarn-client-2.6.5.jar; 赠送原API文档:hadoop-yarn-client-2.6.5-javadoc.jar; 赠送源代码:hadoop-yarn-client-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-yarn-client-2.6.5.pom;...
赠送jar包:hadoop-yarn-common-2.6.5.jar 赠送原API文档:hadoop-yarn-common-2.6.5-javadoc.jar 赠送源代码:hadoop-yarn-common-2.6.5-sources.jar 包含翻译后的API文档:hadoop-yarn-common-2.6.5-javadoc-...
hadoop-annotations-3.1.1.jar hadoop-common-3.1.1.jar hadoop-mapreduce-client-core-3.1.1.jar hadoop-yarn-api-3.1.1.jar hadoop-auth-3.1.1.jar hadoop-hdfs-3.1.1.jar hadoop-mapreduce-client-hs-3.1.1.jar ...
hadoop-eclipse-plugin-2.7.3和2.7.7的jar包 hadoop-eclipse-plugin-2.7.3和2.7.7的jar包 hadoop-eclipse-plugin-2.7.3和2.7.7的jar包 hadoop-eclipse-plugin-2.7.3和2.7.7的jar包
hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1
赠送jar包:hadoop-common-2.7.3.jar; 赠送原API文档:hadoop-common-2.7.3-javadoc.jar; 赠送源代码:hadoop-common-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-common-2.7.3.pom; 包含翻译后的API文档...
该资源包里面包含eclipse上的hadoop-1.2.1版本插件的jar包和hadoop-1.2.1.tar.gz,亲测可用~~请在下载完该包后解压,将hadoop-1.2.1放置于Eclipse\plugins目录下,然后重启eclipse,将hadoop-1.2.1.tar.gz放到D:\...
hadoop-common-2.4.1.jar,是学习基础的Hadoop必须的包
flink-shaded-hadoop-3下载
hadoop-eclipse-plugin-2.7.4.jar和hadoop-eclipse-plugin-2.7.3.jar还有hadoop-eclipse-plugin-2.6.0.jar的插件都在这打包了,都可以用。
hadoop-eclipse-plugin-3.1.1, hadoop eclipse 插件 3.1.1
Apache Hadoop (hadoop-3.3.4.tar.gz)项目为可靠、可扩展的分布式计算开发开源软件。官网下载速度非常缓慢,因此将hadoop-3.3.4 版本放在这里,欢迎大家来下载使用! Hadoop 架构是一个开源的、基于 Java 的编程...
赠送jar包:hadoop-mapreduce-client-common-2.6.5.jar; 赠送原API文档:hadoop-mapreduce-client-common-2.6.5-javadoc.jar; 赠送源代码:hadoop-mapreduce-client-common-2.6.5-sources.jar; 赠送Maven依赖信息...
赠送jar包:hadoop-yarn-server-resourcemanager-2.6.0.jar; 赠送原API文档:hadoop-yarn-server-resourcemanager-2.6.0-javadoc.jar; 赠送源代码:hadoop-yarn-server-resourcemanager-2.6.0-sources.jar; 赠送...
找不到与hadoop-2.9.2版本对应的插件,手动生成的hadoop-eclipse-plugin-2.9.2版本,
1.安装 Hadoop-gpl-compression 1.1 wget http://hadoop-gpl-compression.apache-extras.org.codespot.com/files/hadoop-gpl-compression-0.1.0-rc0.tar.gz 1.2 mv hadoop-gpl-compression-0.1.0/lib/native/Linux-...
赠送jar包:hadoop-hdfs-client-2.9.1.jar 赠送原API文档:hadoop-hdfs-client-2.9.1-javadoc.jar 赠送源代码:hadoop-hdfs-client-2.9.1-sources.jar 包含翻译后的API文档:hadoop-hdfs-client-2.9.1-javadoc-...
hadoop2 lzo 文件 ,编译好的64位 hadoop-lzo-0.4.20.jar 文件 ,在mac 系统下编译的,用法:解压后把hadoop-lzo-0.4.20.jar 放到你的hadoop 安装路径下的lib 下,把里面lib/Mac_OS_X-x86_64-64 下的所有文件 拷到 ...
hadoop-eclipse-plugin-3.1.3,eclipse版本为eclipse-jee-2020-03