我正在尝试从 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
,唯一的要求是运行Airflow
的 boxworker
还必须包含Hive
安装二进制文件这是因为 hive-cli command prepared by
HiveCliHook
将通过古老的bash
在 worker machine 中运行。 At this stage ,如果Hive CLI
没有安装在运行此代码的机器(即您的 Airflow worker)中,它将像您的情况一样中断
直接的解决方法是实现您自己的 RemoteHiveCliOperator
事实上,这似乎是几乎所有 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/