news 2026/4/23 14:38:14

Hadoop Formats 在 Flink 里复用 Hadoop InputFormat(flink-hadoop-compatibility)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hadoop Formats 在 Flink 里复用 Hadoop InputFormat(flink-hadoop-compatibility)

1、项目依赖配置

核心依赖是 Flink 的兼容模块:

<dependency><groupId>org.apache.flink</groupId><artifactId>flink-hadoop-compatibility</artifactId><version>2.2.0</version></dependency>

如果你要在本地(IDE / MiniCluster)跑起来,通常还需要带上一个 Hadoop 客户端依赖(本地有 class 才能初始化 Hadoop 相关类):

<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.10.2</version><scope>provided</scope></dependency>

实战建议:

  • 集群环境里 Hadoop 依赖往往由平台(YARN/HDFS)提供,你本地为了能跑通需要加hadoop-client
  • 如果你是打 fat jar 跑 standalone/K8s,就要更谨慎处理 Hadoop 依赖冲突(常见是guavajacksonnetty版本冲突)。

2、两种包法:readHadoopFile vs createHadoopInput

Flink 通过HadoopInputs提供两种方式把 Hadoop InputFormat 包装成 Flink InputFormat:

  • readHadoopFile(...):用于继承自 Hadoop 的 FileInputFormat的场景(典型:读 HDFS 文件类格式)
  • createHadoopInput(...):用于通用 InputFormat(不一定是文件类,例如某些外部系统的 InputFormat)

包装后的 Source 输出类型是一个二元组:Tuple2<K, V>

  • f0:key
  • f1:value

这点非常重要:你后续处理 DataStream 的时候,要把 key/value 拆开理解。

3、示例:使用 Hadoop 的 KeyValueTextInputFormat

下面示例演示如何把 Hadoop 的KeyValueTextInputFormat作为 Flink Source:

importorg.apache.flink.api.java.tuple.Tuple2;importorg.apache.flink.streaming.api.datastream.DataStream;importorg.apache.flink.streaming.api.environment.StreamExecutionEnvironment;importorg.apache.flink.hadoopcompatibility.HadoopInputs;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapred.KeyValueTextInputFormat;publicclassHadoopInputFormatDemo{publicstaticvoidmain(String[]args)throwsException{StreamExecutionEnvironmentenv=StreamExecutionEnvironment.getExecutionEnvironment();StringtextPath="hdfs:///path/to/input";KeyValueTextInputFormattextInputFormat=newKeyValueTextInputFormat();DataStream<Tuple2<Text,Text>>input=env.createInput(HadoopInputs.readHadoopFile(textInputFormat,Text.class,Text.class,textPath));// 业务处理:把 Text 转成 StringDataStream<String>lines=input.map(kv->"key="+kv.f0.toString()+", value="+kv.f1.toString());lines.print();env.execute("hadoop-inputformat-demo");}}

4、典型使用场景与坑位

常见适配场景:

  • 你要读一个历史遗留的 Hadoop InputFormat(比如某个自研存储、HBase/Hive 的某些格式、云厂商的 InputFormat)
  • 已经有成熟的 MR InputFormat + 配置参数(账号、表名、列族、分区等),直接复用最省时间

容易踩的坑:

  • 依赖冲突:Hadoop 生态依赖链很长,尤其本地 IDE 跑最容易爆 classpath 冲突
  • Key/Value 语义:输出一定是Tuple2<K,V>,不要直接当成一行文本
  • 配置注入:很多 InputFormat 依赖 Hadoop Configuration(账号、endpoint、table 等),你需要在创建 InputFormat 或 Job/Configuration 时把参数设全
  • 批/流差异:很多 Hadoop InputFormat 本质是“批式读取”,更适合 BATCH runtime;如果你硬塞进 streaming job,它也只是周期性读一遍(不是增量监控)、
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 12:56:26

COMSOL玩转锂枝晶:四种生长模式实操指南

comsol锂枝晶模型 四合一 1雪花枝晶 2单点形核 3多点形核 4形状形核 包含相场、浓度场和电场三种物理场&#xff08;雪花枝晶除外&#xff09;&#xff0c;其中单枝晶定向生长另外包含对应的参考文献。锂枝晶模拟可不止调参画图这么简单&#xff0c;今天咱们用COMSOL实现四种典…

作者头像 李华
网站建设 2026/4/23 12:57:27

Aliro统一生态、UWB精准无感,2026智能门锁格局将迎巨变

曾几何时&#xff0c;智能门锁的进化似乎陷入了瓶颈。指纹识别受环境与皮肤状态影响&#xff0c;人脸识别在光线不佳时可能失灵&#xff0c;而蓝牙或NFC解锁仍需用户掏出手机完成一个“近场接触”的动作。行业亟待一种既能彻底解放双手、又能确保极高安全性的新方案。这一僵局&…

作者头像 李华
网站建设 2026/4/23 13:00:39

工业物联网平台在供水/供热等监控管理系统的应用

场景痛点&#xff1a;供水管网漏损、供热站点失衡、泵房突发故障……这些市政公用设施的问题直接关系到民生与社会稳定。然而&#xff0c;这些设施分布较广泛、数量较多&#xff0c;且设备往往单机运行&#xff0c;传统的人工巡检方式不仅工作量大、成本高&#xff0c;而且无法…

作者头像 李华
网站建设 2026/4/18 5:30:18

揭秘Emmi AI每月人均千欧的远程团队协作模式

Emmi AI是一家奥地利深度科技公司&#xff0c;致力于构建人工智能驱动的物理仿真技术&#xff0c;以加速流体动力学、多物理场和固体力学等领域的工程流程。 对于从事此类工作的公司而言&#xff0c;人员协作方式与技术本身同等重要。该公司采用了一种混合、远程优先的模式&…

作者头像 李华
网站建设 2026/4/23 13:00:51

python基于vue的驾校管理系统的设计与实现django flask pycharm

目录 基于Vue与Python的驾校管理系统设计与实现 开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 基于Vue与Python的驾校管理系统设计与实现 驾校管理系统采用前后端分离架构&#xff0c;前…

作者头像 李华