概述

Hadoop运行作业时的整个过程如果所示。

包含如下4个独立的实体。

  • 客户端:提交MapReduce作业。
  • jobtracker:协调作业的运行。它的主类是JobTracker。
  • tasktracker:运行作业划分后的任务。它的主类是TaskTracker。
  • 分布式文件系统(一般为HDFS):用来在其他实体间共享作业文件。

作业的提交

JobClient的runJob()方法是用于新建JobClient实例并调用submitJob()方法的便捷方式。提交作业后,runJob()每秒轮询作业的进度,如果发现自上次报告后有改变,便把进度报告到控制台。作业完成后,如果成功,就显示作业计数器;如果失败,打印错误信息。

submitJob()方法的执行过程

  1. 向jobtracker请求一个新的作业ID
  2. 检查作业的输出说明。例如,如果输出目录已存在,则不提交作业,并将错误返回给MapReduce程序。
  3. 计算作业的输入分片
  4. 将运行作业所需要的资源复制到jobtracker文件系统中,以作业ID命名的目录下
  5. 告知jobtracker作业准备执行

作业的初始化

jobtracker接收到作业准备执行的信息后,交由作业调度器负责调度,并进行初始化(创建正在运行的作业的对象用来封装任务和记录信息)。为了创建任务列表,作业调度器首先获取JobClient已经计算好的输入分片信息,然后为每一个分片创建一个map任务。创建reduce任务的数量由mapred.reduce.task属性决定

任务的分配

tasktracker会定期发送heartbeat给jobtracker,并通过heartbeat告知jobtracker它是否准备好运行新任务。
对于map任务和reduce任务,tasktracker有固定数量的任务槽。默认调度器在处理reduce任务槽之前,会填满空闲的map任务槽。对于一个map任务,jobtracker会考虑数据本地化(理想情况下),当然也有可能是机架本地化。

任务的执行

任务执行过程
1. 首先将作业所需要的JAR文件复制到tasktracker,同时,tasktracker将应用程序所需要的全部文件从分布式缓存复制到本地磁盘。
2. tasktracker为任务新建一个本地工作目录,把JAR文件中的内容解压到这个目录下
3. tasktracker新建一个TaskRunner实例来运行该任务

作业的完成

当jobtracker收到作业最后一个任务已完成的通知后,便把作业的状态设置为成功。在JobClient查询状态时,便知道任务已成功完成,于是JobClient打印一条消息告知用户,然后从runJob()方法返回。
最后,jobtracker清空作业的工作状态,指示tasktracker也清空作业的工作状态。

java程序员的大数据之路(8):MapReduce的工作机制相关推荐

  1. java程序员的大数据之路(13):Pig入门

    Pig简介 Pig为大型数据集的处理提供了更高层次的抽象. Pig包括两部分: 用于描述数据流的语言,称为Pig Latin. 用于运行Pig Latin程序的执行环境.当前有两个环境:单JVM中的本 ...

  2. java程序员的大数据之路(3):用maven构建Hadoop项目

    背景 由于Hadoop项目多数是比较大的项目,因此我们选择使用构建工具来构建Hadoop项目,这里我们使用的是maven.当然也可以使用Gradle等比较流行的构建工具 构建过程 这里总结一下我使用I ...

  3. java程序员的大数据之路(1):Hadoop安装

    Hadoop伪分布式安装 从今天开始我会在这里记录在大数据学习方面的方法和遇到的一些问题. 首先从最著名的开源平台Hadoop开始学习.参考安装教程,这个教程比较全面,按照步骤一步步安装即可. 安装时 ...

  4. java程序员的大数据之路(11):MapReduce的连接

    Map端连接 在两个大规模输入数据集之间的map端连接会在数据到达map函数之前就执行连接操作.各个输入数据集必须被划分成相同数量的分区,并且均按相同的键排序.同一键的所有记录均会放在同一分区之中. ...

  5. java程序员的大数据之路(12):Hadoop的守护进程

    关键属性 Hadoop守护进程的关键属性大多标记为final,使作业的配置无法覆盖. 典型的core-site.xml配置文件 <?xml version="1.0"> ...

  6. java程序员的大数据之路(9):MapReduce的类型

    概述 Hadoop的MapReduce中,map和reduce函数遵循如下常规格式: map:(K1,V1) -> list(K2,V2) reduce:(K2,list(V2)) -> ...

  7. java程序员的大数据之路(2):创建第一个Hadoop程序

    环境 Ubuntu 16.04 + Hadoop 2.7.4 + Intellij idea 2017.2 + jdk 1.8 创建过程 新建工程 新建一个工程 输入工程名 可以随便给工程起一个名字, ...

  8. java程序员的大数据之路(15):Pig Latin用户自定义函数

    过滤函数 所有的过滤函数都要继承FilterFunc类,并且实现抽象方法exec(),该方法的返回类型为Boolean. 示例代码如下: package com.udf.filter;import o ...

  9. java程序员的大数据之路(14):Pig Latin

    结构 一个Pig Latin程序由一组语句构成,一个语句可以理解为一个操作,或一个命令.语句必须以分号结束. Pig Latin有两种注释方法,双减号表示单行注释.多行注释可以使用/* 和 */表示. ...

最新文章

  1. .Net IL代码研究
  2. swfUpload 使用心得
  3. Xamarin Android布局文件没有智能提示
  4. eclipse开发项目关于内存是如何分配的
  5. signature=486e34400687432217e65e837b8e6753,PXE常见错误代码表
  6. [转]在jQuery的each()函数中使用continue和break
  7. PageHelper分页插件使用
  8. 【嵌入式】非操作系统下GPIO口控制器及LED灯编程
  9. matlab 高阶(二) —— 数值、溢出问题的解决
  10. 几维安全:千锤百炼,锻造移动游戏安全防护黄金铠甲
  11. 质量和品质的区别_质量体系认证,与产品质量认证的区别 !
  12. 2017中国云计算开源优秀案例
  13. RGB颜色查询对照代码表
  14. 为什么总是感觉压力很大?应该怎么办?
  15. CS-Notes 知识清单 备战版
  16. here-document at line 40 delimited by end-of-file (wanted `EOF‘)
  17. PHP导出Excel,亲测有用
  18. Arch Linux KDE Plasma + Windows 11 双系统安装指南
  19. 动态数码管显示(单片机)
  20. oralce_函数使用

热门文章

  1. vue-vue2脚手架14-插槽(slot)
  2. 洞见2019-中国智能办公峰会即将召开
  3. Android S WLAN 架构
  4. Inconsistent use of tabs and spaces in indentation等问题的解决
  5. nodejs require模块找不到的两种解决办法
  6. 5G如何由浅入深赋能工业互联网?
  7. 人工智能、大数据​、和数据科学领域,常用的十大类算法
  8. 常见的运动控制器控制方案
  9. GB/T28181-2016传输要求和Android平台设备接入技术实现
  10. 筑 业网络版材料进出库管理软件