FileInputFormat切片机制 VS CombineTextInputFormat切片机制

FileInputFormat切片机制 VS CombineTextInputFormat切片机制1.FileInputFormat切片机制默认切片机制按照文件内容长度进行切片 默认大小等于block大小 切片时不考虑数据集整体性,而是逐个针对每个文件单独切片举例:两个文件File1.txt200Mfile2.txt20M切片信息如下:File1.txt.split1——0~128File1.txt.split2——128-200File2.txt.split1——0-20切片参数配置切片的计算逻辑:Math.max(minSize,…

1.FileInputFormat切片机制

默认切片机制

  • 按照文件内容长度进行切片
  • 默认大小等于block大小
  • 切片时不考虑数据集整体性,而是逐个针对每个文件单独切片

举例:两个文件

File1.txt    200M
file2.txt    20M

切片信息如下:

File1.txt.split1—— 0~128
File1.txt.split2—— 128-200
File2.txt.split1—— 0-20 

切片参数配置

  • 切片的计算逻辑:Math.max(minSize, Math.min(maxSize, blockSize))
  • 参数设置
mapreduce.input.fileinput.format.split.minsize=1                默认值为1
mapreduce.input.fileinput.format.split.maxsize=Long.MAXValue    默认值Long.MAXValue

FileInputFormat.setMinInputSplitSize(job, 512*1024*1024L);              // 最小输入 512M
FileInputFormat.setMaxInputSplitSize(job, 1*1024*1024*1024L);           // 最大输入 1G

因此,默认情况下,切片大小为blockSize

  • 当minsize < maxsize < blockSize时,则切片大小为maxsize
  • 当blockSize < minsize < maxsize时,切片大小为minsize
  • 当minSize < blockSize < maxsize时,切片大小为blockSize

 

2. CombineTextInputFormat切片机制

  • 相对于TextInputFormat的切片机制,CombineTextInputFormat可以将多个小文件从逻辑上划分到一个切片中,多个小文件就可以交给一个map task处理
  • 优先满足最小切片大小,但不超过最大切片大小
job.setInputFormatClass(CombineTextInputFormat.class);
CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);    // 4M 
CombineTextInputFormat.setMinInputSplitSize(job, 2097152);    // 2M 

举例:0.5M+1M+0.3M+5M = 2M+4.8M=2M+4M+0.8M

 

补充:

InputFormat接口实现类

  • FileInputFormat

        TextInputFormat、KeyValueInputFormat、NLineInputFormat、SequenceFileInputFormat、FiexedLengthInputFormat

  • CombineFileInputFormat
  • DBInputFormat

 

TextInputFormat:默认的InputFormat,每条记录是一行输入,键是LongWritable类型,存储该行在文件中的起始字节偏移量,值是该行记录,不包括任何终止符(回车符和换行符)

KeyValueTextinputFormat:每一行为一条记录,被分隔符分割为key和Value,可以通过参数设置分隔符

Conf.set(KeyValueLineRecordReader.KEY_VALUE_SEPERATOR, " ");

NLineInputFormat:NLineInputFormat在划分切片时将不再按照block大小划分,而是按照NLineInputFormat指定的行数N来划分,切片数=输入的总行数/N,如果上不是整数则+1。key和Value值与TextInputFormat一致

SequenceFileInputFormat:读取sequenceFile文件,以二进制形式读取

FiexedLengthInputFormat:读取固定长度的记录,一般是二进制文件,文本文件不行

DBInputFormat:主要用于处理数据库数据的InputFormat类

 

自定义InputFormat

  • 继承FileInputFormat
  • 重写RecordReader,实现一次读取一个完整文件并封装为KV

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/38763.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注