Flink 系列第25篇:Flink SQL 集成 Hive 实践:流批一体下的实时数仓利器

从零开始学Flink:Flink SQL 元数据持久化实战 通过 Hive Catalog 将 Flink SQL 的表结构等元数据持久化到 Hive Metastore,打造生产级实时数仓元数据中心,让 SQL 不再“重启就丢”。 阅读详情

引言

在实时数仓与流批一体的大趋势下,Flink 作为新一代流计算引擎,如何与既有的数据湖/数仓基础设施(尤其是 Hive)无缝衔接,成为企业级架构的关键。Flink SQL 从 1.10 版本起,提供了对 Hive 元数据、Hive 表读写、Hive UDF 等的深度集成,使得用户可以用熟悉的 SQL 语法直接操作 Hive 数据,打通了流处理与批量处理之间的壁垒。本文将基于 Flink 官方文档,系统性地介绍 Flink SQL 与 Hive 集成的方方面面,从理论基础、环境搭建到核心场景(流式写入 Hive、分区提交、Hive UDF 复用)与调优实战。


1. 为什么需要 Flink 集成 Hive

在数据架构演进过程中,我们通常面临以下痛点与需求:

场景需求Flink + Hive 解决方案
实时数仓流数据写入 Hive 分区表,供下游即席查询Flink 流式 Sink 到 Hive(Streaming File Sink)
元数据统一避免重复建表,保证流批任务元数据一致直接读写 Hive Catalog 中的表,复用 Hive Metastore
UDF 复用使用已有 Hive UDF,无需重新开发注册 Hive 函数,Flink SQL 直接调用
流批一体同一套 SQL 处理流/批数据,简化开发Hive 表既可作为批源(Batch Source),也可作为流汇

集成 Hive 后,Flink 不再是一个孤立的流计算引擎,而是与数据湖生态紧密结合,能够在熟悉的 SQL 范式下同时处理实时流与历史批量数据,真正实现“一套代码,多种执行”。


2. Flink 集成 Hive 的理论基础

2.1 HiveCatalog:元数据桥梁

Flink 通过 HiveCatalog 连接 Hive Metastore,实现元数据的互通。其核心特点包括:

  • 元数据复用:直接读取 Hive 的表结构、分区信息、存储格式(ORC、Parquet、TextFile 等)及序列化/反序列化器(SerDe)。
  • 不依赖 Hive 执行引擎:Flink 仅使用 Hive 元数据服务,查询执行完全由 Flink 自身负责,避免了传统 Hive 执行引擎的性能瓶颈。
  • 自动类型映射:Flink 会将 Hive 的字段类型映射为内部类型,用户几乎无感知。

在架构上,HiveCatalog 借助 Hive Metastore 客户端(通常通过读取 hive-site.xml 获取连接信息)来访问元数据,因此 Flink 集群的所有节点需要能够访问 Hive 配置文件。

2.2 集成模式

Flink SQL 与 Hive 的交互历史上有两种模式:

  1. Flink Dialect 模式(默认,推荐):使用标准 Flink SQL 语法,所有 DML 操作(如 INSERT INTO)遵循 Flink SQL 规范,与 Hive 数据交互仅通过 Catalog 进行。
  2. Hive Dialect 模式(已弃用):Flink 1.15 之前的实验性功能,允许使用 HiveQL 语法(如 INSERT OVERWRITE),但因兼容性问题与维护负担,在后续版本中被移除。 本文所有内容均基于 Flink Dialect 模式。

2.3 流式写入 Hive:Streaming File Sink 原理

流式写入 Hive 表的核心是基于 Flink 的 Streaming File Sink。简单来说,Flink 将流式数据持续写入 HDFS 上的文件(采用 in-progress 状态),然后通过一套分区提交机制(Partition Committer)控制何时将写入完毕的文件重命名为最终文件,同时向 Hive Metastore 注册分区。

该机制的三个关键步骤:

  • 文件写入:数据以流式方式写入分区目录下的临时文件(如 part-xxx.in-progress),支持 ORC/Parquet 等格式。
  • 分区提交触发:根据 sink.partition-commit.trigger 决定触发策略(基于分区时间或处理时间),并结合 sink.partition-commit.delay 延迟提交,以保证数据完整性。
  • Metastore 更新:分区提交时执行策略(sink.partition-commit.policy.kind),例如调用 Hive Metastore API 添加分区、写入 _SUCCESS 成功标识等。

3. 环境准备与依赖

在正式实践前,需确保 Flink 集群具备集成 Hive 的必要条件。

