我正在尝试从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
有人知道我哪里出错了吗?
1条答案
按热度按时间xdyibdwo1#
当你可以使用
HiveCliOperator
(不变的)用于连接和执行的HQL
远程中的语句Hive-Server
,唯一的要求是运行Airflow
worker
还必须包含Hive
已安装二进制文件这是因为hive cli命令
HiveCliHook
将运行在工人的机器通过良好的旧bash
. 在这个阶段,如果Hive CLI
未安装在运行此代码的机器(即,您的气流工作者)中,它将像您的情况一样中断直接解决方法是实现自己的
RemoteHiveCliOperator
那个创建
SSHHook
到远程配置单元服务器计算机像这样通过sshhook执行hql语句
事实上,这似乎是一个普遍的缺点,几乎所有的气流
Operator
默认情况下,他们希望在每个worker中安装必需的包。医生警告说例如,如果使用hiveoperator,则需要在该框上安装HiveCLI