文档章节

MapReduce中为什么需要Input Splits?【翻译】

忙碌的键盘
 忙碌的键盘
发布于 2015/04/20 01:28
字数 982
阅读 623
收藏 23

HDFS会把非常大的文件分割成多个大的数据块(例如,128M),并且每一个数据块在集群的不同节点上存储3个备份。HDFS并不知道也不关心这些文件的内容。

在yarn上,当一个Mapreduce任务开始时,Resource Manager(负责集群的资源管理和任务调度)会创建一个Application Master守护进程来监视这个任务的生命周期。

(在Hadoop1中,JobTracker监控每个Mapreduce任务,以及作业的调度和集群资源的管理)

AM(Application Master,下同)首先要做的事情是确定任务所需要的数据块。AM向NameNode询问所需要的数据块的副本的存储位置。带着这些文件数据块本地化信息,AM向资源管理器(Resource Manager)发出请求,资源管理器会在数据块所在的从节点(Slave Node)上产生一个Mapper任务来处理数据块。

MapReduce任务高效工作的关键是数据处理本地化,即在存储数据块的从节点上处理数据。

译者注:这就是所谓的"数据本地化优化",因为它无需使用宝贵的集群带宽资源。

在知道数据块怎么被处理之前,你要先知道Hadoop是怎么存储数据的。在Hadoop中,文件由每条独立的记录组成,最终被Mapper任务逐条记录的处理。

例如,示例数据集中包含了美国1987年至2008年所有已完成航班的信息。

示例数据集下载地址:http://stat-computing.org/dataexpo/2009/the-data.html

示例数据集格式:

每一年都有一个非常大的文件,在每个文件中,每一行代表了一次航班。换言之,一行代表了一条记录。

现在,假设Hadoop集群的数据块大小是64M,这就意味着这些航班数据文件会被分割成多个精确的64M大小的数据块。

那么问题来了?如果每一个Mapper任务要处理指定数据块中的所有记录,那么这些记录在跨越不同数据块边界时会发生什么?文件数据块是精准的64M(或者任何你设置的大小),但是因为HDFS不知道数据块中存储的内容,当一条完成的记录被划分到了不同的数据块中,它也不会知道。

译者注:HDFS在分割数据块时会精准到字节,一个数据块是64M,多一个或少一个字节都不行。而文件是由每一条完整的记录组成,所以HDFS在把大文件分割成多个数据块时,有可能会把一条完整的记录划分到不同的数据块中。

当在一个数据块中的最后一条记录不完整的情况下,输入分片(input split)中就会包含下一个数据块的储存信息以及最后一条记录的剩余数据的字节偏移量。

下面这张图表示了数据块和输入分片两者的关系。

你可以通过配置,让AM守护进程(或者Hadoop1中的JobTracker)去计算输入分片而不是任务客户端,这样Mapper在处理大量数据块时会快一些。

MapReduce处理数据是基于输入分片的。一个应用中的输入分片的数量决定了Mapper任务的数量。如果可能的话,每个Mapper任务被分配在输入分片所在的从节点上。Resource Manager(或者,Hadoop1中的JobTracker)尽量让输入分片在本地被处理。

原文:http://www.dummies.com/how-to/content/input-splits-in-hadoops-mapreduce.html

© 著作权归作者所有

共有 人打赏支持
忙碌的键盘
粉丝 23
博文 26
码字总数 28490
作品 0
朝阳
程序员
加载中

评论(1)

忙碌的键盘
忙碌的键盘
@红薯 插入图片时设置的对其方式不起作用!!!
大数据之---Yarn伪分布式部署和MapReduce案例

1、软件环境 本次涉及伪分布式部署只是要主机hadoop01,软件安装参考伪分布式部署终极篇 2、配置yarn和mapreduce 3、提交测试jar计算圆周率 job15248048138350001 job命名格式: jobunix时间...

ycwyong
05/17
0
0
hadoop 学习笔记:mapreduce框架详解

这个觉得写得特别的详细,有一些细节可能要去看书,会理解的更好点,,,   Mapreduce初析   Mapreduce是一个计算框架,既然是做计算的框架,那么表现形式就是有个输入(input),mapre...

LIPING234
2013/10/25
0
0
自定义 hadoop MapReduce InputFormat 切分输入文件

在上一篇中,我们实现了按 cookieId 和 time 进行二次排序,现在又有新问题:假如我需要按 cookieId 和 cookieId&time 的组合进行分析呢?此时最好的办法是自定义 InputFormat,让 mapreduc...

大数据之路
2013/05/26
0
16
Hadoop-2.2.0使用lzo压缩文件作为输入文件

 在 《Hadoop 2.2.0安装和配置lzo》 文章中介绍了如何基于 Hadoop 2.2.0安装lzo。里面简单介绍了如果在Hive里面使用lzo数据。今天主要来说说如何在Hadoop 2.2.0中使用lzo压缩文件当作的数据...

蓝狐乐队
2014/04/22
0
0
Hadoop的mapreduce的简单用法

 Mapreduce初析   Mapreduce是一个计算框架,既然是做计算的框架,那么表现形式就是有个输入(input),mapreduce操作这个输入(input),通过本身定义好的计算模型,得到一个输出(outpu...

魔法王者安琪拉
08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Snackbar源码分析

目录介绍 1.最简单创造方法 1.1 Snackbar作用 1.2 最简单的创建 1.3 Snackbar消失的几种方式 2.源码分析 2.1 Snackbar的make方法源码分析 2.2 对Snackbar属性进行设置 2.3 Snackbar的show显示...

潇湘剑雨
35分钟前
1
0
分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业数据存储

分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业数据存储 摘要: 原创出处 http://www.iocoder.cn/Elastic-Job/job-storage/ 本文基于 Elastic-Job V2.1.5 版本分享 1. 概述 本文主要分享...

DemonsI
41分钟前
1
0
jmockit demo

1、@Mocked,标识一个指定的class的实例或被测对象的参数被Mock掉。 2、@Capturing,标识一个被Mock的对象,从该对象派生的子类也被Mock了。 3、@Injectable,标识只有一个指定的被测对象的内...

我的老腰啊
55分钟前
1
0
内容换行

用 <textarea>13611112222 这里想换行 13877779999</textarea><textarea>13611112222 13877779999</textarea>...

小黄狗
56分钟前
1
0
学习设计模式——单例模式

1. 认识单例模式 1. 定义:一个类中仅有一个实例,并提供一个访问它的全局访问点。 2. 结构:仅一个Singleton类,其中包含一个static类变量,而类变量的类型就是Singleton类,而且Singleton...

江左煤郎
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部