文档章节

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

元思
 元思
发布于 2015/04/20 01:28
字数 982
阅读 626
收藏 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

© 著作权归作者所有

共有 人打赏支持
元思
粉丝 24
博文 26
码字总数 28490
作品 0
朝阳
程序员
私信 提问
加载中

评论(1)

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

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

ycwyong
2018/05/17
0
0
Hadoop的mapreduce的简单用法

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

魔法王者安琪拉
2018/08/23
0
0
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 InputFormat 切分输入文件

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

大数据之路
2013/05/26
0
16
MapReduce: 一个巨大的倒退

前言 databasecolumn 的数据库大牛们(其中包括PostgreSQL的最初伯克利领导:Michael Stonebraker)最近写了一篇评论当前如日中天的MapReduce技术的文章,引发剧烈的讨论。我抽空在这儿翻译一...

ddatsh
2011/11/04
4.4K
7

没有更多内容

加载失败,请刷新页面

加载更多

简单模仿配置文件的反射机制

//Student类 public class Student { public void love() { System.out.println("python"); } } //Tesy类 public class Tesy { public static void main(String[] args) throws Exceptio......

南桥北木
13分钟前
1
0
你真的需要了解一下CSS变量 var()的用法

当Web项目变得越来越大时,他的CSS会变得像天文数字那么大而且还变得混乱。为了帮助我们解决这个问题,新的CSS变量很快就会出现在主流浏览器中,它让开发人员能够重用并轻松编辑重复出现的C...

前端小攻略
16分钟前
0
0
嵌入式应用选择合适的微控制器

为嵌入式应用选择微控制器有几个原因,即低成本,高集成度,增加可靠性,节省空间等。 准备所需硬件接口列表使用微控制器的基本硬件框图,准备一份微控制器需要支持的所有外设接口的列表。微...

linux-tao
58分钟前
5
0

中国龙-扬科
今天
2
0
使用apicloud开发移动端APP,IOS list页面滚动卡顿解决记录

给内容容器添加样式:-webkit-overflow-scrolling:touch; -webkit-overflow-scrolling:属性控制元素在移动设备上是否使用滚动回弹效果. auto:使用普通滚动, 当手指从触摸屏上移开,滚动会立即...

万建宁
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部