3.1 Flink 版本与 Hive 版本兼容性

Flink 官方提供不同 Hive 版本的集成 JAR 包,请根据你的 Hive 版本选择对应依赖。常见兼容关系如下(以 Flink 1.17 为例):

  • Hive 2.3.x:flink-sql-connector-hive-2.3.x
  • Hive 3.1.x:flink-sql-connector-hive-3.1.x

注意:必须使用与 Hive Metastore 版本匹配的 JAR,否则会出现方法找不到等错误。

3.2 添加依赖

方式一(推荐):将对应的 Hive 连接器 JAR 放入 $FLINK_HOME/lib/ 目录下。Flink 官方提供了包含所有必需依赖的 fat jar,例如 flink-sql-connector-hive-3.1.2_2.12-1.17.1.jar。直接放置即可。

方式二:若使用 SQL 客户端,可通过 -i 参数引入依赖或配置 sql-client-defaults.yaml 中的 jars 字段。

同时,还需确保 Hive Metastore 客户端所需配置文件(尤其是 hive-site.xml)对 Flink 集群的所有 TaskManager 和 JobManager 可见。通常做法是将该文件放置在一个共享目录(如 NFS),并通过 hive-conf-dir 参数指定路径。

3.3 启动 Hive Metastore 服务

Flink 不启动 Hive Metastore 服务,仅作为客户端连接它。因此,需要确保 Hive Metastore 服务(通常为 hive --service metastore)已运行,且 Flink 节点可以通过网络访问其 Thrift URI(默认端口 9083)。hive-site.xml 中需正确配置 hive.metastore.uris。


4. 实战一:使用 Flink SQL 读取 Hive 表

4.1 Hive 表作为批处理数据源(Batch Source)

Flink 可以像查询普通表一样直接读取 Hive 表,执行批量分析。步骤如下:

-- 1. 创建 Hive Catalog
CREATE CATALOG myhive WITH (
  'type' = 'hive',
  'default-database' = 'default',
  'hive-conf-dir' = '/opt/hive/conf'
);

-- 2. 切换 Catalog 与 database
USE CATALOG myhive;
USE mydatabase;

-- 3. 直接查询 Hive 表(默认批模式)
SELECT * FROM user_behavior WHERE dt = '2024-01-01';

-- 4. 也支持将查询结果写入其他 Sink
INSERT INTO print_sink
SELECT user_id, COUNT(*) FROM user_behavior GROUP BY user_id;

此时,Flink 会根据 Hive 表的存储格式选择对应的批处理文件源(如 ORC、Parquet),并将读取的数据交付给 Flink SQL 引擎计算。

4.2 Hive 表能否作为维表(Lookup Join)?

答案:不能直接作为维表!

Flink SQL 的维表关联(Lookup Join)要求表连接器支持按 key 快速查找(如 JDBC 查 MySQL,HBase 查 cell)。Hive 表是一个文件批次系统,本身不具备点查能力,因此 Hive 表不能直接用于 Lookup Join。

如果你的业务需要将流数据与 Hive 中的静态维表进行实时关联,可以考虑以下替代方案:

  • 方案1:将 Hive 维表数据预加载到外部缓存中(如 Redis、HBase),然后在 Flink 中定义对应的 Lookup 表关联。
  • 方案2:使用 CDC 工具(如 Flink CDC)捕获上游数据库变更,将维表变成动态流,通过 Temporal Join 实现关联(这要求维表支持 Changelog 流)。
  • 方案3:若维表数据量小且更新极不频繁,可定期将 Hive 数据导出为文件或内存状态,通过广播方式加载(需要自定义)。

总之,要记住:Hive 表是只读的批表,不能用于 Lookup Join(维表关联)。


5. 实战二:流式写入 Hive 表(Streaming Sink)——核心场景

这是 Flink 与 Hive 集成中最常见、最具价值的生产场景:将实时 Kafka 流数据持续写入 Hive 分区表,实现准实时的数据湖构建。

5.1 前提条件

  • Hive 表必须预先存在:Flink 目前不负责创建 Hive 表(DDL 需在 Hive CLI 中执行)。
  • Hive 表必须为分区表:非分区表不支持流式写入,因为流式 Sink 依赖分区提交机制。
  • Flink 作业必须开启 Checkpoint:分区提交行为由 Checkpoint 触发,未开启 Checkpoint 则分区永远不会提交。

5.2 Hive 表 DDL 示例(在 Hive CLI 中执行)

CREATE EXTERNAL TABLE ods.user_behavior (
  user_id STRING,
  item_id STRING,
  behavior STRING
)
PARTITIONED BY (dt STRING, h STRING)
STORED AS ORC
TBLPROPERTIES (
  'partition.time-extractor.timestamp-pattern' = '$dt $h:00:00',
  'sink.partition-commit.delay' = '1h',
  'sink.partition-commit.trigger' = 'partition-time',
  'sink.partition-commit.policy.kind' = 'metastore,success-file'
);

上面 TBLPROPERTIES 中的四个参数是流式写入 Hive 的精髓,稍后将详细剖析。

5.3 Flink SQL 写入作业编写

-- ========== 第一步:声明并切换至 Hive Catalog ==========
CREATE CATALOG myhive WITH (
  'type' = 'hive',
  'default-database' = 'ods',
  'hive-conf-dir' = '/opt/hive/conf',
  'version' = '3.1.2'
);

USE CATALOG myhive;
USE ods;

-- ========== 第二步:定义 Kafka 源表 ==========
CREATE TABLE kafka_source (
  user_id STRING,
  item_id STRING,
  behavior STRING,
  ts AS PROCTIME()   -- 处理时间,用于生成分区字段
) WITH (
  'connector' = 'kafka',
  'topic' = 'user_behavior',
  'properties.bootstrap.servers' = 'broker:9092',
  'properties.group.id' = 'flink_hive_consumer',
  'format' = 'json',
  'scan.startup.mode' = 'latest-offset'
);

-- ========== 第三步:启动 Checkpoint(必须!) ==========
SET 'execution.checkpointing.interval' = '5 min';
SET 'execution.checkpointing.timeout' = '10 min';
SET 'execution.checkpointing.max-concurrent-checkpoints' = '1';

-- ========== 第四步:流式插入 Hive 表 ==========
INSERT INTO user_behavior
SELECT 
  user_id,
  item_id,
  behavior,
  DATE_FORMAT(ts, 'yyyy-MM-dd') AS dt,
  DATE_FORMAT(ts, 'HH') AS h
FROM kafka_source;

作业启动后,Flink 会持续消费 Kafka 数据,生成 ORC 文件写入 HDFS 上对应的分区目录(如 /ods/user_behavior/dt=2024-06-01/h=14/)。当满足分区提交条件时,Hive 即可查询到该分区的数据。

5.4 深入理解 CREATE CATALOG

你可能会有疑问:生产环境中的 Hive Metastore 早已存在,为什么还要在 Flink 中执行 CREATE CATALOG?

答案在于 Flink 的 Catalog 是连接外部元数据服务的逻辑会话声明。

  • Hive 的 Catalog:Hive Metastore 本身就是一个元数据仓库,内部包含所有数据库和表,由 Hive 服务管理。
  • Flink 的 Catalog:是 Flink 内部的一个“元数据访问接口”抽象,CREATE CATALOG 只是告诉当前 Flink 会话如何连接和使用那个外部 Hive Metastore。

对比表:

系统Catalog 含义是否需要“创建”
Hive物理存在的元数据仓库已由 Hive 管理,无需 Flink 创建
Flink逻辑上的连接配置,用于访问外部 Metastore每个 Flink 会话都必须声明,会话结束后销毁

重要特性:

  • CREATE CATALOG 仅限当前 Flink SQL Session(即当前作业),不修改 Hive Metastore 任何内容。
  • 作业结束后,该 Catalog 声明自动销毁,不会影响其他作业。
  • 即使集群已部署 Hive,Flink 也需你明确告知 Metastore 地址(通过 hive-conf-dir 中的 hive-site.xml)、Hive 版本、默认数据库 等。
  • 如需访问多个 Hive 集群,可以在一个 Flink Session 中声明多个不同名称的 Hive Catalog。

5.5 分区提交机制深度剖析

流式写入 Hive 最核心的环节就是分区提交。这四个表属性控制着提交的时机和方式,必须彻底理解。

属性 1:partition.time-extractor.timestamp-pattern

作用:从分区字段值中提取出一个“逻辑时间戳”,作为判断分区是否可提交的时间基准。

格式:'$dt $h:00:00',其中 dt、h 对应分区字段名。Flink 会将分区字段值按此模式拼成一个时间字符串,再解析为 TIMESTAMP。

示例:分区 dt='2024-06-01', h='14',模式 '$dt $h:00:00' 产生的逻辑时间戳为 2024-06-01 14:00:00。

时区注意:默认使用 JVM 时区,需确保 Flink、Hive、数据时区一致,否则可能导致分区延迟提交或提前提交。

生产建议:

  • 统一分区字段命名为 dt(日期)、h(小时)、m(分钟),便于维护。
  • 按天分区:'$dt 00:00:00'
  • 按小时分区:'$dt $h:00:00'
  • 按分钟分区:'$dt $h:$m:00'
属性 2:sink.partition-commit.trigger

作用:定义分区提交的触发策略——基于分区的时间(partition-time)还是基于机器的系统时间(process-time)。

取值与对比:

  • partition-time(推荐):基于提取的逻辑时间戳,当 当前系统时间 ≥ 逻辑时间戳 + delay 时触发。这能正确处理数据乱序,因为逻辑时间由数据本身决定。
  • process-time(禁止生产使用):基于该分区首次被写入时的系统时间,加上 delay。如果作业发生重启,时间基准会重置,极易导致分区永远不提交(例如作业在 14:30 停止,15:00 重启,14:00 分区的 process-time 被重置为 15:00,加上 delay 后将一直等不到提交)。

工作流程(以 partition-time 为例):

  1. Flink 写入分区 /dt=2024-06-01/h=14/
  2. 提取逻辑时间 2024-06-01 14:00:00
  3. 当系统时间到达 2024-06-01 15:00:00(假设 delay=1h)时触发提交
  4. 更新 Metastore,写入 _SUCCESS
属性 3:sink.partition-commit.delay

作用:延迟提交的时间长度。对于 partition-time 触发器,分区提交条件为 系统时间 ≥ 逻辑时间戳 + delay。

为什么需要延迟:流数据可能因网络或上游问题发生延迟到达。假设有一个事件时间为 14:55 的数据,本该写入 14:00 分区,却在 15:02 才被 Flink 处理。如果没有 delay,分区可能在 15:00 就提交了,导致这条数据被遗漏在下一次分区中或成为脏数据。合理的 delay 应 ≥ 数据的最大允许延迟。

生产建议:delay 一般设置为 1h 或 30min,需结合具体数据延迟 SLA 确定。

属性 4:sink.partition-commit.policy.kind

作用:定义分区提交时具体执行哪些操作,可以是一个逗号分隔的策略列表。

常用策略:

  • metastore(必须):调用 Hive Metastore API 执行 ALTER TABLE ... ADD PARTITION,使分区在 Hive 中可见。
  • success-file(可选):在分区 HDFS 目录下创建空文件 _SUCCESS,标记分区写入完成。某些 ETL 工具(如 Oozie)依赖此文件进行调度,Hive 本身则不使用。
  • custom:用户实现 PartitionCommitPolicy 接口,执行自定义逻辑(如发送通知)。

生产标配:'metastore,success-file'。

四参数协同工作示例

假设使用前述 Hive 表属性,时间线如下:

时间(系统时间)事件
14:05Flink 开始写入分区 dt=2024-06-01, h=14
14:30一条事件时间为 14:20 的延迟数据到达,继续写入该分区
15:00系统时间 ≥ 14:00 + 1h → 触发器条件满足
15:00:01执行分区提交策略:更新 Metastore,创建 _SUCCESS
15:00:02Hive 可查询到 WHERE dt='2024-06-01' AND h='14' 的数据

如果此时又有事件时间为 14:55 的数据迟到(15:02 到达),它仍会写入该分区文件,但分区已提交,Hive 能否看到这条数据取决于文件格式和压缩方式(ORC/Parquet 是自描述列存,新数据追加会导致查询可能看到部分数据,但文件系统层面不原子)。因此,合理设置 delay 至关重要。


6. 使用 Hive UDF / UDAF / UDTF

Flink SQL 支持直接调用 Hive 中已注册的自定义函数,无需二次开发,极大提升了函数复用率。

6.1 前提条件

  • 函数已在 Hive Metastore 中注册(即通过 CREATE FUNCTION 持久化)。
  • 函数所需的 JAR 包必须位于 Flink 的 classpath 下(通常放入 $FLINK_HOME/lib/ 或通过作业 -C 参数指定)。

6.2 加载与调用

-- 1. 已处于 HiveCatalog 上下文中
USE CATALOG myhive;
USE mydb;

-- 2. 加载 Hive Module(使 Flink 能识别 Hive 函数)
LOAD MODULE hive;
-- 查看已加载的模块,应包含 'hive' 和 'core'
SHOW MODULES;

-- 3. 直接调用 Hive UDF
SELECT my_hive_udf(user_id, 10) FROM user_behavior;

如果函数在 default 库或其他库,需要使用完全限定名或先 USE 对应库。

注意:LOAD MODULE hive 会按 hive, core 的顺序搜索函数。如果 Hive UDF 与 Flink 内置函数重名,优先调用 Hive 的函数。可以通过 USE MODULES core, hive 调整优先级。


7. 高级配置与调优

7.1 Checkpoint 配置(强制)

分区提交由 Checkpoint 触发,不开启 Checkpoint 则分区永远不会提交(文件一直处于 .in-progress 状态)。在 SQL 脚本中通过 SET 配置:

SET 'execution.checkpointing.interval' = '5 min';          -- Checkpoint 间隔
SET 'execution.checkpointing.timeout' = '10 min';          -- Checkpoint 超时时间
SET 'execution.checkpointing.max-concurrent-checkpoints' = '1';  -- 并发 Checkpoint 数
SET 'execution.checkpointing.min-pause' = '3 min';         -- 两次 Checkpoint 最小间隔

建议开启增量 Checkpoint 和外部持久化存储,提升稳定性。

7.2 小文件合并

高频写入会产生大量小文件,严重影响 HDFS 和查询性能。可通过表属性控制文件滚动策略:

ALTER TABLE user_behavior SET TBLPROPERTIES (
  'sink.rolling-policy.file-size' = '128MB',    -- 文件大小达到 128MB 滚动
  'sink.rolling-policy.rollover-interval' = '30 min',  -- 或每 30 分钟滚动一次
  'sink.rolling-policy.check-interval' = '1 min'       -- 滚动检查间隔
);

上述属性表示:当当前写入文件满足 大小超过 128MB 或 打开时间超过 30 分钟 任一条件时,关闭当前文件,开启新文件。

对于已产生的小文件,可定期运行 Compaction 任务(如 Spark 小文件合并程序)进行整理。

7.3 并行度与资源调优

  • 写入并行度:如果源是 Kafka,建议写入并行度与 Kafka 分区数一致,避免数据倾斜。
  • 文件桶(Bucket):若 Hive 表分桶,需确保写入数据根据桶列正确分布,否则会破坏分桶结构。
  • Hive Metastore 连接压力:大量并发写入可能导致 Metastore 频繁更新。可通过 sink.partition-commit.policy.kind 控制更新策略,减少不必要的调用。在极高吞吐场景,可考虑适当增大 Checkpoint 间隔(如 10 分钟),减少提交频率。

7.4 监控与运维

  • 日志监控:搜索 PartitionCommitter 相关日志,确认分区提交成功与否。常见关键字如 Committed partition、Fail to commit。
  • Metastore 一致性检查:定期通过 SHOW PARTITIONS table_name; 在 Hive 中确认分区数是否与预期一致。
  • HDFS 文件检查:留意 .in-progress 文件是否长时间未滚动或提交。若发现残留,可能是 Checkpoint 失败或提交策略问题。
  • 指标埋点:Flink 的 File Sink 暴露了诸如 numPendingFiles、numCompletedFiles 等指标,可接入监控系统。

8. 常见问题与避坑指南

  1. 启动作业报错 ClassNotFoundException: ...Hive...
    原因:缺少 Hive 连接器 JAR 或 Hive 依赖 JAR。解决方法:将正确版本的 flink-sql-connector-hive-*.jar 放入 $FLINK_HOME/lib/。

  2. 分区始终不提交,文件一直是 in-progress
    原因:Checkpoint 未开启或失败。请务必通过 SET 配置 Checkpoint,并在 Flink Web UI 中确认 Checkpoint 成功执行。

  3. Hive 查询不到最新分区数据

    • 检查分区是否已提交:在 Hive 中执行 SHOW PARTITIONS table_name; 查看分区是否存在。
    • 如果分区存在但数据为空,可能是提交后仍有数据写入但未刷新。尝试设置 sink.partition-commit.delay 稍长一些,确保数据全部落盘后再提交。
  4. partition.time-extractor.timestamp-pattern 解析失败
    确认分区字段名称与模式中使用的变量名完全一致(大小写敏感)。例如模式为 $dt $h:00:00,那么分区字段必须命名为 dt 和 h。另外,模式中除变量外的字符必须与分区值字面匹配。

  5. 写入性能差,吞吐量低

    • 增大文件滚动大小和间隔,减少文件频繁关闭带来的开销。
    • 增加写入并行度,合理利用集群资源。
    • 检查 HDFS 压力,必要时调整 HDFS 块大小。
  6. Hive UDF 调用报错 NoClassDefFoundError
    UDF JAR 必须出现在 Flink 的 classpath 中。可以将 JAR 放入 $FLINK_HOME/lib/,或在作业提交时通过 -C 参数传入。建议将 UDF 及其依赖打包成 uber jar。


9. 结语

Flink SQL 集成 Hive 打破了流与批的边界,让实时计算能够自然地融入企业既有的数据湖体系。通过 HiveCatalog 元数据统一、Streaming File Sink 流式写入、Hive UDF 复用,我们能够构建出高时效、低成本、易维护的实时数仓解决方案。深入理解分区提交机制、Checkpoint 强依赖以及小文件合并策略,是保障生产稳定性的关键。

在实际落地时,需结合具体业务场景权衡数据延迟与数据完整性的平衡(通过 delay 参数),并建立完善的监控与自动化运维体系。随着 Flink 与 Hive 集成的不断成熟,流批一体的架构必将推动数据平台迈向更高的效率台阶。

本文参考 Apache Flink 官方文档(Hive Integration)

flink sql 知其所以然(十六):flink sql 开发企业级利器之 Dlink 1.序篇 博主这个系列都是讲 flink sql 相关的实践的。 讲到这个章节,其实挺多常用的 flink sql 语法及实战案例都已经讲了。 那么原理讲了,得在自己家公司把 flink sql 这等好东西用起来啊。 搞大数据开发的同学基本都知道在 HUE 上面写 hive sql 贼爽。那么有没有写 flink sql 的企业级的 web IDE 推荐的呢? 经过博主调研之后,发现有两款非常优秀的利器: Apache Zeppelin Dlink 为啥先介绍 Dlink 呢? 因为博主和其开发 阅读详情

相关推荐

【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用

【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用

weixin_53543905的博客 7122

Flink实时数仓落地方案

实时数仓架构图: 说明: 数据采集层:原始数据目前分三种,由中台生成的埋点日志用于主流,RDBMS则是获取业务库表,通常用于维表关系所需,binlog日志通过cdc方式进入kafka进行消费,用于大维表的增量更新。 数据计算层:数据计算层的计算引擎是Flink,通过较上层的FlinkSQL实现数据的ETL加工,其中HDFS作用于大维表初始化到Hbase过程所用,再通过Flinksql消费binlog日志进行增量更新。 数据共享层:通过Flinksql对主流表进行打宽后输出到dw层kafka为最终

Monstar_L的博客 3052

Flink学习实战路线图:从官方文档到社区实践的系统进阶指南

流处理技术作为大数据领域的核心,其核心在于处理无界数据流并实现低延迟、高吞吐的计算。Apache Flink作为流批一体的统一计算引擎,通过其精确一次(Exactly-Once)语义、状态管理和容错机制,为实时数据处理提供了坚实的技术基础。其技术价值体现在能够简化复杂事件处理架构,支撑实时数仓、实时风控和实时推荐等关键业务场景。对于开发者而言,掌握Flink不仅需要理解其Time、Window、State、Checkpoint四大基石原理,更需通过系统化学习和动手实践将知识内化。本文聚焦Flink JDBC

weixin_30471561的博客 338

Flink写入hive的问题简单记录

Flink写入hive

qq_42265026的博客 2508

Flink SQL Client实战避坑:从环境配置到Hive集成的完整排雷指南

本文详细解析了Flink SQL Client从环境配置到Hive集成的完整避坑指南,包括内存配置、结果模式选择、Hive依赖冲突解决等实战经验。特别针对sql-client常见问题如环境变量设置、Kerberos认证等提供了具体解决方案,帮助开发者高效使用Flink进行数据处理。

weixin_30878501的博客 223

大数据生态系统全景图:Hadoop、Spark、Flink、Hive、Kafka 的关系

随着数据规模的指数级增长,传统单机数据库和计算方式已难以满足业务需求。大数据生态系统应运而生,其中 Hadoop、Spark、Flink、Hive、Kafka 等组件相互配合,构成了一个完整的数据处理闭环。很多初学者常常困惑:这些框架到底解决了什么问题?它们之间又是怎样的关系?本文将通过一张“全景图”带你理清思路。Hadoop提供存储与调度,是地基;Hive提供 SQL 查询,是数仓利器;Spark提供快速批处理与通用计算能力;Flink聚焦实时流处理,满足低延迟需求;Kafka。

X2829352498的博客 654

性能优化技巧:大事实表与大维表关联

一、问题背景与适用场景 在《性能优化技巧:小事实表与大维表关联》中,我们尝试了小事实表与大维表关联时的性能优化方法,该方法利用了小事实表可以装入内存的特点,将关联键汇集排序后到大维表中查找,避免了遍历大维表的动作。如果事实表与维表都大到不能装载到内存时,这个办法就不再有效了,那么,还有什么办法提高性能呢? SQL的方案是对两个表做HASH分堆,拆小到内存可以放下的地步,分别写入外存,然后再分别读入进行内存关联。如果运气不好,拆出来的某个堆还是太大,就需要做二次HASH。同时,两个表都需要做一遍...

Raqsoft 538

用ADS复现一篇MTT顶刊的GAN功率放大器:从理论推导到版图仿真的完整避坑指南

本文详细解析了如何利用ADS软件复现MTT顶刊中的E/F3类GaN功率放大器设计,从理论推导到版图仿真的全流程。通过核心设计理念解析、ADS环境配置、输出匹配网络优化等关键步骤,提供了一套完整的工程实践指南,帮助工程师跨越学术理论与实际应用的鸿沟,实现高效率射频功率放大器的设计。

weixin_30654583的博客 314

flink维表关联系列之Redis维表关联:实时查询

点击上方蓝字关注~ 在做维表关联如果要求低延时,即维表数据的变更能够被立刻感知到,所以就要求在查询时没有缓存策略,直接查询数据库维表信息。本篇以实时查询redis为例,要求r...

张普的专栏 3342

GD32单片机开发环境搭建(Keil5安装)

1.安装MDK5 由于GD32 Keil 版本例程的工程是基于Keil MDK-ARM 5.25 uVision5 创建的,所以我在此也安装MDK5.25版本。 下载链接:https://pan.baidu.com/s/1E4tcDQvsVl0xezU3pEyJTA 提取码:s1fr 其他版本下载链接:https://cloud.tencent.com/developer/article/1605195 选择安装路径(不要装到中文路径下,避免不必要的麻烦): 用户信息随便...

fangye945a的博客 3万+

用FPGA控制步进电机是种什么体验?从状态机到分频器,详解Verilog驱动A4988全流程

本文详细介绍了如何使用FPGA通过Verilog语言控制步进电机,从状态机设计到A4988驱动模块的精准控制全流程。FPGA的并行处理能力和纳秒级响应速度使其在步进电机控制中展现出显著优势,特别适合工业自动化和精密仪器应用。通过实战代码示例,展示了如何实现高效的状态机设计和可编程分频器,为开发者提供了一套完整的FPGA驱动步进电机解决方案。

weixin_30983965的博客 329

Flink DataStream 关联维表实战

上篇博客提到 Flink SQL 如何 Join 两个数据流,有读者反馈说如果不打算用 SQL 或者想自己实现底层操作,那么如何基于 DataStream API 来关联维表呢?实际上由...

Ververica的博客 2829

尝试使用CubeMX做stm32开发之九:SYS配置

参考《STM32中文参考手册_V10》,研究CubeMX中有关SYS的配置

Forster-C的博客 9418

Flink SQL 与 Flink API:实时数仓建设的得力助手

Flink SQL 和 Flink API 在实时数仓建设中各有所长。Flink SQL 以其简洁易用的特点,适合快速搭建实时数仓的基本数据处理流程;而 Flink API 则凭借高度的定制化能力,为复杂的数据处理需求提供了强大的解决方案。在实际项目中,我们可以根据具体的业务场景和需求,灵活选择使用 Flink SQL 或 Flink API,或者将两者结合起来,充分发挥 Flink 的优势,构建高效、可靠的实时数仓系统。随着大数据技术的不断发展,实时数仓的重要性日益凸显。

893

阿里云人工智能工程师ACA认证免费课程学习笔记

阿里云人工智能工程师ACA认证免费课程学习笔记

engchina的专栏 2013

JMeter脚本录制-快速上手篇

有的项目应用场景下,压测时,需要考虑带宽因素,压测不只是压测接口,静态资源也要一起压测。一般来说,静态资源比较多,如果一个个手工去写请求,是比较繁琐的,此时,可以使用Jmeter的脚本录制功能。 步骤1,创建脚本录制模版。 JMeter菜单:文件>模版,下拉选择到Recording,点击“Create”按钮; 填写录制参数: hostToRecord:填写要录制的主机域名,例如,我们这里填入:www.baidu.com schemeToRecord:填写要录制的模式,例如,htt...

软件测试大叔 5733

Flink 高分笔记

这篇博客文章总结了Flink流计算相关的基础知识和实践指南。主要内容包括:1) 流计算基础概念,如事件时间、Watermark机制、Exactly-once语义;2) Flink基础操作,如安装部署、程序结构、并发设置、故障恢复;3) DataStream API核心功能,包括时间概念、窗口计算、状态管理、双流Join等;4) Table API与SQL的使用方法和工作原理。文章提供了丰富的技术文档链接,涵盖了Flink从入门到进阶的各个方面,既有理论讲解也有实践案例,是一个系统的Flink学习资源合集。

SmartSi 1707

目前固态激光雷达在机器人领域的应用难点汇总

固态激光雷达在机器人领域面临性能与成本的双重挑战:探测性能上,动态范围不足(60-80dB)导致高/低反射物体识别困难,近距盲区(30-50cm)与长距精度(±3cm)矛盾突出;结构上视场角与点云密度难以平衡,多雷达拼接又带来同步误差。成本方面,核心元件(SPAD/OPA芯片)良率低(<50%)、校准工序复杂,单机成本超200美元。环境适应性上,粉尘附着、振动偏移(±2°)和光衰(1万小时衰减15%)制约可靠性。

start_up_go的博客 480

(技术了解)Flink:流批一体的数据处理利器

Apache Flink 是一个开源的分布式流处理和批处理框架,专为高性能、低延迟的数据处理场景设计。Flink 的核心特点包括精确一次的状态一致性、事件时间处理、窗口操作以及灵活的容错机制。它支持有界和无界数据流,适用于实时分析、事件驱动应用、数据管道等场景。

2301_79085270的博客 623

硅电容的工艺结构原理及选型参数总结

硅电容,也称为硅质电容或硅二极管电容,是一种特殊的电容器。它利用硅二极管的结构来实现电容的功能。本文对硅电容的工作原理,结构特点,选型参数及设计注意事项进行总结。

fydar的博客 2327

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【Flink 核心篇】Flink 测试利器:DataGen

总之,Flink DataGen 是一个强大的工具,可以帮助测试人员构造各种类型的测试数据。通过合理的使用 ,测试人员可以更有效地进行测试,并发现潜在的问题和缺陷。

Data · Model · Agent · Repeat 2826

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

2026最全大数据工程师学习路线(建议收藏)

本文为大数据自学者及从业者提供从入门到入职的完整学习路径,涵盖大数据岗位分析、技能要求、八大阶段系统学习内容(含Linux、Java、Hadoop、Spark、Flink、数仓、ELK等),并配套实战项目与资源推荐。强调“理论+项目”结合,助力零基础转型大数据工程师,附赠面试宝典与私信获取课程资料彩蛋。

大数据架构师,深耕车联网实时数仓。专注 Flink / Paimon / Doris 流批一体、CDC 同步与实时 AI 推理,把生产里的架构选型、作业实战和故障排查整理成 4 个连载系列,只写实测跑得通的方案,欢迎私信交流。 7249

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

秒懂Flink:Flink CDC实时数据同步技术详解

Flink CDC(Change Data Capture)是Flink生态中用于实时数据同步的核心技术,能够帮助用户轻松实现数据库变更的实时捕获与同步。本指南将从基础概念、核心优势到实际应用,全面解析Flink CDC技术,让新手也能快速掌握这一强大工具。 ## 一、Flink CDC核心概念解析 ### 1.1 什么是CDC? CDC(变更数据捕获)是一种数据集成技术,能够捕获数据库中的数

gitblog_00496的博客 507

Flink SQL 元数据持久化实战

通过引入DDL 持久化:彻底告别“重启即丢”的尴尬,保障元数据安全。

Ln5x9qZC2的博客 519

Flink在实时在实时计算平台和实时数仓中的企业级应用小结

点击上方蓝色字体,选择“设为星标”回复”资源“获取更多资源大数据领域自 2010 年开始,以 Hadoop、Hive 为代表的离线计算开始进入各大公司的视野。大数据领域开始了如火如荼的发展...

微信搜:import_bigdata,大数据领域硬核原创作者 1632

探秘 Flink SQL Client:数据流处理的新利器

探秘 Flink SQL Client:数据流处理的新利器 本文将带你深入了解一个开源项目——,这是一个基于 Apache Flink 的命令行客户端工具,旨在提供更直观、便捷的方式来执行 Flink SQL 查询。通过它,开发者可以无需编写复杂的 Java 或 Scala 代码,直接使用 SQL 语法进行实时数据分析和处理。 项目简介 Flink SQL Client 是由社区开发者 Molsi...

gitblog_00033的博客 398
上一篇: Flink 系列第24篇:Flink SQL 集成维度表指南:存储选型、参数调优与实战避坑
juniperhan
博客等级 码龄1年 132粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值