ここでの私の現在の問題は、Apache Oozie との統合を提供する一連の Knime ノードを開発しようとすることです。つまり、Knime 内から Oozie ワークフローを構築、起動、監視しようとしています。
これを線形の Oozie ワークフローに実装することである程度成功しましたが、分岐を含める必要がある場合はかなり困惑しました。
背景として、線形ワークフローでこれを行った方法を説明しましょう。
基本的に、私のソリューションは、各 Oozie アクションを Knime ノードとして表現します。これらのノードにはそれぞれ 2 つの動作モードがあり、特定のフロー変数の内容に基づいて適切なモードが呼び出されます。これらの 2 つのモードが必要なのは、Oozie 部分 (OozieStartAction から OozieStopAction へ) を 2 回実行する必要があるためです。最初の繰り返しでは Oozie ワークフローを生成し、2 回目ではそれを起動して監視します。また、フロー変数は、このループの反復間で保持されます。
操作の 1 つのモードでは、ノードは、それが表す Oozie アクションに固有の xml コンテンツを全体的な Oozie ワークフロー xml に追加し、それを転送します。
もう 1 つのノードでは、ノードが表すアクションのステータスを Oozie にポーリングするだけです。
このワークフローでは、次のフロー変数が使用されます。
-OOZIE_XML: Oozie ワークフロー xml が含まれています
-OOZIE_JOB_ID: 組み立てられたワークフローで起動された実行中の Oozie ジョブの ID
-PREV_ACTION_NAME: 前のアクションの名前
上記の例では、段階的に何が起こるかは次のとおりです。
-OozieStartNode が実行され、OOZIE_XML 変数が空白またはまったくないことがわかるため、それ自体を作成し、基本的なワークフロー アプリを設定して xml ノードを開始します。また、値が「start」の PREV_ACTION_NAME フロー変数も作成します。
- 最初の OozieGenericAction は、空白の OOZIE_JOB_ID を持っていることを確認するため、受信した OOZIE_XML のワークフロー アプリ ノードに新しいアクションを追加し、PREV_ACTION_NAME に等しい「名前」属性を持つノードを取得し、作成したばかりのアクションに遷移を設定します。 . PREV_ACTION_NAME は、現在のアクションの名前で上書きされます。
...
-StopOozieAction は単純に終了ノードを作成し、前のアクションの遷移をそこに設定します。これは、前の一般的なアクションとよく似ています。
- 2 回目の反復で、OozieStart は XML データがあることを確認するため、2 番目の実行モードが呼び出されます。これにより、ワークフロー XML が hdfs にアップロードされ、このワークフローで新しい Oozie ジョブが作成され、受信した JobId が OOZIE_JOB_ID として転送されます。
- 有効な OOZIE_JOB_ID を持つ次の Oozie アクションは、単純に Oozie にアクション名のステータスをポーリングし、それぞれのアクションの実行が終了すると実行を終了します。
私が直面している主な問題は、ワークフロー xml アセンブリにあります。たとえば、分岐の使用中に前のノード名変数を使用できないためです。多くのノードがリンクしている結合アクションがあると、1 つの前のノードが他のノードを上書きし、ノードの関係データが失われます。
誰かが私がこれを取ることができる広い考えを持っていますか?