将数据加载到表中后使所有用户的表无效

时间:2019-03-31 03:50:18

标签: apache-spark azure-databricks

我们正在以高并发模式运行Spark集群。 ETL每天都会发生(使用插入覆盖表),并且在表刷新完成后,用户会遇到错误

java.util.concurrent.ExecutionException: org.apache.spark.SparkException:由于阶段失败而导致作业中止:阶段1979.0中的任务3失败4次,最近一次失败:java.io.FileNotFoundException: dbfs:/mnt//part-00005-tid-4461101917811947515-c134ab13-e390-452f-a490-565fe8cc14cf-38198.c000.snappy.parquet。基础文件可能已更新。您可以通过在SQL中运行“ REFRESH TABLE tableName”命令或通过重新创建所涉及的Dataset / DataFrame来显式使Spark中的缓存无效。

用户必须显式运行“刷新表”以解决此问题。

我尝试了不同的方法

1)重新启动集群-如果您正在运行多个作业,这不是理想的选择

2)在表刷新完成后立即运行“刷新表”:   尽管这可以解决同一会话中的问题,但是如果您有多个会话/笔记本打开访问同一表,则此方法将无效。

另一种选择是使用Delta表,但是要求不允许我们这样做。

我们如何使所有访问表的用户的缓存无效,以使他们不必运行refresh table命令?

0 个答案:

没有答案