hive - Airflow HiveCliHook 连接到远程配置单元集群?

标签 hive airflow

我正在尝试从 Airflow 的本地副本连接到我的 Hive 服务器,但 HiveCliHook 似乎正在尝试连接到我的 Hive 本地副本。

我正跑到下面来测试它:

import airflow
from airflow.models import Connection
from airflow.hooks.hive_hooks import  HiveCliHook

usr = 'myusername'
pss = 'mypass'

session = airflow.settings.Session()
hive_cli = session.query(Connection).filter(Connection.conn_id == 'hive_cli_default').all()[0]

hive_cli.host = 'hive_server.test.mydomain.com'
hive_cli.port = '9083'
hive_cli.login = usr
hive_cli.password = pss
hive_cli.schema = 'default'

session.commit()

hive = HiveCliHook()

hive.run_cli("select 1")

这是抛出这个错误:

[2018-11-28 13:23:22,667] {base_hook.py:83} INFO - Using connection to: hive_server.test.mydomain.com
[2018-11-28 13:24:50,891] {hive_hooks.py:220} INFO - hive -f /tmp/airflow_hiveop_2Fdl2I/tmpBFoGp7  
[2018-11-28 13:24:55,548] {hive_hooks.py:235} INFO - Logging initialized using configuration in jar:file:/usr/local/apache-hive-2.3.4-bin/lib/hive-common-2.3.4.jar!/hive-log4j2.properties Async: true  
[2018-11-28 13:25:01,776] {hive_hooks.py:235} INFO - FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

有人知道我哪里出错了吗?

最佳答案

  • 虽然您可以使用 HiveCliOperator(未更改)在远程中连接和执行 HQL 语句> Hive-Server,唯一的要求是运行 Airflowbox worker 还必须包含 Hive 安装二进制文件

  • 这是因为 hive-cli command prepared by HiveCliHook将通过古老的 bashworker machine 中运行。 At this stage ,如果 Hive CLI 没有安装在运行此代码的机器(即您的 Airflow worker)中,它将像您的情况一样中断


直接的解决方法是实现您自己的 RemoteHiveCliOperator

  • 创建一个 SSHHook到远程 Hive 服务器机器
  • 并通过 SSHHook 执行您的 HQL 语句,如 this

事实上,这似乎是几乎所有 Airflow Operator 的普遍缺点,默认情况下,他们希望在每个 worker 中安装必要的包。 docs警告一下

For example, if you use the HiveOperator, the hive CLI needs to be installed on that box

关于hive - Airflow HiveCliHook 连接到远程配置单元集群?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53528673/

相关文章:

hive - BigQuery 中是否有像 'hive metastore' 这样的元数据存储?

hadoop - Hive-将数据复制到表时出错

python - Airflow 运算符(operator)是否需要返回任何内容才能正常运行?

python - 并行处理 Airflow 上的百万个文件列表

email - 我应该用什么方法发送带有 Airflow 的电子邮件?

hive - 如何使 Hive 查询利用 Metastore 中存储的统计信息

hadoop - Sqoop 将所有表导入特定数据库中的 hive 失败

kubernetes - 是否可以将不同的卷安装到同一部署的Pod

python - 无法通过 Airflow DAG 连接到 Docker Postgres 服务器

hadoop - Hadoop/Hive升级性能