Hadoop 任务分解

从高层看,有四个独立的实体:

 

- 客户端,提交MapReduce任务

- jobtracker,协调任务的运行。jobtracker是一个Java应用,它的主类是JobTracker

- tasktrackers,运行被分割的任务。tasktrackers是一个Java应用,它的主类是TaskTracker

- 分布式文件系统(通常是HDFS),用来在其它实体之间共享文件

 

Job提交

 

JobClient中的runjob()方法是一个创建JobClient实例并调用它的submitJob()方法,在提交job之后,runJob()一秒钟获取一次任务执行进度的报告,并且在与上次报告不同的情况下,像控制台发送进度信息。当任务完成,如果是成功的,job计数器显示出来。否则,任务中引发错误的原因被记录到控制台上。

 

JobClient的submitJob()方法实现了任务提交过程,它做了如下的工作:

 

- 向jobtracker询问一个新的job ID(通过调用JobTracker上的getNewJobId())

- 检查job的输出明细。比如,输出目录不存在或者指定的输出目录是否已经存,这样,这个任务就不会被提交并返回一个错误给   MapReduce程序。

- 计算任务的输入分割。如果不能计算分割,比如,没有指定输入路径,然后这个任务就不会被提交并返回一个错误给MapReduce   程序

- 拷贝这个任务运行所需要的资源——包括任务的jar文件,配置文件,还有计算出的输入分割——到jobtracker的一个目录下,这   个目录以这个job ID开始。任务jar以一个高的复制因子被复制(通过mapred.submit.replication属性来设置,默认是10),   这样当它们为这个job运行tasks的时候,在集群中就有很多的拷贝。

- 告诉jobtracker,任务已经准备好运行(通过调用JobTracker的submitJob())

 

Job初始化

 

当JobTracker的submitJob()方法被调用后,它将它放在一个内部队列里,job计划会提取它并初始化它。初始化涉及创建一个代表正在运行的job的对象,这个对象封装了它的tasks,并获取相关信息来跟踪tasks的状态和进度。

 

创建一个要运行的tasks列表,job计划首先取出JobClient从共享文件系统中计算出来的输入分割。然后为每个分割创建一个map。reduce task的个数是由JonConf的mapred.reduce.tasks属性设定的,通过setNumReducetasks()方法来设定,然后计划就简单地创建这个数量的reduce task。tasks这个时候就被分配ID了。

 

Task分配

 

TaskTrackers运行一个循环,周期性的向jobtracker发送心跳。心跳向jobtracker证明这个tasktracker是活着的,但是它们也作为信息的一个通道。作为心跳的一部分,一个tasktracker说明是否为一个新的task的运行做好了准备,如果做好了,jobtracker将安排一个task,并且通过心跳的返回值来和tasktracker通信。

 

jobtracker在能够选择一个任务给一个tasktracker之前,jobtracker必须选择一个job来提取task。有很多的计划算法,默认的是简单地维护一个优先级的job列表。选择一个job之后,jobtracker就开始选择这个job的task。

 

Tasktrackers有固定数量的map和reduce槽:比如,一个tasktracker可能能并行运行两个map任务和2个reduce任务。默认的计划是在reduce任务槽填满之前填满map task槽,所以如果tasktracker有至少一个map任务槽,jobtracker将选择一个map任务;否则,将选择一个reduce任务。

 

要选择一个reduce任务,jobtracker简单的从它的准备好执行的reduce任务列表中抽取下一个,因为这里没有数据位置的考虑。然而,对于一个map任务,要考虑tasktracker的网络位置并选择一个与tasktracker最近的输入分割。乐观情况下,任务是rack-local的:和这个分割在同一个rack上,但是不是同样的节点。一些task既不是data-local也不是rack-local,而是从不同的任务在运行的rack上获取数据。你可以通过查看一个job的counters读到每种类型task的比例。

 

任务执行

 

现在这个tasktracker已经被分配了task,下一步它就要运行这个task了。首先,它通过将job jar包从共享文件系统拷贝到tasktracker

的文件系统上。它也从分布式缓存拷贝任何这个应用需要的文件到本地磁盘;第二,它为这个task创建一个本地工作目录,解压jar的内容到这个

目录下;第三,创建一个TaskRunner实例来运行这个task。

 

TaskRunner载入一个新的java虚拟机来运行每个task,所以用户定义的map和reduce中有任何的bug都不会影响到tasktracker。然而

,可以在task间重用JVM。

 

