通过命令行为hive\u cli添加到airflow的连接失败

u5i3ibmn  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(655)

我正在运行ApacheAirflow1.8,并尝试通过命令行界面为配置单元客户机 Package 器添加连接。但是在尝试运行命令时

airflow connections -a --conn_id HIVE_CONN2 --conn_uri hive_cli://hiveserver/default

命令行报告成功,但未在气流ui中正确设置连接类型,连接无法工作。
我认为这个错误与uri前缀(scheme)中的u有关。我已经确认urlparse函数在models.py中不允许使用下划线来分割uri。
除了在ui中手动设置之外,还有其他方法可以添加到气流的连接吗?这是一个缺陷吗?为避免此问题,连接类型不应使用下划线。

pes8fvy9

pes8fvy91#

在airflow 1.9.0中,通过在 connections 子命令:

airflow connections -a --conn_id hive_cli_test --conn_type hive_cli --conn_host something/something
[2018-08-09 10:28:41,377] {__init__.py:51} INFO - Using executor SequentialExecutor

        Successfully added `conn_id`=hive_cli_test : hive_cli://:@something/something:
6kkfgxo0

6kkfgxo02#

你说得对。
这个 conn_type 用于确定要用作外部数据源/接收器接口的钩子。 conn_type 或者从上面正确指定的uri中提取,或者从ui中创建的连接(并存储在metadb的connection表中)提取。
就你而言 conn_type 从提供的url中使用 parse_from_uri 方法,该方法从 scheme 由urlparse方法返回。https://github.com/apache/incubator-airflow/blob/master/airflow/models.py
根据https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urlparse 这个 scheme 从uri的第一部分提取。
正如您所发现的,urlparse方法不返回 scheme 当url中的 :// .
e、 g.验证这一点,尝试在这个uri上添加下划线和不添加下划线的变体:

from urllib.parse import urlparse
[print(v) for v in urlparse("hive_cli://hiveserver/default")]

如果您使用beeline,它的工作原理会稍有不同,因为它将创建一个jdbc连接,但是如果您不使用beeline(我可以看到您不使用beeline,因为它将是 --conn_extra 然后它运行一个子进程。
在代码之后,hive\u cli类型最终将作为 subprocess.Popen ,即直接在气流机(或工人)上,而不是通过jdbc或其他连接。
https://github.com/apache/incubator-airflow/blob/master/airflow/hooks/hive_hooks.py#l208
因此,它实际上不需要url类型的连接字符串,它只是使用这种格式将horn插入到 airflow connections --con-uri 选项。既然它没有被拼凑成一个url,那么选择调用它 hive_cli 显示为任意,并且无法从气流cli工作。当您使用ui时,这一切都会起作用,因为它通过从ui窗体中指定conn\ U类型来构造连接。
这是个bug,类型名应该从 hive_clihivecli ,或其他与 urlparse .

相关问题