Hadoop Mapreduce 中的FileInputFormat类的文件切分算法和host选择算法
文件切分算法
文件切分算法主要用于确定InputSplit的个数以及每个InputSplit对应的数据段。 FileInputFormat以文件为单位切分成InputSplit。对于每个文件,由以下三个属性值确定其对应的InputSplit的个数。
- goalSize:根据用户期望的InputSplit数据计算,即totalSize/numSplit。totalSize为文件总大小;numSplit为用户设定的Map Task个数,默认情况下是1.
- minSize:InputSplit的最小值,由配置参数mapred.min.split.size确定,默认是1.
- blockSize:文件在HDFS中存储的block大小,不同文件可能不同,默认是64MB.
这三个参数共同决定InputSplit的最终大小,计算方式:
splitSize = max{mainSize,min{goalSize,biockSize}}
一旦确定splitSize值后,FileInputFormat将文件依次切成大小为splitSize的InputSplit,最后剩下不足splitSize的数据块单独成为一个InputSplit。
host选择算法
InputSplit切分方案确定之后,需要确定每个InputSplit的元数据信息。元数据信息通常由四部分组成:<file,start,length,host>,分别表示InputSplit所在的文件、起始位置、长度以及所在的host(节点)列表。其中,前面三项容易确定,难点在于host列表的选择方法。
Hadoop将数据本地性按照代价划分为三个等级:node locality、rack locality和data center locality。在进行任务调度时,会依次考虑这三个节点的locality,即有限让空闲资源处理本节点上的数据,如果节点上没有任何可处理的数据,则处理同一个机架上的数据,最差的情况是处理其他机架上的数据,但是必须位于同一个数据中心。
FileInputFormat设计了一个简单有效的启发式算法:首先按照rack包含的数据量对rack进行排序,然后在rack内部按照每个node包含的数据量对node排序,最后取前N个node的host作为InputSplit的host列表,这里的N为block的副本数。当任务调度器调度Task时,只要将Task调度给位于host列表中的节点,就认为该Task满足本地性。
当使用基于FileInputFormat实现InputFormat时,为了提高Map Task的数据本地性,应尽量使InputSplit大小与bolck大小相同。
Hadoop Mapreduce 中的FileInputFormat类的文件切分算法和host选择算法的更多相关文章
- WordCount作业提交到FileInputFormat类中split切分算法和host选择算法过程源码分析
参考 FileInputFormat类中split切分算法和host选择算法介绍 以及 Hadoop2.6.0的FileInputFormat的任务切分原理分析(即如何控制FileInputForm ...
- 在Hadoop中重写FileInputFormat类以处理二进制格式存储的整数
近期開始使用MapReduce,发现网上大部分样例都是对文本数据进行处理的,也就是说在读取输入数据时直接使用默认的TextInputFormat进行处理就可以.对于文本数据处理,这个类还是能满足一部分 ...
- MapReduce 示例:减少 Hadoop MapReduce 中的侧连接
摘要:在排序和reducer 阶段,reduce 侧连接过程会产生巨大的网络I/O 流量,在这个阶段,相同键的值被聚集在一起. 本文分享自华为云社区<MapReduce 示例:减少 Hadoop ...
- 关于MapReduce中自定义分区类(四)
MapTask类 在MapTask类中找到run函数 if(useNewApi){ runNewMapper(job, splitMetaInfo, umbilical, reporter ...
- 关于MapReduce中自定义分组类(三)
Job类 /** * Define the comparator that controls which keys are grouped together * for a single ...
- 关于MapReduce中自定义Combine类(一)
MRJobConfig public static fina COMBINE_CLASS_ATTR 属性COMBINE_CLASS_ATTR = "mapreduce.j ...
- Hadoop MapReduce中压缩技术的使用
Compression and Input Splits 当我们使用压缩数据作为MapReduce的输入时,需要确认数据的压缩格式是否支持切片? 假设HDFS中有一个未经压缩的大小为1GB的文 ...
- Haoop Mapreduce 中的FileOutputFormat类
FileOutputFormat类继承OutputFormat,需要提供所有基于文件的OutputFormat实现的公共功能,主要有以下两点: (1)实现checkOutputSpecs方法 chec ...
- Hadoop : MapReduce中的Shuffle和Sort分析
地址 MapReduce 是现今一个非常流行的分布式计算框架,它被设计用于并行计算海量数据.第一个提出该技术框架的是Google 公司,而Google 的灵感则来自于函数式编程语言,如LISP,Sch ...
随机推荐
- HTTPS数据包抓取的可行性分析
HTTPS数据包抓取的可行性分析 相信只要是从事软件开发, 多多少少都会涉及到数据包的抓取.常见的有网页数据抓取(即网页爬虫),应用程序数据包抓取等.网页数据抓取比较简单, 在chrome下可以非常方 ...
- ORACLE分区表发挥性能
1.1 分区表PARTITION table 在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能. 1.1.1 分区表的建立: 某公司的每年产生巨大的销售记录,DBA向公司建议 ...
- 洛谷 P1131 [ ZJOI 2007 ] 时态同步 —— 树形DP
题目:https://www.luogu.org/problemnew/show/P1131 记录 x 子树内同步的时间 f[x],同步所需代价 g[x]: 直接转移即可,让该儿子子树与其它儿子同步, ...
- 深入理解JMM(Java内存模型) --(七)总结
JMM 掌管着一个线程对内存的动作 (读和写)影响其他线程对内存的动作的方式.由于使用处理器寄存器和预处理 cache 来提高内存访问速度带来的性能提升,Java 语言规范(JLS)允许一些内存操作并 ...
- 20. Extjs学习笔记——Ext.data.JsonStore使用说明
Ext.data.JsonStore继承于Ext.data.Store,使得从远程JSON数据创建stores更为方便的简单辅助类.JsonStore合成了Ext.data.HttpProxy与Ext ...
- Linux压缩命令(zip/gz/bz2/tar/tar.gz/tar.bz2)
一.Linux的压缩格式 .zip . gz . bz2 .tar 1..zip格式(Linux和Windows是可以互传的) 压缩命令 语法:zip 文件名.zip 文件名 ------压缩 ...
- Java中的APT的工作过程
Java中的APT的工作过程 APT即Annotatino Processing Tool, 他的作用是处理代码中的注解, 用来生成代码, 换句话说, 这是用代码生成代码的工具, 减少boilerpl ...
- 启动VMware环境下的Linux操作系统,添加新分区
启动VMware环境下的Linux操作系统,添加新分区,需要root账号身份. 3.1 [fdisk -l] 最大分区为/dev/sda3,说明新创建的分区将会是sda4 3.2 输入[fdisk / ...
- vue开发环境和生产环境里面解决跨域的几种方法
什么是跨域 跨域指浏览器不允许当前页面的所在的源去请求另一个源的数据.源指协议,端口,域名.只要这个3个中有一个不同就是跨域. 这里列举一个经典的列子: #协议跨域 http://a.baidu. ...
- Ant安装以及环境配置以及使用[windows环境]
一.安装ant 官方主页http://ant.apache.org下载新版的ant. *下载对应的版本,解压到我们的硬盘. 二.配置环境变量 Window中设置ant环境变量: ANT_HOME ...