文件切分算法

文件切分算法主要用于确定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大小相同。

最新文章

  1. 2016huasacm暑假集训训练五 G - 湫湫系列故事——减肥记I
  2. JMeter学习-032-JMeter常见四种变量简介
  3. javascript的对象 和 JSON 对象?
  4. 如何让您的php也支持pthreads多线程
  5. VundleVim的安装与使用
  6. Apache CXF 103 CXF Basics - partial
  7. 读取本地excel发短信
  8. 转载sublime text3中package Control
  9. kvm 性能调优
  10. &lt;meta http-equiv=&quot;pragma&quot; content=&quot;no-cache&quot;/&gt;-备
  11. UVAlive7141 BombX 14年上海区域赛D题 线段树+离散化
  12. vue数据变动监测
  13. Ruby http/net 中连接超时问题
  14. HTML和CSS初级前端面试题汇总(持续补充)
  15. EOS之记事本智能合约
  16. Confluence 6 修改日志文件的目标位置
  17. JS_高程5.引用类型(6)Array类型的位置方法,迭代方法,归并方法
  18. 【神经网络】Dependency Parsing的两种解决方案
  19. PythonStudy——函数的返回值 The return value of the function
  20. [skill] C与C++对于类型转换的验证

热门文章

  1. APDU命令的结构和处理【转】
  2. hdoj--1379--DNA Sorting(排序水题)
  3. python-----删除空文件夹
  4. 使用Advanced Installer14.3 简单打包windows窗体应用程序
  5. P3343 [ZJOI2015]地震后的幻想乡
  6. 递推DP HDOJ 5389 Zero Escape
  7. WinForm ListBox 控件用法
  8. visual studio 2015安装
  9. java 装饰者类
  10. string与int的相互转换C++(转)