【发布时间】:2020-09-17 20:25:39
【问题描述】:
我们有一个用例,我们在一些流数据之上运行用 Spark 编写的 ETL,ETL 每小时将结果写入目标 hive 表,但用户通常对目标表运行查询,我们遇到过案例由于火花同时加载表而出现查询错误。我们有哪些替代方法可以避免或尽量减少这种错误?火花作业(或蜂巢表)的任何属性?还是创建一个临时表之类的?
错误是:
java.io.FileNotFoundException: 文件不存在 [HDFS PATH]
我认为这是因为元数据显示有一个文件 A 在作业执行期间被删除。
该表按年、月、日分区(使用 HDFS 作为存储),每次 ETL 运行时都会更新(通过分区覆盖)当前日期分区。目前集群中没有启用“事务”表(即使我在没有运气的情况下在测试集群上测试了用例)
【问题讨论】:
-
您的数据究竟存储在哪里? S3? HDFS?还有什么是完整的堆栈跟踪?您是直接操作文件还是使用 Table 抽象?
-
数据存储在HDFS中,使用表抽象(将spark数据帧写入hive),更详细的错误:异常:错误:状态:失败错误:顶点失败,顶点名称=地图1,顶点ID=顶点_1585784648138_16268_15_00,诊断= [任务失败,taskId = task_1585784648138_16268_15_00_000022,诊断= [TaskAttempt 0失败,信息= [错误:运行任务时失败:java.lang.RuntimeException:java.lang.RuntimeException:java.io.IOException:java.io.FileNotFoundException :文件不存在:
标签: apache-spark hive