开发者学堂课程【Hadoop 分布式计算框架 MapReduce:自定义 InputFormat 步骤】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/94/detail/1508
自定义 InputFormat 步骤
目录:
一、自定义
二、案例实操
三、需求分析
一、自定义
在企业开发中,Hadoop 框架自带的 InputFonmat 类型不能满足所有应用场景,需要自定义 InputFomat 来解决实际问题。
自定义 InputFomat 步骤如下:
(1)自定义一个类继承 FileInputFormat。
(2)改写 RecordReader,实现一次读取一个完整文件封装为 KV。
(3)在输出时使用 SequenceFileOutPutFoumat 输出合并文件。
二、案例实操
无论 HDFS 还是 MapReduce,在处理小文件时效率都非常低,但又难免面临处理大量小文件的场景,此时,就需要有相应解决方案。可以自定义 InputFormat 实现小文件的合并。
1.需求.
将多个小文件合并成一个 SequenceFile 文件(SequenceFile 文件是 Hadoop 用来存储二进制形式的 key-value 对的文件格式),SequenceFile 里面存储着多个文件,存储的形式为文件路径+名称为 key,文件内容为 value。·
(1)输入数据。
one.txt two.txt three.txt
(2) 期望输出数据
三、需求分析
自定义 InputFormat 案例分析 尚硅谷
1、自定义一个类继承 FileInputFormat
(1)重写 isSplitable() 方法,返回 false 不可切割
(2)重写 createRecordReader(),创建自定义的 RecordReader 对象,并初始化
2、改写 RecordReader,实现一次读取一个完整文件封装为 KV
(1)采用 IO 流一次读取一个文件输出到 value 中,因为设置了不可切片,最终把所有文件都封装到了 value 中
(2)获取文件路径信息+名称,并设置 key
3、设置 Driver
//(1)设置输入的 inputFormat
job.setInputFormatClass(WholeFileInputformat.class);
//(2)设置输出的 outputFormat
job.setOutputFormatClass(Sequ
enceFileOutputFormat.class);