MapReduce高级案例⑦

kamisamak 发布于 2020-06-17 1320 次阅读


小文件处理(自定义InputFormat)

[infobox title="需求分析"]
无论hdfs还是mapreduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件的场景,此时,就需要有相应解决方案。将多个小文件合并成一个文件SequenceFile,SequenceFile里面存储着多个文件,存储的形式为文件路径+名称为key,文件内容为value。
小文件的优化无非以下几种方式:
(1)在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS
(2)在业务处理之前,在HDFS上使用mapreduce程序对小文件进行合并
(3)在mapreduce处理时,可采用CombineTextInputFormat提高效率
本次采用自定义InputFormat的方式,处理输入小文件的问题。
(1)自定义一个类继承FileInputFormat
(2)改写RecordReader,实现一次读取一个完整文件封装为KV
(3)在输出时使用SequenceFileOutPutFormat输出合并文件
[/infobox]
[infobox title="数据"]


b.txt 展开 / 收起

c.txt 展开 / 收起

[/infobox]
[infobox title="code"]
ruaFileInputFormat 展开 / 收起

自定义ruaRecordReader 展开 / 收起

ruaDriver 展开 / 收起

ruaMapper 展开 / 收起

[/infobox]
推荐参考:https://www.blog.kamisamak.com/index.php/2019/11/19/hadoop-mapreduce自定义inputformat输入/
案例来源:https://www.cnblogs.com/frankdeng/p/9256245.html