首页 > 解决方案 > 查询Spark同时加载的hive表时如何避免错误

问题描述

我们有一个用例,我们在一些流数据之上运行用 Spark 编写的 ETL,ETL 每小时将结果写入目标配置单元表,但用户通常对目标表运行查询,我们遇到过查询的情况由于火花同时加载表而导致的错误。我们有哪些替代方法可以避免或尽量减少这种错误?火花作业(或蜂巢表)的任何属性?或类似创建一个临时表?

错误是:

java.io.FileNotFoundException:文件不存在 [HDFS 路径]

我认为这是因为元数据说有一个文件 A 在作业执行期间被删除。

该表按年、月、日(使用 HDFS 作为存储)进行分区,每次 ETL 运行时它都会更新(通过分区覆盖)仅当前日期分区。目前集群中没有启用“事务”表(即使我在测试集群上测试了用例但没有运气)

标签: apache-sparkhive

解决方案


简单的选择是使用一种表格式,该格式旨在处理并发读写,如 hudi 或 delta Lake。更复杂的版本涉及使用写入者写入的分区追加表。完成后,作者更新视图以指向新数据。另一种可能的选择是在插入时对表进行分区。


推荐阅读