从spark代码中使元数据/刷新imapala无效

Hav*_*nar 4 hadoop impala apache-spark

我正在开发一个NRT解决方案,要求我经常更新Impala表上的元数据.

目前,此失效是在我的spark代码运行后完成的.我希望通过直接从我的Spark代码执行此刷新/无效来加快速度.

什么是最有效的方法?

  • Oozie太慢了(开销30秒?不,谢谢)
  • 对(边缘)节点的SSH操作似乎是一个有效的解决方案,但感觉"hackish"
  • 我也没有看到从Spark的hive上下文中做到这一点的方法.

Sam*_*ter 9

REFRESHINVALIDATE METADATA命令特定于Impala.
您必须连接到Impala守护程序才能运行这些 - 这会触发刷新Impala特定的元数据缓存(在您的情况下,您可能只需要REFRESH每个分区中的文件列表,而不是批量INVALIDATE重建从头开始的所有分区及其所有文件的列表)

您可以使用Spark SqlContext通过JDBC连接到Impala并读取数据 - 但不能运行任意命令.该死的.所以你回到了基础:

  • 下载Impala的最新Cloudera JDBC驱动程序
  • 将它安装在运行Spark作业的服务器上
  • 列出*.*.extraClassPath属性中的所有JAR
  • 开发一些Scala代码来打开针对Impala守护进程的JDBC会话并运行任意命令(例如REFRESH somedb.sometable) - 这很难

希望谷歌会发现如JDBC/Scala代码一些例子这一个