2017-05-16 5 views
1

Apache Airflow 1.8を実行しており、ハイブクライアントラッパーのコマンドラインインターフェイス経由で接続を追加しようとしています。しかし、コマンドを実行しようとしhive_cliのコマンドラインからのエアフローへの接続の追加に失敗する

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

コマンドラインは、成功を報告しますが、コネティカットタイプは、エアフローUIと接続文句を言わない仕事で正しく設定されていません。

私はこのエラーがuri接頭辞(scheme)の_に関連していると思います。私はuri doesntがmodels.pyの下線を許すように分割するurlparse関数を確認しました。

UIで手動で設定する以外に、Airflowに接続を追加する別の方法があります - これが問題ですか?この問題を回避するには、エアフローで接続タイプにアンダースコアを使用しないでください。

+0

connタイプを設定する必要がある理由はありますか。 私が知る限り、タイプを設定することは、UIの特定のフィールドを表示/非表示することだけです。 実際には、コードに影響を与えずにhive_idであるかのように接続にアクセスできます。 –

+0

こんにちはダニエル - 私はちょっと混乱しています。接続タイプは、気流センサーの1つ(この場合、HivePartitionSensorを使用したハイブ接続)で行う/接続するタイプを決定するために使用されます。 Airflowリセットスクリプトは、すべての接続と構成を作成し、conn_uriにアンダースコアを含むものを必要とします。コードまたはDAGSは、特定のハイブパーティションが存在するかどうかを確認するために、HivePartitionSensorの一部としてconn_idを使用します。これらのチェックは、接続タイプが正しく設定されていないと実行できません。 – user193616

+0

@DanielLee conn_typeは、使用するフックを決定するコードによって使用されます。 'get_hook'を参照してください。https://github.com/apache/incubator-airflow/blob/master/airflow/models.py#L660 – Davos

答えて

1

あなたはそうです。

conn_typeは、外部データソース/シンクへのインターフェイスとしてどのフックを使用するかを決定するために使用されます。

conn_typeは、上記で正しく指定したとおり、またはUIで作成された(およびMeta DBの接続テーブルに保存された)接続から抽出されます。

は、models.pyのparse_from_uriメソッドを使用して、指定されたURLから抽出されます。このメソッドは、conn_typeをurlparseメソッドから返されたschemeから設定します。 https://github.com/apache/incubator-airflow/blob/master/airflow/models.py#L587

https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urlparseによれば、schemeは、URIの最初の部分から抽出されます。

urlparseメソッドは、://の前にURLにアンダースコアがある場合、schemeを返しません。

これを確認、アンダースコアとせずに、このURIのバリエーションを試してみてください。

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

あなたが真っすぐを使用している場合、それはJDBC接続を作成するようそれは、少し異なる動作をしていますが、ビーラインを使用していない場合は(私が見ることができますコマンド内の--conn_extraの一部であるためではありません)、サブプロセスが実行されます。

コードに続いて、最終的にhive_cliタイプはsubprocess.Popenとして実行されます。つまり、エアフローマシン(またはワーカ)上で直接実行されます。JDBCや他の接続ではありません。

https://github.com/apache/incubator-airflow/blob/master/airflow/hooks/hive_hooks.py#L208

したがって、それは本当にそれだけでairflow connections --con-uriオプションに靴ホーンにその形式を使用しています、URL型の接続文字列を必要としません。それはURLとしてまとめ直されないので、hive_cliと呼ばれる選択肢は任意であり、気流cliからは機能しません。これはすべて、UIフォームからconn_typeを指定して接続を構築するため、UIを使用するときに機能します。

これはバグです。タイプ名をhive_cliからhivecliに変更するか、または説明的でurlparseと互換性のあるものを変更する必要があります。

+0

私はJiraチケットを追加しました:https://issues.apache.org/jira/browse/ AIRFLOW-1530 – Davos

関連する問題