从 spark 代码中使 metadata/refresh imapala 无效
Invalidate metadata/refresh imapala from spark code
我正在开发一个 NRT 解决方案,它要求我经常更新 Impala table 上的元数据。
目前这个失效是在我的 spark 代码有 运行 之后完成的。
我想通过直接从我的 Spark 代码执行此操作 refresh/invalidate 来加快速度。
最有效的方法是什么?
- Oozie 太慢了(30 秒开销?不,谢谢)
- 对(边缘)节点的 SSH 操作似乎是一个有效的解决方案,但感觉 "hackish"
- 我也没有看到从 Spark 中的配置单元上下文执行此操作的方法。
REFRESH
和 INVALIDATE METADATA
命令特定于 Impala。
你必须连接到一个 Impala 守护进程才能 运行 这些 - 这会触发 Impala 特定元数据缓存的刷新 (在你的情况下你可能只需要 REFRESH
每个分区中的文件列表,而不是批发 INVALIDATE
从头开始重建所有分区及其所有文件的列表)
您可以使用 Spark SqlContext
通过 JDBC 和 读取 数据连接到 Impala -- 但不是 运行任意命令。该死。所以你回到了基础:
- 下载最新的Cloudera JDBC driver for Impala
- 将其安装在您运行您的 Spark 作业所在的服务器上
- 列出您的
*.*.extraClassPath
属性中的所有 JAR
- 开发一些 Scala 代码以针对 Impala 守护程序和 运行 任意命令(例如
REFRESH somedb.sometable
)打开 JDBC 会话 -- 困难的方法
希望Google能找到一些JDBC/Scala代码的例子,比如this one
不需要以上所有步骤,您可以编写以下代码并执行无效元数据查询 impala table.
impala_node_ip_address = "XX.XX.XX.XX"
impala Query = "impala-shell -i "+"\"" + str(impala_node_ip_address) + "\"" + " -k -q " + "\""+"invalidate metadata DBNAME"+"." + "TableName" + "\""
这似乎已被 Impala 3.3.0 修复(参见 "Metadata Performance Improvements" here 部分):
Automatic invalidation of metadata
With automatic metadata management enabled, you no longer have to issue INVALIDATE / REFRESH in a number of conditions.
In Impala 3.3, the following additional event in Hive Metastore can trigger automatic INVALIDATE / REFRESH of Metadata:
- INSERT into tables and partitions from Impala or from Spark on the same or multiple cluster configuration
我正在开发一个 NRT 解决方案,它要求我经常更新 Impala table 上的元数据。
目前这个失效是在我的 spark 代码有 运行 之后完成的。 我想通过直接从我的 Spark 代码执行此操作 refresh/invalidate 来加快速度。
最有效的方法是什么?
- Oozie 太慢了(30 秒开销?不,谢谢)
- 对(边缘)节点的 SSH 操作似乎是一个有效的解决方案,但感觉 "hackish"
- 我也没有看到从 Spark 中的配置单元上下文执行此操作的方法。
REFRESH
和 INVALIDATE METADATA
命令特定于 Impala。
你必须连接到一个 Impala 守护进程才能 运行 这些 - 这会触发 Impala 特定元数据缓存的刷新 (在你的情况下你可能只需要 REFRESH
每个分区中的文件列表,而不是批发 INVALIDATE
从头开始重建所有分区及其所有文件的列表)
您可以使用 Spark SqlContext
通过 JDBC 和 读取 数据连接到 Impala -- 但不是 运行任意命令。该死。所以你回到了基础:
- 下载最新的Cloudera JDBC driver for Impala
- 将其安装在您运行您的 Spark 作业所在的服务器上
- 列出您的
*.*.extraClassPath
属性中的所有 JAR - 开发一些 Scala 代码以针对 Impala 守护程序和 运行 任意命令(例如
REFRESH somedb.sometable
)打开 JDBC 会话 -- 困难的方法
希望Google能找到一些JDBC/Scala代码的例子,比如this one
不需要以上所有步骤,您可以编写以下代码并执行无效元数据查询 impala table.
impala_node_ip_address = "XX.XX.XX.XX"
impala Query = "impala-shell -i "+"\"" + str(impala_node_ip_address) + "\"" + " -k -q " + "\""+"invalidate metadata DBNAME"+"." + "TableName" + "\""
这似乎已被 Impala 3.3.0 修复(参见 "Metadata Performance Improvements" here 部分):
Automatic invalidation of metadata
With automatic metadata management enabled, you no longer have to issue INVALIDATE / REFRESH in a number of conditions.
In Impala 3.3, the following additional event in Hive Metastore can trigger automatic INVALIDATE / REFRESH of Metadata:
- INSERT into tables and partitions from Impala or from Spark on the same or multiple cluster configuration