问题标签 [apache-hudi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
amazon-web-services - AWS S3 (ap-south-1) 为 Hudi DeltaStreamer 作业返回错误请求
我正在尝试使用以下 cmd 运行 DeltaStreamer 作业以将数据推送到 S3 存储桶:
这将返回以下错误:
我想我正在使用正确的 S3 端点。我需要创建 S3 接入点吗?我正在关注https://hudi.apache.org/docs/docker_demo.html ( https://github.com/apache/hudi/tree/master/docker ) 中提到的版本。
apache-spark - 对原表进行upsert后,Hudi的Parquet文件名中的writeToken发生变化,导致增量查询失败
@[目录]
0 原因猜测
每次我们更新目标时,hoodie 都会生成一个日志并对其进行压缩,从而导致该时间点之前的任何增量查询终止。
1
以下是与原始标签有关的所有操作。
1.1 操作一(更新)
先对原表进行upsert操作(更新370条数据),然后进行增量查询,结果成功
使用hadoop命令查询HDFS文件,出现log log,数据写入log文件,而不是parquet:
执行压缩操作时未发生压缩。
1.2 操作2(插入和更新)
原表数据插入6条数据,更新380条数据。Spark查询到的HDFS数据变化如下:
数据 370 被重复提交。使用Spark进行增量查询时出现如下错误:
使用hadoop命令查询instantTime的‘20210730142459’的parquet,发现实际的writeToken是‘341-295’,而查询到的writeToken是‘340-294’,说明文件又被写入了。结果,writeToken 被更改,导致 Spark 增加一个无效或不存在的 Parquet 文件。
我们发现一个数据报 InstantTime '20210730142459' 被压缩了一次,导致数据报重写和 writeToken 改变。
2 排除其他因素
我们有一个不生成日志文件的新插入操作,并且我们还没有执行压缩操作。但是,一旦一对原始表被更新,就会生成并压缩日志。
3 解决方案
先前针对错误数据的尝试,
查询campAction的状态:
在 HUDi-cli 上运行“compaction repair --instant 20210730112532”命令。sh 服务器来修复压缩。
3.2 方案二
调整 Hudi 压缩操作,如hoodie.com paction. Strategy
. 尚未找到有用的调整策略。
已经进行了尝试,但是 upsert 导致增量查询失败并没有帮助。
希望大家能指出正确的解决方法,谢谢。
apache-hudi - Apache Hudi 中 _hoodie_commit_time 列的时间戳格式是什么?
我正在探索apache-hudi
框架并遵循快速指南。我正在尝试增量查询功能,我们使用列_hoodie_commit_time
来确定增量拉取。我想知道这个专栏的时间戳格式和时区是什么。有人可以帮我吗?这是_hoodie_commit_time
列的示例值:20210730005516。
apache-spark - 如何使用 Hudi 转换器类(Spark 数据集)将字符串转换为 JSON?
我通过 Logstash 到 Kafka 到 S3 管道收到以下消息。我正在使用 Hudi DeltaStreamer 使用 Avro 模式来使用来自 Kafka 的数据。
示例数据:(将 Parquet 输出为 JSON)
虽然我可以反序列化大多数字段(使用基于文件的 Avro 模式),但我不能这样做"message"
- 我目前正在使用“字符串”数据类型来提取值。它"message_json"
是 base64 编码的,我也想解码这些数据。我的记录键应该是curr_dt
+的组合current_devic
。
Hudi DeltaStreamer 有一个--transformer-class
选项允许使用自定义子类,org.apache.hudi.utilities.transform.Transformer
该子类适用于 Spark“数据集”数据结构,但如何将"message"
字符串转换为 JSON 和解码"message_json"
?
火花作业:
Avro 架构:
apache-spark - Issue with Apache Hudi Update and Delete Operation on Parquet S3 File
Here I am trying to simulate updates and deletes over a Hudi dataset and wish to see the state reflected in Athena table. We use EMR, S3 and Athena services of AWS.
- Attempting Record Update with a withdrawal object
Shows the updated record but it is actually appended in the Athena table. Probably something to do with Glue Catalogue?
- Attempting Record Delete
still reflects the deleted record in the Athena table
Also tried using mode("overwrite")
but as expected it deletes the older partitions and keeps only the latest.
Did anyone faced same issue and can guide in the right direction
apache-spark - 分区修剪不适用于 Hudi 数据集
我们创建了一个 Hudi 数据集,它有这样的两级分区
wherepartition1
和partition2
是类型string
使用format in运行简单count
查询时,大约需要 3 分钟才能完成Hudi
spark-shell
这也是 Spark UI 中的指标,其中大约 9000 个任务(大约相当于整个数据集中的文件总数)用于s3://somes3bucket
计算。似乎 spark 正在读取整个数据集而不是分区修剪......然后根据where
子句过滤数据集
然而,如果我使用该parquet
格式来读取数据集,查询只需要大约 30 秒(相对于 Hudi 格式的 3 分钟)
这是 spark UI,仅扫描了 1361 个文件(在 Hudi 中相对于 ~9000 个文件)并且只需要 15 秒
Hudi
知道为什么在使用格式时分区修剪不起作用吗?想知道我在创建数据集的过程中是否遗漏了任何配置?
PS:我运行了这个emr-6.3.0
有 Hudi 版本的查询0.7.0
apache-hudi - 如何通过使用 Hudi DeltaStreamer 向数组添加值来更新字段?
我正在运行一个 Hudi DeltaStreamer 管道来使用来自 Kafka 的数据并写入 S3 存储桶。source
如果发现记录重复,我想通过向列表添加值来更新字段。(“ uuid ”是recordkey
)
现有记录:
进货记录:
更新记录:
如何使用 DeltaStreamer 实现上述目标?
hive - 使用presto查询hive表,有的表查询失败有的成功
环境信息
- 快速版本:0.248
- 蜂巢版本:2.3.8
- Hadoop:2.10.1
- hudi 版本:0.9
问题描述
我在hive中创建了一些外部表,通过hive客户端查询这些表,所有表看起来都正常。但是当我使用select * from tablex limit 10
presto客户端中这样的语句查询这些表时,有的表可以查询成功,有的表查询失败。我对比了查询成功和失败的表,发现除了表结构和数据外,它们似乎没有什么不同。这个问题困扰了我好几天。非常感谢您的回答。
- hive连接器的配置如下
- 创建外部表的示例语句如下:
- 堆栈跟踪
注:一些敏感信息如ip、路径等,我替换为xx等内容
pyspark - Hudi 分区和 upsert 不起作用
这个配置有什么问题,
分区键在 HUDI 中不起作用,并且所有记录在执行 upsert 时都会在 hudi 数据集中更新。所以无法从表中提取增量。
我的用例是使用 hudi 完成 upsert 逻辑并使用 hudi 进行分区。Upsert 正在部分工作,因为它更新了整个记录集,就像我在原始存储桶中有 10k 条记录一样,在为 1k 条记录执行 upsert 时,它更新了所有 10k 数据的 hudi 时间。
amazon-web-services - 直接或通过 AWS Glue 数据目录将 Redshift Spectrum/AWS EMR 与 Hudi 连接
我正在尝试了解如何将 Redshift Spectrum 与 Hudi 数据正确连接。
看起来我可以直接为 Apache Hudi 中管理的数据创建 Redshift 外部表,就像以下文档中描述的那样https://docs.aws.amazon.com/redshift/latest/dg/c-spectrum-external-tables.html另一种方法是将 Hudi 与 AWS Glue 数据目录集成,就像这里提到的那样https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hudi-how-it-works.html然后访问 Hudi通过 AWS Glue 数据目录使用 Redshift Spectrum 的表。
我对适用于 Apache Spark 的 AWS EMR 的需求相同。看起来我可以直接从 EMR 或通过 AWS Glue 数据目录使用 Hudi。
现在,我不明白如何选择。您能否告知通过 AWS Glue 数据目录使用 Hudi 有什么好处,还是我需要直接从 Redshift Spectrum 和 AWS EMR 使用它?