我正在运行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中手动设置之外,还有其他方法可以添加到气流的连接吗?这是一个缺陷吗?为避免此问题,连接类型不应使用下划线。
2条答案
按热度按时间pes8fvy91#
在airflow 1.9.0中,通过在
connections
子命令: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上添加下划线和不添加下划线的变体:
如果您使用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_cli
至hivecli
,或其他与urlparse
.