在AWS Glue中使用PySpark无法对Hudi表执行硬删除的求助
解决Glue 4.0 + Hudi 0.12.1硬删除无效果问题
针对你在Glue环境下执行Hudi硬删除无效果且无报错的情况,可从以下几个方向排查并修正:
一、DataFrame删除方式(方法1、2)的核心问题排查
1. 确认删除用DataFrame包含完整定位字段
Hudi执行删除时,必须通过Record Key和Partition Path精准定位目标记录:
- 你的表Record Key是
uid, cust_id,Partition Path是date,因此用于删除的DataFrame必须同时包含这三个字段,字段名需完全匹配(大小写敏感)。 - 如果DataFrame缺少其中任意一个字段,Hudi无法匹配到目标记录,会静默跳过删除操作。
2. 补全Hudi写入配置
在你的hudiOptions中添加元数据同步配置(针对Glue Catalog),确保删除操作后的元数据能及时同步,避免查询时出现数据不一致:
hudiOptions={ "hoodie.datasource.write.table.type": "COPY_ON_WRITE", "hoodie.datasource.write.recordkey.field": "uid, cust_id", "hoodie.datasource.write.precombine.field": "insert_timestamp", "hoodie.datasource.write.partitionpath.field": "date", "hoodie.table.name": "test_table", # 新增Glue Catalog同步配置 "hoodie.datasource.hive_sync.enable": "true", "hoodie.datasource.hive_sync.database": "你的数据库名", "hoodie.datasource.hive_sync.table": "test_table", "hoodie.datasource.hive_sync.partition_fields": "date", "hoodie.datasource.hive_sync.use_jdbc": "false", "hoodie.datasource.hive_sync.mode": "hms" }
3. 验证写入路径一致性
确保save(path)中的S3路径与原表的存储路径完全一致,否则相当于写入了一个新表,原表数据不会被修改。
二、Spark SQL删除方式(方法3)的核心问题排查
1. 修正Delete条件与表结构匹配
你的表Record Key是uid, cust_id,但SQL中使用的是uuid = 1,若uuid不是Record Key的一部分,将无法匹配到任何记录。需调整Delete语句为:
DELETE FROM hudi_cow_nonpcf_tbl WHERE uid = '目标uid值' AND cust_id = '目标cust_id值'
2. 确保Spark配置正确加载
Glue Job的Spark配置需在Job参数中设置,而非代码内,否则配置不生效:
在Glue Job的「Job parameters」中添加以下参数:
--conf spark.serializer=org.apache.spark.serializer.KryoSerializer --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension --conf spark.sql.hive.convertMetastoreParquet=false
3. 确认表元数据正确性
确保hudi_cow_nonpcf_tbl是通过Hudi创建并同步到Glue Catalog的表,而非普通Parquet表。可通过Glue控制台查看表的「Table type」是否为Hudi。
三、通用排查步骤
- 查看Glue Job日志:搜索
HoodieWriteClient、delete等关键词,检查是否有「Deleted X records」的日志,或是否存在「No records matched for deletion」类的警告。 - 验证权限:确保Glue Job执行角色拥有目标S3路径的读写权限,以及Glue Catalog的修改权限。
- 检查Hudi依赖兼容性:Glue 4.0默认集成Hudi 0.12.1,若你手动添加了Hudi依赖,需避免版本冲突,建议使用Glue自带的Hudi版本。
内容的提问来源于stack exchange,提问作者Yashaswi Dondapati
相关产品推荐
相关产品推荐

