查询Hive和转换数据时,始终获取java.io.FileNotFoundException并要求'REFRESH TABLE tableName'

时间:2019-01-28 20:47:28

标签: apache-spark

我运行了一个计划的过程,该过程使用sparkSQL在Hive中查询表并进行一些转换,然后对数据集中的行进行计数:

val dataset       = this.query_hive(sql_statement)
val result_interm = this.transformation_step1(dataset)
val result        = this.transformation_step2(result_interm)
println(result.count())

我遇到的问题是Hive中的表,该表的更新频率很高,并且每当Spark作业运行时对其进行更新时,我都会从Spark收到Spark java.io.FileNotFoundException, invalidate the cache in Spark by running REFRESH TABLE table错误消息。我的问题:有什么办法可以防止这种情况发生?

1 个答案:

答案 0 :(得分:2)

您可以尝试以下选项:

  1. 在使用某些转换之前立即运行REFRESH TABLE
  2. 编写一些try-finally代码部分,您将在其中模拟某种重试逻辑。
  3. 实际上,我无法测试第三个选项,但是您可以尝试创建经常更新为MANAGED表的表,然后创建另一个EXTERNAL表,该表将指向{ {1}}表,通过这种方式,它可以读取旧值并且不会压在MANAGED

希望这会有所帮助。