- 浏览: 358975 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
希恩杰:
采样器的目的是啥?使数据均匀分布到所有分区?使key的数量均匀 ...
Hadoop深入学习:Hadoop全排序中的Sampler采样器 -
lawlietwf:
三篇文章中有两篇链接地址一样,po主看下
Hadoop中的快速排序算法 -
坏小四:
...
《Hbase权威指南》深入学习hbase:表,列族,列标识,版本和cell -
fbwfbi:
发现使用pika-0.9.13的版本依然出错:Tracebac ...
RabbitMQ:使用python发布/订阅消息 -
hehu158:
centos6.5 chmod +x qq2012.tra.g ...
CentOS 6.4安装qq2012
在本节中,我们特别来学习一些有心跳(HeartBeat)的相关知识,这包括用途、心跳的发送、接收和应答。
JobTracker和TaskTracker之间是通过心跳来进行信息沟通的,TaskTracker通过周期性的通过心跳向JobTracker汇报该节点和任务的状态。心跳实际上就是一个RPC函数,在Hadoop中,心跳主要有三个作用:
1)、判断TaskTracker是否还活着;
2)、JobTracker及时获得各个TaskTracker节点上资源的使用情况和任务运行状态;
3)、给TaskTracker分配任务。
那么,心跳是由谁发起的呢?JobTracker从不会主动的向TaskTracker发送任何的信息,而是由TaskTracker节点主动通过心跳来向JobTracker获取属于自己的信息,JobTracker只能通过心跳应答的形式为各个TaskTracker分配任务。
TaskTracker周期性的调用RPC函数hearbeat()向JobTracker汇报信息和领取任务,该函数定义如下:
TaskTracker发送心跳后,会领取JobTracker给TaskTracker下达的一些命令信息即HeartbeatResponse对象。在该方法内部,主要涉及两个业务逻辑:更新状态和下达命令。JobTracker首先将TaskTracker汇报的该接点的最新的运行状态做更新,然后根据这些状态和其他需求给TaskTracker下相应的操作命令。
下面我们主要看看JobTracker给TaskTracker下达的封装在HeartbeatResponse对象中都主要有什么信息? HeartbeatResponse对象主要有两部分的信息
1)、下达给TaskTracker的命令。
JobTracker将给TaskTracker的命令封装成TaskTrackerAction类,我们来看一看该类中主要相关信息:
我们再来看一下这几个命令:
(1)、ReinitTrackerAction
JobTracker收到TaskTracker发送的心跳后,先检查一致性,如果发现有异常则会要求TaskTracker重新对自己进行初始化操作,已恢复到一致状态。这些以执行包括丢失上次心跳应答信息和丢失TaskTracker的状态信息。
(2)、LaunchTaskAction
LaunchTaskAction封装了JobTracker给TaskTracker分配的新任务。
(3)、KillTaskAction
KillTaskAction封装了JobTracker需要杀死的任务。JobTracker接到该命令后会杀死对应的任务、清理工作目录和释放任务占有的slot资源。
(4)、KillJobAction
KillJobAction封装了JobTracker待清理的作业。
(5)、CommitTaskAction
CommitTaskAction类封装了JobTracker需要提交的任务。为了防止同一个TaskInProgress的两个同时运行的Task Attempt(推测式执行)同时向一个文件写数据而发生冲突,Hadoop让每一个Task Attempt写到${mapred.output.dir}/_temporary下的一个单独的文件中,当某个Task Attempt运行完成后,再将运行结果移到最终的输出目录${mapred.output.dir}中。
Hadoop讲一个成功运行完成的Task Attempt的结果文件从临时目录移动到最终输出目录的过程,叫“任务提交”。
2)、下次汇报心跳的时间。
TaskTracker的心跳发送时间是由JobTracker决定的,在心跳应答中下达给TaskTracker,心跳之间的时间间隔并不是固定不变的,会随着集群规模而动态调整。
在MapReduce中,只有JobTracker直到某一时刻的集群的规模,因此由JobTracker为每一个TaskTracker计算下一次的心跳汇报时间,并通过心跳机制告诉TaskTracker。心跳间隔应该大小适度:如果太小则JobTracker需要处理更高的并发心跳连接请求,这必然会给JobTracker找出不晓得并发压力,如果太大,则空闲资源不能被充分利用,进而降低系统吞吐率。
JobTracker允许通过参数来设置心跳时间的加速比,即通过mapred.heartbeats.in.second和mapreduce.jobtracker.heartbeats.scaling.factor两个参数来调整心跳时间间隔时间。同时为了防止用户参数设置不合理而对JobTracker产生较大负载,间隔时间至少为3秒。
JobTracker和TaskTracker之间是通过心跳来进行信息沟通的,TaskTracker通过周期性的通过心跳向JobTracker汇报该节点和任务的状态。心跳实际上就是一个RPC函数,在Hadoop中,心跳主要有三个作用:
1)、判断TaskTracker是否还活着;
2)、JobTracker及时获得各个TaskTracker节点上资源的使用情况和任务运行状态;
3)、给TaskTracker分配任务。
那么,心跳是由谁发起的呢?JobTracker从不会主动的向TaskTracker发送任何的信息,而是由TaskTracker节点主动通过心跳来向JobTracker获取属于自己的信息,JobTracker只能通过心跳应答的形式为各个TaskTracker分配任务。
TaskTracker周期性的调用RPC函数hearbeat()向JobTracker汇报信息和领取任务,该函数定义如下:
/** * The periodic heartbeat mechanism between the {@link TaskTracker} and * the {@link JobTracker}. * * The {@link JobTracker} processes the status information sent by the * {@link TaskTracker} and responds with instructions to start/stop * tasks or jobs, and also 'reset' instructions during contingencies. * @Param status: 封装了TaskTracker上的各种状态信息 * @Param restarted: TaskTracker是否刚启动 * @Param initialContact: TaskTracker是否第一次连接JobTracker * @Param acceptNewTasks: 是否接收新任务 * @Param responseId: 心跳响应编号,用于防止重复发送心跳,每接受一次心跳后,该值都加1 */ public synchronized HeartbeatResponse heartbeat(TaskTrackerStatus status, boolean restarted, boolean initialContact, boolean acceptNewTasks, short responseId) throws IOException
TaskTracker发送心跳后,会领取JobTracker给TaskTracker下达的一些命令信息即HeartbeatResponse对象。在该方法内部,主要涉及两个业务逻辑:更新状态和下达命令。JobTracker首先将TaskTracker汇报的该接点的最新的运行状态做更新,然后根据这些状态和其他需求给TaskTracker下相应的操作命令。
下面我们主要看看JobTracker给TaskTracker下达的封装在HeartbeatResponse对象中都主要有什么信息? HeartbeatResponse对象主要有两部分的信息
1)、下达给TaskTracker的命令。
JobTracker将给TaskTracker的命令封装成TaskTrackerAction类,我们来看一看该类中主要相关信息:
abstract class TaskTrackerAction implements Writable { /** * 命令类型 * Ennumeration of various 'actions' that the {@link JobTracker} * directs the {@link TaskTracker} to perform periodically. * */ public static enum ActionType { /** 运行新任务Launch a new task. */ LAUNCH_TASK, /** 杀死任务Kill a task. */ KILL_TASK, /** 杀死作业Kill any tasks of this job and cleanup. */ KILL_JOB, /** 重新初始化Reinitialize the tasktracker. */ REINIT_TRACKER, /** 提交任务Ask a task to save its output. */ COMMIT_TASK }; /** * A factory-method to create objects of given {@link ActionType}. * @param actionType the {@link ActionType} of object to create. * @return an object of {@link ActionType}. */ public static TaskTrackerAction createAction(ActionType actionType) { TaskTrackerAction action = null; switch (actionType) { case LAUNCH_TASK: { action = new LaunchTaskAction(); } break; case KILL_TASK: { action = new KillTaskAction(); } break; case KILL_JOB: { action = new KillJobAction(); } break; case REINIT_TRACKER: { action = new ReinitTrackerAction(); } break; case COMMIT_TASK: { action = new CommitTaskAction(); } break; } return action; } ... }
我们再来看一下这几个命令:
(1)、ReinitTrackerAction
JobTracker收到TaskTracker发送的心跳后,先检查一致性,如果发现有异常则会要求TaskTracker重新对自己进行初始化操作,已恢复到一致状态。这些以执行包括丢失上次心跳应答信息和丢失TaskTracker的状态信息。
(2)、LaunchTaskAction
LaunchTaskAction封装了JobTracker给TaskTracker分配的新任务。
(3)、KillTaskAction
KillTaskAction封装了JobTracker需要杀死的任务。JobTracker接到该命令后会杀死对应的任务、清理工作目录和释放任务占有的slot资源。
(4)、KillJobAction
KillJobAction封装了JobTracker待清理的作业。
(5)、CommitTaskAction
CommitTaskAction类封装了JobTracker需要提交的任务。为了防止同一个TaskInProgress的两个同时运行的Task Attempt(推测式执行)同时向一个文件写数据而发生冲突,Hadoop让每一个Task Attempt写到${mapred.output.dir}/_temporary下的一个单独的文件中,当某个Task Attempt运行完成后,再将运行结果移到最终的输出目录${mapred.output.dir}中。
Hadoop讲一个成功运行完成的Task Attempt的结果文件从临时目录移动到最终输出目录的过程,叫“任务提交”。
2)、下次汇报心跳的时间。
TaskTracker的心跳发送时间是由JobTracker决定的,在心跳应答中下达给TaskTracker,心跳之间的时间间隔并不是固定不变的,会随着集群规模而动态调整。
在MapReduce中,只有JobTracker直到某一时刻的集群的规模,因此由JobTracker为每一个TaskTracker计算下一次的心跳汇报时间,并通过心跳机制告诉TaskTracker。心跳间隔应该大小适度:如果太小则JobTracker需要处理更高的并发心跳连接请求,这必然会给JobTracker找出不晓得并发压力,如果太大,则空闲资源不能被充分利用,进而降低系统吞吐率。
JobTracker允许通过参数来设置心跳时间的加速比,即通过mapred.heartbeats.in.second和mapreduce.jobtracker.heartbeats.scaling.factor两个参数来调整心跳时间间隔时间。同时为了防止用户参数设置不合理而对JobTracker产生较大负载,间隔时间至少为3秒。
发表评论
-
CentOS 6.4 hadoop集成 Hbase Hive
2013-07-10 00:05 2358在之前的CentOS 5.4 hadoop集 ... -
CentOS 6.4 hadoop集成 Hbase Zookeeper
2013-07-09 22:41 2536再上一章中我们已经学习了Hadoop-1.0. ... -
CentOS 6.4 hadoop集成Hive
2013-07-09 01:58 2423在本节中,我们来学习如何安装Hive。在之前我 ... -
Hadoop深入学习:MapReduce Job中的Shuffle和sort
2013-07-06 22:30 1488... -
Hadoop深入学习:解析HDFS的写文件流程
2013-07-06 16:43 7315之前,我们 ... -
Hadoop深入学习:再谈MapReduce作业提交和执行
2013-07-03 22:00 2039在本章中,我们将来重温一下和Hadoop的作业 ... -
CentOS 6.4 安装伪分布式Hadoop 1.0.3
2013-07-02 00:52 2385在本章中学习如何在CentOS 6.4上安装配 ... -
Hadoop深入学习:Combiner
2013-07-04 00:03 10646在本节中,我们着重学习MapReduce编程模 ... -
Hadoop深入学习:MapReduce的Shuffle过程详解
2013-05-29 22:11 5196在本节中,我们再来仔细回顾一下MapRedu ... -
Hadoop深入学习:Hadoop全排序中的Sampler采样器
2013-05-28 18:27 4228在Partitioner组件的设计与实现中,我 ... -
Hadoop深入学习:ReduceTask详解
2013-05-28 16:16 1541本节我们来着重学习ReduceTask的内部操 ... -
Hadoop深入学习:MapTask详解
2013-05-28 15:23 4577在本节中 ... -
Hadoop深入学习:MapReduce作业提交和初始化
2013-05-27 22:24 4524之前已经学过了MapReduce接口编程模型及 ... -
Hadoop深入学习:OutputFormat组件
2013-05-27 16:45 2629在本节中,我们着重来学习一下MapReduc ... -
Hadoop深入学习:Reduce组件详解
2013-05-27 15:59 1456在本节中我们主要来学习MapReduce编程接 ... -
Hadoop深入学习:Partitioner组件的设计与实现
2013-05-27 15:31 3442本节我们来学习MapReduce编程框架中的P ... -
Hadoop深入学习:Mapper组件详解
2013-05-26 22:29 2222本节我们主要学习MapReduce编程接口模型 ... -
Hadoop深入学习:InputFormat组件
2013-05-26 22:26 8534在本节里, ... -
Hadoop深入学习:MapReduce的序列化
2013-05-26 20:27 2141在学习MapReduce ... -
Hadoop深入学习:MapReduce的编程模型
2013-05-26 19:43 1621MapReduce的一个设计目标就是易用性,它 ...
相关推荐
《Hadoop技术内幕:深入解析YARN架构设计与实现原理》是一本专注于Hadoop生态系统中资源管理和调度核心组件——YARN(Yet Another Resource Negotiator)的专著。这本书全面介绍了YARN的架构、设计思想以及实际操作...
通过深入学习《Hadoop技术内幕:深入解析YARN架构设计与实现原理》,读者可以全面了解YARN如何工作,如何解决大数据处理中的挑战,以及如何根据业务需求优化YARN配置。这将对理解Hadoop生态系统的运作、进行大数据...
4.容错机制:Hadoop通过数据复制和心跳检测等方式实现容错,确保系统的稳定性和数据的安全性。 通过对Hadoop的深入学习,开发者可以更好地利用其处理海量数据的能力,构建出高效、稳定的分布式应用。无论是在互联网...
通过深入学习HDFS和MapReduce的源码,不仅可以理解它们的工作原理,还能为优化性能、解决故障或开发新的功能提供基础。同时,这也有助于更好地适应Hadoop生态系统中其他组件的开发和运维。对于想要成为Hadoop专家的...
- **心跳机制**: TaskTracker 通过定期向 JobTracker 发送心跳信息来请求任务。 - **本地化任务**: TaskTracker 从 HDFS 中下载任务所需的资源,并在本地执行任务。 - **错误恢复**: 当 JobTracker 或 TaskTracker ...
1. HDFS:Hadoop Distributed File System是Hadoop的基础,它将大文件分割成多个块,分布在多台节点上,通过心跳机制和副本策略确保数据的安全性和可用性。在源码中,可以研究Block、DataNode、NameNode等关键类,...
5. 容错机制:探究Hadoop如何实现硬件故障的自动检测和数据恢复,如心跳检测、检查点机制等。 6. 分布式缓存:研究Hadoop如何利用分布式缓存提高应用程序的性能。 通过深入研究Hadoop源代码,开发者可以更高效地...
6. **Hadoop源码分析**:通过阅读源码,我们可以了解Hadoop内部的实现细节,如数据块的分配策略、心跳机制、故障恢复过程以及MapReduce任务的生命周期管理等。 7. **Hadoop优化**:源码学习有助于开发者进行性能...
通过这个源代码,开发者可以学习到Hadoop如何处理数据分片、心跳机制、数据复制策略、容错机制以及资源调度等核心概念。同时,也可以了解如何扩展Hadoop以适应特定的业务需求。对于希望深入Hadoop领域的开发者来说,...
通过深入学习和理解Hadoop源码,你将能够更好地驾驭这个强大的大数据处理工具,解决实际项目中的问题,甚至为Hadoop社区贡献自己的改进和优化。因此,无论你是想成为数据工程师、数据科学家还是系统管理员,这个...
7. **Hadoop的故障恢复与安全性**:Hadoop通过心跳机制和副本策略来保证数据安全和系统稳定性。同时,书中也会介绍如何实现Hadoop集群的权限管理和安全认证。 8. **实战案例**:书中包含多个实际案例,展示如何利用...
4. **源码分析**:深入Hadoop源码,可以了解如数据分块策略、Block和Packet的定义、心跳机制、故障恢复策略等细节。例如,NameNode如何处理文件操作请求,DataNode如何与NameNode通信,以及MapReduce如何调度任务。 ...
- Heartbeat机制:DataNode定期向NameNode发送心跳信号,报告其状态,确保系统能快速检测到节点故障。 - Checksum校验:HDFS通过数据校验来检测并避免数据错误。 3. MapReduce工作流程: - Map阶段:输入数据被...
5. **容错和故障恢复**:Hadoop通过心跳机制和检查点来监控NameNode和DataNode的状态,示例可能会展示如何处理节点故障和数据恢复。 6. **YARN(Yet Another Resource Negotiator)**:从Hadoop 2.x版本开始,资源...
通过阅读源码,你可以深入理解Hadoop的工作流程,例如数据分片、心跳机制、数据复制策略等。对于开发者来说,源码还可以帮助调试问题,定制功能,或者实现与Hadoop的集成。 总结来说,Hadoop源码提供了洞察其内部...
在“hadoop1-2-1源码”中,你可以深入了解HDFS的文件操作、数据块管理、心跳机制等关键功能的实现,以及MapReduce如何调度任务、分配资源、处理数据分片和容错等复杂逻辑。此外,源码还包含了各种实用工具和接口,如...
1. HDFS架构:主节点NameNode管理元数据,DataNode存储实际数据,心跳机制保证节点间的通信。 2. 数据块:HDFS将大文件切分成多个固定大小的数据块,默认为128MB,提高并行处理效率。 3. 复制策略:数据块在集群中的...
NameNode负责元数据管理,DataNode负责数据存储,源码分析可以帮助我们理解其工作原理,如BlockManager如何进行数据块分配和心跳机制。 2. **MapReduce源码**:MapReduce源码位于`hadoop-mapreduce-project/hadoop-...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它为大数据处理提供了强大的处理能力...在“hadoop 源代码归档”中,你可以找到Hadoop的所有源代码文件,通过分析这些代码,可以深入学习和掌握Hadoop的精髓。