文档章节

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

忙碌的键盘
 忙碌的键盘
发布于 2015/04/20 01:28
字数 982
阅读 620
收藏 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
码字总数 28344
作品 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
谷歌三大核心技术(二)Google MapReduce中文版

Google MapReduce中文版 译者: alex 摘要 MapReduce是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现。用户首先创建一个Map函数处理一个基于 key/value pair的数据集合,输...

idea_biu
2012/09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Minifilter的动态安装、加载及卸载

MINIFILTER框架的文件系统过滤驱动,无法使用的CreateService和OpenService进行动态加载。 看了一下,使用Inf文件安装Minifilter驱动的方式是在注册表驱动服务项下比传统驱动多创建了Instanc...

simpower
28分钟前
3
0
idea新建springCloud项目(6)- Config Server使用

1.在IDEA新建springCloud项目-Config Server 修改版本,和之前建的eureka项目版本一致,修改完记得刷新: 删除掉不需要的文件: 2.把Config S 服务注册到eureka上去,配置git地址,启动项目 ...

monroeCode
34分钟前
4
0
大数据可视化项目开发总纲

第1章 开发文档总纲 1.1 开发工具清单 名称 版本 备注 Pentaho-bi server pentaho-server-ce-7.1 Pentaho Cde为其内置工具 Pentaho-prd pentaho-prd-ce-7.1 Pentaho Report Designer报表工具...

ZhangLG
34分钟前
4
0
pip安装超时问题

pip3 install --default-timeout=100 tensorflow 设置为100秒 参考: User Guide How to solve ReadTimeoutError: HTTPSConnectionPool(host='pypi.python.org', port=443) with pip?......

亚林瓜子
36分钟前
2
0
fragment 旋转时保持当前实例

设备旋转时保存Fragment的交互状态: setRetainInstance(true);

zdglf
38分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部