自定义 InputFormat 步骤| 学习笔记

简介: 快速学习自定义 InputFormat 步骤

开发者学堂课程【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(SequenceFileOutputFormat.class);

相关文章
|
9月前
|
消息中间件 分布式计算 Kafka
SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)
SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)(一)
125 5
|
SQL Java 应用服务中间件
Apache Doris 自定义C++ UDF之流程详解(1)
Apache Doris 自定义C++ UDF之流程详解(1)
307 0
|
9月前
|
Kubernetes 数据处理 数据库
实时计算 Flink版产品使用合集之tm的临时文件保存路径可以用哪个配置项
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
9月前
|
SQL 分布式计算 Java
Spark学习---SparkSQL(概述、编程、数据的加载和保存、自定义UDFA、项目实战)
Spark学习---SparkSQL(概述、编程、数据的加载和保存、自定义UDFA、项目实战)
554 1
|
9月前
|
SQL Java Shell
Hive【非交互式使用、三种参数配置方式】
Hive【非交互式使用、三种参数配置方式】
|
应用服务中间件 Apache nginx
Apache Doris 自定义C++ UDF之流程详解(1)2
Apache Doris 自定义C++ UDF之流程详解(1)2
276 0
|
消息中间件 存储 分布式计算
Spark学习---6、SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)(二)
Spark学习---6、SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)(二)
|
SQL IDE Java
Apache Doris 自定义C++ UDF之流程详解(1)1
Apache Doris 自定义C++ UDF之流程详解(1)1
225 0
|
消息中间件 分布式计算 Kafka
Spark学习---6、SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)(一)
Spark学习---6、SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)(一)
|
存储 Java 分布式数据库
Flume学习---3、自定义Interceptor、自定义Source、自定义Sink
Flume学习---3、自定义Interceptor、自定义Source、自定义Sink