apache-spark - 查询Spark同时加载的hive表时如何避免错误
问题描述
我们有一个用例,我们在一些流数据之上运行用 Spark 编写的 ETL,ETL 每小时将结果写入目标配置单元表,但用户通常对目标表运行查询,我们遇到过查询的情况由于火花同时加载表而导致的错误。我们有哪些替代方法可以避免或尽量减少这种错误?火花作业(或蜂巢表)的任何属性?或类似创建一个临时表?
错误是:
java.io.FileNotFoundException:文件不存在 [HDFS 路径]
我认为这是因为元数据说有一个文件 A 在作业执行期间被删除。
该表按年、月、日(使用 HDFS 作为存储)进行分区,每次 ETL 运行时它都会更新(通过分区覆盖)仅当前日期分区。目前集群中没有启用“事务”表(即使我在测试集群上测试了用例但没有运气)
解决方案
简单的选择是使用一种表格式,该格式旨在处理并发读写,如 hudi 或 delta Lake。更复杂的版本涉及使用写入者写入的分区追加表。完成后,作者更新视图以指向新数据。另一种可能的选择是在插入时对表进行分区。
推荐阅读
- html - Blazor - 在平铺仪表板应用程序中保留用户首选项
- azure - 如何使用 powershell “解析” Azure 资源 ID 对象
- sql - Spark SQL:过滤出现在另一个表(两列)中的记录的表?
- bluetooth-lowenergy - 匹配网络BLE天线
- php - Mysql 结果为 PHP 命名变量
- javascript - 日记应用程序本地存储的缺点/限制
- assets - 无法在 IMB Watson Studio 中打开资产
- excel - PowerQuery Excel 与 PowerBI
- prisma - 多对多关系棱镜2
- r - 如何在 R 中将“年”、“年”和“小时”列与 DateTime 结合起来?