子进程和父进程通过umbilical接口通信。通过这种方式它每隔几秒钟告诉父进程这个task的进度,直到task完毕。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 初识Hadoop 数据!数据! 数据存储与分析 与其他系统相比 关系型数据库管理系统 网格计算 志愿计算 1.3.4 Hadoop 发展简史 Apache HadoopHadoop生态圈 第2章 关于MapReduce 一个气象数据集 数据的格式 使用Unix工具进行数据分析 使用Hadoop分析数据 map阶段和reduce阶段 横向扩展 合并函数 运行一个分布式的MapReduce作业 Hadoop的Streaming Ruby版本 Python版本 Hadoop Pipes 编译运行 第3章 Hadoop分布式文件系统 HDFS的设计 HDFS的概念 数据块 namenode和datanode 命令行接口 基本文件系统操作 Hadoop文件系统 接口 Java接口 从Hadoop URL中读取数据 通过FileSystem API读取数据 写入数据 目录 查询文件系统 删除数据 数据流 文件读取剖析 文件写入剖析 一致模型 通过 distcp并行拷贝 保持 HDFS 集群的均衡 Hadoop的归档文件 使用Hadoop归档文件 不足 第4章 Hadoop I/O 数据完整性 HDFS的数据完整性 LocalFileSystem ChecksumFileSystem 压缩 codec 压缩和输入切分 在MapReduce中使用压缩 序列化 Writable接口 Writable类 实现定制的Writable类型 序列化框架 Avro 依据文件的数据结构 写入SequenceFile MapFile 第5章 MapReduce应用开发 配置API 合并多个源文件 可变的扩展 配置开发环境 配置管理 辅助类GenericOptionsParser,Tool和ToolRunner 编写单元测试 mapper reducer 本地运行测试数据 在本地作业运行器上运行作业 测试驱动程序 在集群上运行 打包 启动作业 MapReduce的Web界面 获取结果 作业调试 使用远程调试器 作业调优 分析任务 MapReduce的工作流 将问题分解MapReduce作业 运行独立的作业 第6章 MapReduce的工作机制 剖析MapReduce作业运行机制 作业的提交 作业的初始化 任务的分配 任务的执行 进度和状态的更新 作业的完成 失败 任务失败 tasktracker失败 jobtracker失败 作业的调度 Fair Scheduler Capacity Scheduler shuffle和排序 map端 reduce端 配置的调优 任务的执行 推测式执行 重用JVM 跳过坏记录 任务执行环境 第7章 MapReduce的类型与格式 MapReduce的类型 默认的MapReduce作业 输入格式 输入分片与记录 文本输入 二进制输入 多种输入 数据库输入(和输出) 输出格式 文本输出 二进制输出 多个输出 延迟输出 数据库输出 第8章 MapReduce的特性 计数器 内置计数器 用户定义的Java计数器 用户定义的Streaming计数器 排序 准备 部分排序 总排序 二次排序 联接 map端联接 reduce端联接 边数据分布 利用JobConf来配置作业 分布式缓存 MapReduce库类 第9章 构建Hadoop集群 集群规范 网络拓扑 集群的构建和安装 安装Java 创建Hadoop用户 安装Hadoop 测试安装 SSH配置 Hadoop配置 配置管理 环境设置 Hadoop守护进程的关键属性 Hadoop守护进程的地址和端口 Hadoop的其他属性 创建用户帐号 安全性 Kerberos和Hadoop 委托令牌 其他安全性改进 利用基准测试程序测试Hadoop集群 Hadoop基准测试程序 用户的作业 云上的Hadoop Amazon EC2上的Hadoop 第10章 管理Hadoop HDFS 永久性数据结构 安全模式 日志审计 工具 监控 日志 度量 Java管理扩展(JMX) 维护 日常管理过程 委任节点和解除节点 升级 第11章 Pig简介 安装与运行Pig 执行类型 运行Pig程序 Grunt Pig Latin编辑器 示例 生成示例 与数据库比较 PigLatin 结构 语句 表达式 1.4.4 类型 模式 函数 用户自定义函数 过滤UDF 计算UDF 加载UDF 数据处理操作 加载和存储数据 过滤数据 分组与连接数据 对数据进行排序 组合和分割数据 Pig实战 并行处理 参数代换 第12章 Hive 1.1 安装Hive 1.1.1 Hive外壳环境 1.2 示例 1.3 运行Hive 1.3.1 配置Hive 1.3.2 Hive服务 1.3.3 Metastore 1.4 和传统数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值