通过命令行为 hive_cli 添加到 Airflow 的连接失败
Adding a connection to Airflow via command line for hive_cli fails
我正在 运行ning Apache Airflow 1.8 并尝试通过命令行界面为配置单元客户端包装器添加连接。但是尝试 运行 命令
airflow connections -a --conn_id HIVE_CONN2 --conn_uri hive_cli://hiveserver/default
命令行报告成功,但 Airflow 中的连接类型设置不正确 UI,连接无法正常工作。
我认为错误与 uri 前缀(方案)中的 _ 有关。我已经确认用于拆分 uri 的 urlparse 函数不允许在 models.py.
中使用下划线
除了在 UI 中手动设置外,还有其他方法可以将连接添加到 Airflow - 这是缺陷吗? Airflow 不应为连接类型使用下划线以避免此问题。
你是对的。
conn_type
用于确定将哪个挂钩用作外部数据源/接收器的接口。
conn_type
要么从上面正确指定的 URI 中提取,要么从 UI 中创建的连接中提取(并存储在 Meta 中的连接 table 中D B)。
在您的例子中,conn_type
是使用 models.py 中的 parse_from_uri
方法从提供的 URL 中提取的,该方法从scheme
return 由 url 解析方法编辑。
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 的第一部分提取。
正如您所发现的,当 ://
之前的 url 中有下划线时,urlparse 方法不会 return scheme
.
例如验证这一点,尝试使用和不使用下划线对该 URI 进行变体:
from urllib.parse import urlparse
[print(v) for v in urlparse("hive_cli://hiveserver/default")]
如果您使用直线,它的工作方式会略有不同,因为它会创建一个 JDBC 连接,但如果您不使用直线(我可以看到您不是,因为它会成为 JDBC 的一部分=19=] 在命令中)然后它 运行 是一个子进程。
按照代码,最终 hive_cli 类型是 运行 作为 subprocess.Popen
,即直接在气流机器(或工人)上,而不是通过 JDBC 或一些其他的联系。
https://github.com/apache/incubator-airflow/blob/master/airflow/hooks/hive_hooks.py#L208
因此它并不真正需要 URL 类型的连接字符串,它只是使用该格式将鞋拔插入 airflow connections --con-uri
选项。由于它没有作为 URL 拼凑起来,因此将其称为 hive_cli
的选择似乎是任意的,并且在气流 cli 中不起作用。当您使用 UI 时,这一切都有效,因为它通过从 UI 形式指定 conn_type 来构建连接。
这是一个错误,类型名称应从 hive_cli
更改为 hivecli
,或者其他具有描述性且与 urlparse
兼容的名称。
这已在 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:
我正在 运行ning Apache Airflow 1.8 并尝试通过命令行界面为配置单元客户端包装器添加连接。但是尝试 运行 命令
airflow connections -a --conn_id HIVE_CONN2 --conn_uri hive_cli://hiveserver/default
命令行报告成功,但 Airflow 中的连接类型设置不正确 UI,连接无法正常工作。
我认为错误与 uri 前缀(方案)中的 _ 有关。我已经确认用于拆分 uri 的 urlparse 函数不允许在 models.py.
中使用下划线除了在 UI 中手动设置外,还有其他方法可以将连接添加到 Airflow - 这是缺陷吗? Airflow 不应为连接类型使用下划线以避免此问题。
你是对的。
conn_type
用于确定将哪个挂钩用作外部数据源/接收器的接口。
conn_type
要么从上面正确指定的 URI 中提取,要么从 UI 中创建的连接中提取(并存储在 Meta 中的连接 table 中D B)。
在您的例子中,conn_type
是使用 models.py 中的 parse_from_uri
方法从提供的 URL 中提取的,该方法从scheme
return 由 url 解析方法编辑。
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 的第一部分提取。
正如您所发现的,当 ://
之前的 url 中有下划线时,urlparse 方法不会 return scheme
.
例如验证这一点,尝试使用和不使用下划线对该 URI 进行变体:
from urllib.parse import urlparse
[print(v) for v in urlparse("hive_cli://hiveserver/default")]
如果您使用直线,它的工作方式会略有不同,因为它会创建一个 JDBC 连接,但如果您不使用直线(我可以看到您不是,因为它会成为 JDBC 的一部分=19=] 在命令中)然后它 运行 是一个子进程。
按照代码,最终 hive_cli 类型是 运行 作为 subprocess.Popen
,即直接在气流机器(或工人)上,而不是通过 JDBC 或一些其他的联系。
https://github.com/apache/incubator-airflow/blob/master/airflow/hooks/hive_hooks.py#L208
因此它并不真正需要 URL 类型的连接字符串,它只是使用该格式将鞋拔插入 airflow connections --con-uri
选项。由于它没有作为 URL 拼凑起来,因此将其称为 hive_cli
的选择似乎是任意的,并且在气流 cli 中不起作用。当您使用 UI 时,这一切都有效,因为它通过从 UI 形式指定 conn_type 来构建连接。
这是一个错误,类型名称应从 hive_cli
更改为 hivecli
,或者其他具有描述性且与 urlparse
兼容的名称。
这已在 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: