Hudi系列23:常见问题

news2024/12/23 10:21:55

文章目录

  • 一. 存储一直看不到数据
  • 二. 数据有重复
  • 三. NoSuchMethodError
    • 3.1 问题描述
    • 3.2 解决方案
      • 3.2.1 查看源码
      • 3.2.2 avro版本问题
      • 3.2.3 hudi-flink1.14-bundle jar包的问题
  • 四. Merge On Read 写只有 log 文件
    • 4.1 问题描述
    • 4.2 解决方案1(测试未通过)
    • 4.2 解决方案2(测试通过:)
    • 4.3 原来是配置的问题
  • 参考:

一. 存储一直看不到数据

这个问题卡了我好久好久,差点都要放弃了,还是看视频和文档不仔细。

如果是 streaming 写, 请确保开启 checkpoint, Flink 的 writer 有 3中刷数据到磁盘的策略:

  1. 当某个 bucket在内存中积攒到一定大小 (可配, 默认 64MB)
  2. 当总的 buffer 大小积攒到 一定大小 (可配, 默认 1GB)
  3. 当checkpoint 触发, 将内存里的数据全部 flush出去
set execution.checkpointing.interval=600sec;

二. 数据有重复

如果是 COW 写, 需要开启参数 write.insert.drop.duplicates, COW 写每个 bucket的第一个文件默认是不去重的, 只有增量的数据会去重,全局去重需要开启该参数; MOR 写不需要开启任何参数, 定义好 primary key 后默认全局去重。 (注意: 从 0.10 版本开始, 该属性改名 write.precombine 并且默认为 true)

如果需要多 partition 去重,需要开启参数: index.global.enabled为true。(注意: 从 0.10 版本开始, 该属性改名 write.precombine 并且默认为 true)

索引 index 是判断数据重复的核心数据结构, index.state.ttl 设置了索引保存的时间, 默认 1.5 天,对于昌时间周期的更新, 比如更新一个月前的数据,需要将 index.state.ttl 调大(单位 天), 设置小于0代表永久保存。(注意: 从0.10 版本开始, 该属性默认为0)

三. NoSuchMethodError

3.1 问题描述

Flink SQL将MySQL数据写Hudi的MOR总是报如下错误:

Caused by: java.lang.NoSuchMethodError: org.apache.hudi.org.apache.avro.specific.SpecificRecordBuilderBase.<init>
(Lorg/apache/hudi/org/apache/avro/Schema;Lorg/apache/hudi/org/apache/avro/specific/SpecificData;)

报错:
image.png

3.2 解决方案

3.2.1 查看源码

编译后的源码查找:
image.png

Flink源码中查找:
image.png

image.png

原来是有同名的class:
而且这两个jar包下的class,内容还不一样
image.png
image.png

image.png

结果:
最终还是不行,一样的报错。

3.2.2 avro版本问题

在网上看了一些博客,说可能是avro的版本的问题

于是把 hadoop、hive、spark、flink的avro版本都修改为了最新的版本 avro-1.11.0.jar

https://www.coder.work/article/728416

image.png

结果:
最终还是不行,一样的报错。

3.2.3 hudi-flink1.14-bundle jar包的问题

最开始我看到报错前面都是 org.apache.hudi.org.apache.avro,我还以为是提示错误,后来想想也不至于,然后想到 hudi-flink1.14-bundle 这个jar包的问题,下载下来通过idea代开后看了下,果然和我想的一样。

image.png

找到了具体有问题的class,但是暂时也解决不了。
所以只能想着替换这个jar包。

替换jar包:
https://blog.csdn.net/dkl12/article/details/127621878
如果想同步 Hive 的话,就不能使用上面下载的包了,必须使用profileflink-bundle-shade-hive。 (先就这样吧,谁让我编译的有问题呢?)

https://repo1.maven.org/maven2/org/apache/hudi/hudi-flink1.14-bundle/0.12.0/hudi-flink1.14-bundle-0.12.0.jar

结果:
问题解决,困扰了长达两周的问题终于解决了。

四. Merge On Read 写只有 log 文件

4.1 问题描述

Merge On Read 默认开启了异步的compaction,策略是 5 个 commits 压缩一次, 当条件满足会触发压缩任务,另外,压缩本身因为耗费资源,所以不一定能跟上写入效率,可能有滞后。

可以先观察 log,搜索 compaction 关键词, 看是否有 compact 任务调度:
After filtering, Nothing to compact for 关键词说明本次 compaction stratefy是不做压缩。

MOR表只有log 没有parquet
image.png

4.2 解决方案1(测试未通过)

网上的案例,要求加上这个:
image.png

将jar包拷贝过去:
image.png

结果:
问题依旧,依然只有log文件,没有parquet文件。

4.2 解决方案2(测试通过:)

Hudi还支持离线手动Compaction,然后我就手工执行Compaction命令。

flink run -c org.apache.hudi.sink.compact.HoodieFlinkCompactor /home/flink-1.14.5/lib/hudi-flink1.14-bundle-0.12.1.jar --path hdfs://hp5:8020/tmp/hudi/flink_hudi_mysql_cdc8

image.png

终于有parquet文件了:
image.png

4.3 原来是配置的问题

我最开始创建Hudi表,将Compaction设置为了flase,改为true即可,无需手工进行compaction

原始脚本:

CREATE TABLE flink_hudi_mysql_cdc8(
    id BIGINT NOT NULL PRIMARY KEY NOT ENFORCED,
    name varchar(100)
  ) WITH (
   'connector' = 'hudi',
   'path' = 'hdfs://hp5:8020/tmp/hudi/flink_hudi_mysql_cdc8',
   'table.type' = 'MERGE_ON_READ',
   'changelog.enabled' = 'true',
   'hoodie.datasource.write.recordkey.field' = 'id',
   'write.precombine.field' = 'name',
   'compaction.async.enabled' = 'false'
);

修改后:

CREATE TABLE flink_hudi_mysql_cdc8(
    id BIGINT NOT NULL PRIMARY KEY NOT ENFORCED,
    name varchar(100)
  ) WITH (
   'connector' = 'hudi',
   'path' = 'hdfs://hp5:8020/tmp/hudi/flink_hudi_mysql_cdc8',
   'table.type' = 'MERGE_ON_READ',
   'changelog.enabled' = 'true',
   'hoodie.datasource.write.recordkey.field' = 'id',
   'write.precombine.field' = 'name',
   'compaction.async.enabled' = 'true'
);

参考:

  1. https://www.bilibili.com/video/BV1ue4y1i7na/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/555816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[LitCTF 2023]Flag点击就送!(cookie伪造)

随便输一个名字 尝试admin 但是我们在cookie里找到了一些东西 session&#xff1a;"eyJuYW1lIjoiYWRtaW4ifQ.ZGs1vw.7ikpuOhUtXxyB2UV-FH7UGIZkaE" 想到session伪造 先说一下session的作用&#xff1a; 由于http协议是一个无状态的协议&#xff0c;也就是说同一个用…

chatgpt赋能Python-pythonseries访问元素

Python Series: 访问元素 在Python中&#xff0c;我们可以使用列表&#xff08;List&#xff09;、元组&#xff08;Tuple&#xff09;和字典&#xff08;Dictionary&#xff09;等可迭代对象存储和处理数据。在处理这些可迭代对象时&#xff0c;我们经常需要对它们的元素进行…

【WSN覆盖】基于麻雀搜索算法的二维混合无线传感器网络覆盖优化 WSN覆盖空洞修复【Matlab代码#24】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. SSA算法2. WSN节点感知模型3. 混合WSN覆盖优化4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 1. SSA算法 网上…

数字逻辑(计科专业)

半加器 用与非门实现 全加器 编码器 编码就是将信息装换成独特的代码或信号输出的电路 普通编码器&#xff1a;任何时候只允许输入一个有效编码信号&#xff0c;否则输出就会发生混乱。 优先编码器&#xff1a;允许同时输入两个以上的有效编码信号。当同时输入几个有效编码信…

【算法学习系列】05 - 对数器的说明与使用

文章目录 对数器说明对数器使用创建随机样本生成器实现 isSorted(int[] arr) 函数验证排序正确性实现选择排序算法进行大样本随机测试验证算法正确性 总结 对数器说明 在算法领域中&#xff0c;对数器指的是一个用于测试算法正确性的工具。对于一个需要被测试的算法A&#xff0…

Redis分片集群搭建及其原理

Redis分片集群搭建及其原理 1.Redis分片集群1.1.搭建分片集群1.2.准备实例和配置1.3.启动1.4.创建集群1.5.测试 2.散列插槽原理2.1.插槽原理2.2.小结 3.集群伸缩3.1.需求分析3.2.创建新的redis实例3.3.添加新节点到redis3.4.转移插槽 4.故障转移4.1.自动故障转移4.2.手动故障转…

十三、进程信号

文章目录 一、什么是信号二、信号列表&#xff08;一&#xff09;查看系统定义的信号列表 三、信号处理四、信号产生&#xff08;一&#xff09;通过终端按键产生信号1.什么是核心转储&#xff1f;2.核心转储功能有什么用&#xff1f;3.core dump标志 &#xff08;二&#xff0…

计算机论文写作入门

什么是顶会 顶级会议一般是,在业界(本领域本方向)受到广泛的承认,影响力较大的会议。一方面一般顶级专家、学者都倾向于将paper投到这些 会议;另一方面这些会议的论文代表了该领域的目前很优秀、有重大意义的进展。"顶级会议"的投稿竞争压力一般都很大,属于在经典 p…

05. 数据结构之队列

前言 队列&#xff08;queue&#xff09;是一种线性数据结构&#xff0c;队列中的元素只能先入先出&#xff08;First In First Out&#xff0c;简称 FIFO&#xff09;。队列和实际生活中的排队相对应&#xff0c;是一种和生活息息相关的数据结构&#xff0c;在很多系统中都会…

MATLAB 之 其他形式的二维图形

文章目录 一、对函数自适应采样的绘图函数二、其他坐标系下的二维曲线图1. 对数坐标函数2. 极坐标图 三、其他特殊二维图像1. 条形类图形2. 面积类图形3. 散点类图形4. 矢量类图形 二维图线除采用直角坐标系外&#xff0c;还可采用对数坐标或极坐标。除了绘制二维曲线外&#x…

大环境不好难找工作?三面阿里,幸好做足了准备,已拿offer

大环境不好难找工作&#xff1f;三面阿里&#xff0c;幸好做足了准备&#xff0c;已拿offer 三面大概九十分钟&#xff0c;问的东西很全面&#xff0c;需要做充足准备&#xff0c;就是除了概念以外问的有点懵逼了&#xff08;呜呜呜&#xff09;。回来之后把这些题目做了一个分…

软件测试学习规划(学习思路、学习方法、面试技巧、后期发展、职业规划等)

软件测试学习思路 1、基础知识、理论知识&#xff08;用例编写&#xff0c;测试方法&#xff0c;用例管理&#xff09;&#xff0c;测试思维的学习&#xff0c;很多人不屑理论&#xff0c;一股劲的扎进测试工具里面。最大的误区&#xff0c;工具永远学不完&#xff0c;测试必须…

【Node.js搭建服务器】使用Nodejs搭建简单的HTTP服务器----公网远程访问

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

C++入门--auto关键字、内联函数学习

目录 1.auto关键字&#xff08;C11&#xff09;1.1auto简介1.2auto的使用细则1.3auto函数不能推导的场景1.auto不能作为函数的参数2.auto不能直接用来声明数组 2.基于范围的for循环&#xff08;C&#xff09;2.1范围for循环的语法2.2使用auto的for循环2.3基于for循环的使用条件…

【linux网络】firewalld 防火墙

firewalld防火墙 一、firewalld防火墙1.1firewalld防火墙概述1.2firewalld与iptables的区别1.3Firewalld网络区域1.4firewalld数据处理的流程1.5firewalld防火墙的配置方法 二、firewall-cmd的命令选项2.1默认区域2.2网卡接口增删改查区域2.3源地址增删改查区域2.4区域规则的增…

接口测试之测试原则、测试用例、测试流程......

之前都是在网上杂乱得看了很多接口测试的资料&#xff0c;但总感觉不够系统&#xff0c;特地找了本书重新系统的学习一下&#xff0c;结合之前收集的一些资料查漏补缺。 《接口自动化测试持续集成postman》&#xff0c;这本大部分内容还是讲的是 postman 工具的使用方法&#…

spark应用程序的执行

1 SparkContext -》{ sparkconf --配置对象&#xff0c;基础配置 sparkEnv --环境对象&#xff0c;通讯环境 SchedulerBackend --通讯后台 住哟啊用于和Executor之间进行通讯 TaskScheduler – 任务调度器 任务调度 DAGScheduler – 阶段调度器 阶段划分 } spark.sparkContext…

贪心算法专练

⭐️前言⭐️ 本篇文章主要分享几道贪心算法的题目&#xff0c;贪心算法是一种基于自然智慧的算法&#xff0c;这类题目并没有统一的解法&#xff0c;但通常都是每一步做出一个局部最优的选择&#xff0c;最终的结果就是全局最优。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 …

图神经网络:(化学领域)再次认识图神经网络

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook和有关文献。超链。提取码8848。 文章目录 Mutagenicity数据集搭建模型训练模型文献阅读重新回来 Mutagen…

day36_JQuery

今日内容 零、 复习昨日 一、正则表达式 二、JQuery 零、 复习昨日 零、正则表达式 Regular expression RegExp 0.1 正则表达式 正则表达式是描述字符模式的对象。正则表达式用于对字符串模式匹配及检索替换&#xff0c;是对字符串执行模式匹配的强大工具。语法&#xff1a; va…