首页 > 解决方案 > 查询 Hive 和转换数据时总是得到 java.io.FileNotFoundException 并需要“REFRESH TABLE tableName”

问题描述

我运行一个预定的过程,它使用 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错误消息。我的问题:有没有办法可以防止这种情况?

标签: apache-spark

解决方案


您可以尝试以下选项:

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

希望这会有所帮助。


推荐阅读