博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop Mapreduce 中的FileInputFormat类的文件切分算法和host选择算法
阅读量:4470 次
发布时间:2019-06-08

本文共 1174 字,大约阅读时间需要 3 分钟。


文件切分算法

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

转载于:https://www.cnblogs.com/wgyang/p/10398705.html

你可能感兴趣的文章
Jquery:怎样让子窗体的div显示在父窗体之上
查看>>
01概率
查看>>
Shell脚本
查看>>
MatLab Load cv::Mat 导入数据
查看>>
html+css相关笔记(一)
查看>>
基于块流协议保证音频优先发送
查看>>
关于互联网的一些数据
查看>>
数据预处理:独热编码(One-Hot Encoding)
查看>>
python将对象名的字符串类型,转化为相应对象的操作方法
查看>>
【NLP新闻-2013.06.03】New Book Where Humans Meet Machines
查看>>
mongodb安装4.0(rpm)
查看>>
DispatcherServlet的url mapping为“/”时,对根路径访问的处理
查看>>
备忘pwnable.kr 之passcode
查看>>
好久没敲代码了,手有点生——一个小小的时钟
查看>>
运算符 AS和IS 的区别
查看>>
(转)详解C中volatile关键字
查看>>
easyui时的时间格式yyyy-MM-dd与yyyy-MM-ddd HH:mm:ss
查看>>
专题:动态内存分配----基础概念篇
查看>>
Codeforces Round #426 (Div. 2) (A B C)
查看>>
The Most Simple Introduction to Hypothesis Testing
查看>>