- 浏览: 385354 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 51822个线程 1个打包 1个指挥 20个负责生产左右鞋. ... -
Java内部类的使用小结
2014-05-30 10:00 875内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相 ... -
crontabl -e
2013-12-19 14:41 680SHELL=/bin/bash PATH=/sbin:/bin ... -
神器gdb(整合)
2013-06-15 14:54 1641来源:http://fanqiang.chinaunix.ne ... -
一种高效无锁内存队列的实现
2013-02-05 18:21 5367Disruptor是LMAX公司开源的一个高效的内存无锁队列 ... -
java io nio 区别和联系.
2013-02-05 18:08 4277IO ... -
Paxos-基于消息的分布式一致性
2012-12-04 11:16 797描述了这样一个场景, ... -
IntelliJ
2012-11-19 16:07 822使用了一段时间的Intelli ... -
利用 org.apache.commons.io.FileUtils快速读写文件(转)
2012-11-07 12:25 2942利用 org.apache.commons.io.FileUt ... -
google 集合类 -loadcache-弱引用
2012-10-31 17:45 912google 集合类 l ... -
awk 交集 并集 累加
2012-10-17 18:55 3691这段时间多亏大家的帮助,利用awk命令解决了很多问题,在此也总 ... -
Shuffle-我能找到的最详细的文档-(转)
2012-09-11 16:02 906MapReduce:详解Shuffle过程 ... -
自动化运维系统雏形
2012-09-07 17:43 1007java+python+robbitMQ+subprocess ... -
ping 监控+监控网络状况+监控服务器运行状态
2012-08-23 09:43 1006screen ping 10.13.25.119 |whi ... -
Hadoop杂记
2012-07-31 22:35 793Hadoop杂记 namenode(hdfs)+jobtra ... -
hadoop添加垃圾回收站 管用
2012-07-31 19:24 805hadoop添加垃圾回收站 管用 在core-site.xm ... -
hadoop集群管理之 SecondaryNameNode和NameNode(转)
2012-07-31 19:13 917光从字面上来理解 ... -
hadoop hive zookeeper 还不够
2012-07-24 18:03 1372hadoop hive zookeeper 还不够 好久不 ... -
linux 性能分析工具汇总(转 ) (2012-02-24 11:57)
2012-02-24 13:49 947linux 性能分析工具汇总(转 ) (2012-02-24 ... -
java try catchfinaly throws throw return 关系 终于搞明白了.
2012-02-24 01:40 3614package com.easou.cas06proxytes ...
相关推荐
1.2.2章节中,我们探讨了Map和Reduce的执行流程以及中间数据的管理。 然而,1.3章节提出了一个疑问:Hadoop是否真的如传说中那么完美?实际上,Hadoop在处理小规模数据和实时查询时效率较低,且存在一定的延迟问题...
本系统的研究意义在于,Hadoop平台是一个对大规模数据进行分布式处理的软件框架,主要由HDFS分布式文件系统和Map-Reduce编程模型两大核心模块构成。搭载Hadoop的分布式架构使得系统具有良好的可扩展性和伸缩性,可以...
这份调研报告可能是针对电力行业如何利用大数据技术进行高效处理、存储和分析,以优化运营、提高效率、保障电网稳定运行等方面的研究。 报告提到了几个关键概念和技术: 1. **大数据容量单位**:PB(Petabyte)、...
5. **MapReduce编程**:编写Map和Reduce函数处理数据,例如统计用户活跃度、分析玩家行为模式、检测异常行为等。 6. **数据分析算法**:应用统计和机器学习算法,如聚类、分类、关联规则等,发现数据中的模式和趋势...
MapReduce将大型任务拆分成小任务(map阶段),在多台机器上并行处理,然后通过reduce阶段整合结果。这种并行计算模式极大地提升了处理效率。此外,Hadoop生态还包括如HBase这样的NoSQL数据库,用于实时查询,以及...
- **MapReduce** 是一种编程模型,用于大规模数据集的并行计算,分为Map阶段(数据分发和预处理)和Reduce阶段(聚合和总结信息)。 2. **Eucalyptus** 是一个开放源代码的云计算平台,它允许用户在现有的IT基础...