- 浏览: 382520 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 47922个线程 1个打包 1个指挥 20个负责生产左右鞋. ... -
Java内部类的使用小结
2014-05-30 10:00 847内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相 ... -
crontabl -e
2013-12-19 14:41 672SHELL=/bin/bash PATH=/sbin:/bin ... -
神器gdb(整合)
2013-06-15 14:54 1608来源:http://fanqiang.chinaunix.ne ... -
一种高效无锁内存队列的实现
2013-02-05 18:21 5337Disruptor是LMAX公司开源的一个高效的内存无锁队列 ... -
java io nio 区别和联系.
2013-02-05 18:08 4264IO ... -
Paxos-基于消息的分布式一致性
2012-12-04 11:16 787描述了这样一个场景, ... -
IntelliJ
2012-11-19 16:07 816使用了一段时间的Intelli ... -
利用 org.apache.commons.io.FileUtils快速读写文件(转)
2012-11-07 12:25 2919利用 org.apache.commons.io.FileUt ... -
google 集合类 -loadcache-弱引用
2012-10-31 17:45 903google 集合类 l ... -
awk 交集 并集 累加
2012-10-17 18:55 3682这段时间多亏大家的帮助,利用awk命令解决了很多问题,在此也总 ... -
Shuffle-我能找到的最详细的文档-(转)
2012-09-11 16:02 895MapReduce:详解Shuffle过程 ... -
自动化运维系统雏形
2012-09-07 17:43 994java+python+robbitMQ+subprocess ... -
ping 监控+监控网络状况+监控服务器运行状态
2012-08-23 09:43 994screen ping 10.13.25.119 |whi ... -
Hadoop杂记
2012-07-31 22:35 782Hadoop杂记 namenode(hdfs)+jobtra ... -
hadoop添加垃圾回收站 管用
2012-07-31 19:24 793hadoop添加垃圾回收站 管用 在core-site.xm ... -
hadoop集群管理之 SecondaryNameNode和NameNode(转)
2012-07-31 19:13 907光从字面上来理解 ... -
hadoop hive zookeeper 还不够
2012-07-24 18:03 1357hadoop hive zookeeper 还不够 好久不 ... -
linux 性能分析工具汇总(转 ) (2012-02-24 11:57)
2012-02-24 13:49 920linux 性能分析工具汇总(转 ) (2012-02-24 ... -
java try catchfinaly throws throw return 关系 终于搞明白了.
2012-02-24 01:40 3594package com.easou.cas06proxytes ...
相关推荐
Hadoop-Eclipse-Plugin-3.1.1是一款专为Eclipse集成开发环境设计的插件,用于方便地在Hadoop分布式文件系统(HDFS)上进行开发和调试MapReduce程序。这款插件是Hadoop生态系统的组成部分,它使得Java开发者能够更加...
MapReduce则是一种编程模型,用于大规模数据集的并行计算,它将复杂计算任务分解为“映射”(map)和“化简”(reduce)两部分,便于分布式执行。 **Hadoop在Windows上的安装与配置** 在Windows上使用Hadoop通常...
Hadoop-eclipse-plugin是Hadoop生态系统中的一个重要工具,它允许开发者使用Eclipse IDE直接在Hadoop集群上开发、测试和部署MapReduce程序。这个插件极大地简化了Hadoop应用程序的开发流程,使得Java开发者能够利用...
Apache Hadoop (hadoop-3.3.4.tar.gz)项目为可靠、可扩展的分布式计算开发开源软件。官网下载速度非常缓慢,因此将hadoop-3.3.4 版本放在这里,欢迎大家来下载使用! Hadoop 架构是一个开源的、基于 Java 的编程...
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-eclipse2.7.1、hadoop-eclipse2.7.2、hadoop-eclipse2.7.3"代表了Hadoop-Eclipse插件的三个不同版本,每个版本对应Hadoop框架的2.7.x系列。版本号的递增通常意味着修复了前一版本的错误,增加了新...
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-2.7.2是Hadoop开发者不可或缺的工具,它极大地简化了Hadoop应用的开发流程,提高了开发效率。通过Eclipse的可视化界面和丰富的功能,开发者可以更专注于业务逻辑,而无需担忧底层的...
在安装Hadoop-Eclipse-Plugin-2.6.4.jar之后,开发者可以通过Eclipse的"New -> Project"菜单选择"Hadoop Map/Reduce Project"选项来创建新的MapReduce项目。这个过程会自动为项目设置合适的构建路径和依赖项,使得...
这个压缩包中的 `flink-shaded-hadoop-2-uber-2.7.5-10.0.jar` 文件,是 Flink 针对 Hadoop 2.7.5 版本的“Uber JAR”,它是将多个依赖库打包在一起的单一 JAR 文件,旨在简化部署和运行流程。 首先,我们来理解...
本文将深入探讨如何使用Eclipse IDE结合hadoop-eclipse-plugin-2.6.0.jar插件,实现在Windows环境下进行远程连接到Hadoop集群,尤其适用于64位操作系统。 首先,我们要理解Hadoop的核心概念。Hadoop是由Apache基金...
hadoop-eclipse-plugin-2.7.4.jar和hadoop-eclipse-plugin-2.7.3.jar还有hadoop-eclipse-plugin-2.6.0.jar的插件都在这打包了,都可以用。
在这个"apache-hadoop-3.1.3-winutils-master.zip"压缩包中,包含了在Windows环境下配置Hadoop HDFS客户端所需的组件,特别是`hadoop-winutils`和`hadoop.dll`这两个关键文件,它们对于在Windows系统上运行Hadoop...
运行步骤: 1.在E盘建立apps目录,然后解压到此处。 2.把安装的jdk整个目录也拷贝到这里。...8.出现启动失败,请删除E:\apps\hadoop-2.7.7\work\下各个目录的内容,再次执行步骤6和7 有问题可邮箱联系:zan0072@163.com
hadoop-common-2.7.2.jar
hadoop-eclipse-plugin.jar插件基于Ubuntu18.04和Hadoop-3.2.1编译的,最后可以在eclipse创建Map Reduce文件
在下载hadoop-2.7.3.tar.gz这个压缩包后,用户可以解压得到Hadoop的源代码、配置文件、可执行二进制文件等。解压命令通常是在终端输入`tar -zxvf hadoop-2.7.3.tar.gz`。解压后,用户需要根据自己的系统环境进行适当...
hadoop-common-2.7.3.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-...