问题描述
可能是一个菜鸟问题,所以请提前原谅我。
我们在 Hadoop 3.1.1 上使用 Spark 2.3.2 (Scala) 和 Oozie,每 15 分钟运行一次工作流。
我们大多将外部表存储为 ORC。
其中一项作业将外部表加载到数据帧,然后在不同场合使用它进行不同分析,因此我们在加载它后.persist
。
在之前的 Spark 和 Hadoop 版本中,当我们不使用外部表时,Hive 会管理锁,并且当上述表更新(通过单独的进程)时,流程会中断/失败。这种情况每天发生一两次,所以当时没什么大不了的。 现在发生这种情况,如果表被更新,如果我们在重写它时达到最佳读取点,它可能会导致它为空。我们对数据框实施了计数检查,因此如果其记录为
然而,即使在持久化加载的非空数据帧之后,空表有时也会潜入并把事情搞砸。
我对 .persist
的行为进行了一些测试,并注意到如果源表发生变化,那么数据帧(即使使用 .count
缓存和触发)也会重新计算。这与我阅读过的所有 Stackoverflow 帖子和其他文章一致。
我研究了 checkpoint
数据帧,但我发现只有复杂的方法可以将其读回 1,我不确定这是否是一个好的解决方案。
非常感谢! 干杯
1 https://stackoverflow.com/questions/62206092/how-to-read-a-checkpoint-dataframe-in-spark-scala
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)