- 浏览: 306422 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (165)
- hadoop (47)
- linux (11)
- nutch (7)
- hbase (7)
- solr (4)
- zookeeper (4)
- J2EE (1)
- jquery (3)
- java (17)
- mysql (14)
- perl (2)
- compass (4)
- suse (2)
- memcache (1)
- as (1)
- roller (1)
- web (7)
- MongoDB (8)
- struts2 (3)
- lucene (2)
- 算法 (4)
- 中文分词 (3)
- hive (17)
- noIT (1)
- 中间件 (2)
- maven (2)
- sd (0)
- php (2)
- asdf (0)
- kerberos 安装 (1)
- git (1)
- osgi (1)
- impala (1)
- book (1)
- python 安装 科学计算包 (1)
最新评论
-
dandongsoft:
你写的不好用啊
solr 同义词搜索 -
黎明lm:
meifangzi 写道楼主真厉害 都分析源码了 用了很久. ...
hadoop 源码分析(二) jobClient 通过RPC 代理提交作业到JobTracker -
meifangzi:
楼主真厉害 都分析源码了
hadoop 源码分析(二) jobClient 通过RPC 代理提交作业到JobTracker -
zhdkn:
顶一个,最近也在学习设计模式,发现一个问题,如果老是看别人的博 ...
Java观察者模式(Observer)详解及应用 -
lvwenwen:
木南飘香 写道
高并发网站的架构
taskTracker 生成map reduce 任务详解
1. 启动 TaskTracker ,执行main方法 new TaskTracker(conf) 启动taskTracker
2. taskTrack 构造方法初始化变量
mapred.tasktracker.map.tasks.maximum taskTracker 可launch 的最大map数 默认是2
mapred.tasktracker.map.tasks.maximum taskTracker 可launch 的最大reduce数 默认是2
mapred.disk.healthChecker.interval 磁盘健康度检查时间间隔 mills 默认是60*1000
构造rpc 链接jobTACKER
tasktracker.http.threads taskTracker 工作线程数,默认是40 ,copy数据的线程数
initialize(); 构造方法,该方法是一个独立于taskTracker的方法,可循环调用,在taskTracker 处于关闭状态时 仍可用
该方法主要用户构造一些 运行时目录 和心跳RPC 信息初始化分布式缓存开发map任务监听线程 初始化new TaskLauncher() 启动map 和reduce 任务抓取线程
下面详细的讲一下TaskLauncher类,该类为taskTracker 类的内部类,在启动taskTracker 的时候 通过独立的initialize()方法启动.
该类是一个线程类.通过addToTaskQueue() 方法将新的任务添加到 tasksToLaunch list (List<TaskInProgress> tasksToLaunch)中,这个list 很重要,jobTracker将需要job 通过assginTaks 将需要执行的task 通过心跳信息 传给taskTracker,taskTracker 的run()方法调用offerService()解析心跳信息,将解析得来的task执行信息 添加到这个list中, 然后启动run方法 时刻去查看 tasksToLaunch list中是不是有新的 任务放进来.r如果有则去执行,如果没有则调用tasksToLaunch.wait(); 等待.调用startNewTask 方法调用launchTaskForJob() 通过调用 launchTask 去执行map 和reduce任务, launchTask 要判断任务的状态. UNASSIGNED FAILED_UNCLEAN KILLED_UNCLEAN RUNNING
TaskTracker 主要是通过监听jobTracker 通过心跳信息传过来的task任务放在 task的队中 去执行task.
在这个过程中 还会有一些 例如 numFreeSlots 的判断 ,tip 完全是 同步的,等等
jobTracker 通过调用JobQueueTaskScheduler的assginTasks()方法 分配task,两种方式 生成tak
obtainNewNodeOrRackLocalMapTask 和obtainNewNonLocalMapTask
obtainNewNodeOrRackLocalMapTask 即为hadoop 机架感知功能,调度的时候根据location 因素去分配taskTracker
obtainNewNodeOrRackLocalMapTask 非机架感知
1. 启动 TaskTracker ,执行main方法 new TaskTracker(conf) 启动taskTracker
2. taskTrack 构造方法初始化变量
mapred.tasktracker.map.tasks.maximum taskTracker 可launch 的最大map数 默认是2
mapred.tasktracker.map.tasks.maximum taskTracker 可launch 的最大reduce数 默认是2
mapred.disk.healthChecker.interval 磁盘健康度检查时间间隔 mills 默认是60*1000
构造rpc 链接jobTACKER
tasktracker.http.threads taskTracker 工作线程数,默认是40 ,copy数据的线程数
initialize(); 构造方法,该方法是一个独立于taskTracker的方法,可循环调用,在taskTracker 处于关闭状态时 仍可用
该方法主要用户构造一些 运行时目录 和心跳RPC 信息初始化分布式缓存开发map任务监听线程 初始化new TaskLauncher() 启动map 和reduce 任务抓取线程
synchronized void initialize() throws IOException, InterruptedException { this.fConf = new JobConf(originalConf); // 绑定地址.taskTracker 的地址 绑定到rpc中 为传送心跳信息做准备 String address = NetUtils.getServerAddress(fConf, "mapred.task.tracker.report.bindAddress", "mapred.task.tracker.report.port", "mapred.task.tracker.report.address"); InetSocketAddress socAddr = NetUtils.createSocketAddr(address); String bindAddress = socAddr.getHostName(); int tmpPort = socAddr.getPort(); //初始化jvm 管理类 this.jvmManager = new JvmManager(this); // RPC 初始化 int max = maxMapSlots > maxReduceSlots ? maxMapSlots : maxReduceSlots; //set the num handlers to max*2 since canCommit may wait for the duration //of a heartbeat RPC //此处taskTracker 汇报的 处理任务的slot 在实际的基础上*2,因为在心跳汇报的阶段传输这段时间会空出来一部分slot.在新的heartbeat 过来的时候 有2倍的slot处理能力 this.taskReportServer = RPC.getServer(this, bindAddress, tmpPort, 2 * max, false, this.fConf, this.jobTokenSecretManager); this.taskReportServer.start(); // 初始化分布式缓存,在写mr代码的时候 讲一个文件写入DistributedCache 的时候, DistributedCache 在这个位置进行初始化 this.distributedCacheManager = new TrackerDistributedCacheManager( this.fConf, taskController); // start the thread that will fetch map task completion events //在该位置启动 map和reduce任务的处理线程 this.mapEventsFetcher = new MapEventsFetcherThread(); mapEventsFetcher.setDaemon(true); mapEventsFetcher.setName( "Map-events fetcher for all reduce tasks " + "on " + taskTrackerName); mapEventsFetcher.start(); //这里 初始化了两个类TaskLauncher reduce 和map 这两个类是具体的 生成map和reduce 的任务类. mapLauncher = new TaskLauncher(TaskType.MAP, maxMapSlots); reduceLauncher = new TaskLauncher(TaskType.REDUCE, maxReduceSlots); mapLauncher.start(); reduceLauncher.start();
下面详细的讲一下TaskLauncher类,该类为taskTracker 类的内部类,在启动taskTracker 的时候 通过独立的initialize()方法启动.
该类是一个线程类.通过addToTaskQueue() 方法将新的任务添加到 tasksToLaunch list (List<TaskInProgress> tasksToLaunch)中,这个list 很重要,jobTracker将需要job 通过assginTaks 将需要执行的task 通过心跳信息 传给taskTracker,taskTracker 的run()方法调用offerService()解析心跳信息,将解析得来的task执行信息 添加到这个list中, 然后启动run方法 时刻去查看 tasksToLaunch list中是不是有新的 任务放进来.r如果有则去执行,如果没有则调用tasksToLaunch.wait(); 等待.调用startNewTask 方法调用launchTaskForJob() 通过调用 launchTask 去执行map 和reduce任务, launchTask 要判断任务的状态. UNASSIGNED FAILED_UNCLEAN KILLED_UNCLEAN RUNNING
TaskTracker 主要是通过监听jobTracker 通过心跳信息传过来的task任务放在 task的队中 去执行task.
在这个过程中 还会有一些 例如 numFreeSlots 的判断 ,tip 完全是 同步的,等等
jobTracker 通过调用JobQueueTaskScheduler的assginTasks()方法 分配task,两种方式 生成tak
obtainNewNodeOrRackLocalMapTask 和obtainNewNonLocalMapTask
obtainNewNodeOrRackLocalMapTask 即为hadoop 机架感知功能,调度的时候根据location 因素去分配taskTracker
obtainNewNodeOrRackLocalMapTask 非机架感知
发表评论
-
博客地址变更
2013-08-16 10:29 1220all the guys of visiting the bl ... -
hadoop 源码分析(六)hadoop taskTracker 生成map 和reduce任务流程
2013-04-09 17:33 0taskTracker 生成map reduce ... -
hadoop 源码分析(五)hadoop 任务调度TaskScheduler
2013-04-01 11:07 3947hadoop mapreduce 之所有能够实现job的运行 ... -
hadoop 源码分析(四)JobTracker 添加job 到schduler 队列中
2013-03-29 18:37 2882启动 JobTracker 1. 进入main方法: ... -
hadoop 源码分析(三) hadoop RPC 机制
2013-03-28 15:13 2415Hadoop 通信机制采用自己编写的RPC. 相比于 ... -
hadoop 源码分析(二) jobClient 通过RPC 代理提交作业到JobTracker
2013-03-27 12:57 38021.JobClient 客户端类 通过 ... -
hadoop 源码分析(一) jobClient 提交到JobTracker
2013-03-26 13:41 3620Hadoop 用了2年多了.从最初一起创业的 ... -
RHadoop 安装教程
2013-02-01 17:18 1632RHadoop 环境安装 硬件: centos6 ... -
pig
2012-11-16 19:28 1218转自:http://www.hadoopor.c ... -
hadoop与hive的映射
2012-11-15 10:21 2375hadoop与hive的映射 ... -
hadoop distcp
2012-07-31 10:00 2830hadoop distcp 使用:distcp ... -
MapReduce中Mapper类和Reducer类4函数解析
2012-07-20 18:05 2130MapReduce中Mapper类和Reducer类4函数解析 ... -
hadoop metrics 各参数解释
2012-07-17 18:59 1517hadoop metrics 各参数解释 研究使用hadoo ... -
Hbase几种数据入库(load)方式比较
2012-07-17 14:52 13881. 预先生成HFile入库 这个地址有详细的说明http:/ ... -
Hadoop客户端环境配置
2012-05-11 14:59 1777Hadoop客户端环境配置 1. 安装客户端(通过端用户可以 ... -
hadoop 通过distcp进行并行复制
2012-05-02 15:25 2483通过distcp进行并行复制 前面的HDFS访问模型都集中于 ... -
linux crontab 执行hadoop脚本 关于hadoop环境变量引入
2012-04-10 12:11 0crontab问题 crontab的特点:PATH不全和无终 ... -
hadoop fs 命令封装
2012-04-09 09:39 0hadoop fs 命令封装 #!/usr/bin/env ... -
map-reduce编程核心问题
2012-02-22 13:38 12801-How do we break up a large p ... -
Hadoop Archives
2012-02-17 14:25 0Hadoop Archives 什么是Hadoop arch ...
相关推荐
- 源码解析:深入Hadoop源码,研究如NameNode、DataNode、MapTask和ReduceTask等关键类的功能实现。 - 故障恢复和容错机制:探讨Hadoop如何处理硬件故障,保持数据完整性。 - 性能调优:学习如何通过调整参数和...
- ** Shuffle与Sort**:reduce阶段前,Map输出会被排序和分区,这个过程称为Shuffle,确保相同键值的数据被同一reduce任务处理。 4. **Hadoop源码分析** 深入源码可以了解Hadoop内部的工作细节,例如: - **...
然后,JobTracker会将作业分解为多个Map任务和Reduce任务,依据数据本地性原则分配到合适的TaskTracker节点上。TaskTracker接收到任务后,启动TaskInProgress对象来管理任务的生命周期。 Map阶段的源码中,我们能...
- **TaskTracker**:每个TaskTracker是一个工作节点,负责执行具体的Map和Reduce任务。 - **DataNode**:存储实际的数据,Map-Reduce作业从这里读取输入数据并写入输出数据。 #### 四、Eclipse与Hadoop集群连接 ...
MapReduce则负责数据的处理,通过将任务分解为“映射”(map)和“化简”(reduce)两部分,实现了大规模数据的并行计算。 Hadoop脚本通常涉及以下几个关键环节: 1. **配置文件**:如`core-site.xml`, `hdfs-site...
例如,`org.apache.hadoop.mapred.MapTask`和`org.apache.hadoop.mapreduce.ReduceTask`分别对应Map和Reduce任务的实现,开发者可以通过阅读这些源码了解任务执行的详细流程。 7. **工具集成**:有许多开源工具可以...
这些组件的源码分析能让你理解Hadoop如何进行分布式任务调度和资源管理。 **HDFS(Hadoop Distributed File System)**是Hadoop的数据存储系统,它以高容错性和高可扩展性著称。HDFS通过**NameNode**来管理文件系统...
源码中,Map函数和Reduce函数的执行逻辑,以及中间结果的分区和排序是核心部分。 3. **Shuffle & Merge**:Map任务的输出会被分发到Reducer,这个过程称为shuffle。源码中,shuffle阶段的数据传输、排序和合并机制...
Job被分解为多个Map任务(M1、M2、M3)和Reduce任务(R1、R2),这些任务由TaskTracker监控并在独立的Java虚拟机中执行。 Map阶段中,InputFormat接口描述了输入数据的格式,比如ASCII文件或JDBC数据库,...
《Hadoop源码分析》是一本深度探讨Hadoop核心组件HDFS和MapReduce的书籍,提供了高清版的PDF格式供读者学习。这本书共分为55章,其中41章专门致力于HDFS(Hadoop分布式文件系统)的解析,剩余14章则详细剖析了...
在阅读Hadoop源码时,除了分析这些关键类,还需要理解Hadoop的整个工作流程,包括数据分片、任务划分、数据本地化策略、心跳机制等。同时,理解Hadoop的Shuffle和Sort过程,这对于优化MapReduce作业性能至关重要。...
源码包含了JobTracker、TaskTracker、Task等核心组件,以及作业提交、任务调度和容错机制的实现。 3. **YARN(Yet Another Resource Negotiator)**:从Hadoop 2.x开始,资源管理从MapReduce中剥离出来,形成了独立...
通过以上步骤,初学者可以逐步熟悉Windows环境下Hadoop的安装、配置和开发流程,从而顺利入门Map/Reduce编程。随着经验的增长,可以进一步探索更复杂的数据处理任务和优化策略,如Combiner的使用、Shuffle和Sort过程...
- Reduce阶段:`Reducer`类处理reduce任务,用户自定义的reduce函数聚合map阶段的结果,产生最终输出。 - JobTracker与TaskTracker:在旧版Hadoop中,JobTracker负责任务调度和资源管理,TaskTracker执行具体任务...
通过对这些源码的深入研究,你不仅可以掌握Hadoop的基本工作流程,还能了解到分布式系统的设计理念和实现细节,这对于提升你的大数据处理技能大有裨益。在实践中,你还可以尝试修改源码,观察其对系统行为的影响,...
- **任务调度**:根据资源可用性及优先级等因素,将作业分解成多个任务(Map和Reduce任务),并分配给合适的TaskTracker进行执行。 - **状态监控**:跟踪所有TaskTracker的状态,以及各个任务的执行情况,确保作业...