oozie を使用してワークフローを実行しています。これには、任意の (非 map reduce) コードを実行する Java アクションがあります。この Java コードは、ローカル ファイル システムにファイルとフォルダを作成するためのものです。Java アクションが Hadoop のクラスターの単一ノード (私の場合は 7 ノード) で実行されるようにしたいと考えています。この Java アクションは常に同じマシンで実行し、できれば Hadoop マスター ノードでのみ実行することが望ましいと考えています。出来ますか?回避策がある場合でも、共有してください。
2 に答える
Java Action は map reduce ジョブと同じように実行されるため、クラスター内のどのノード上にあるかを制御することはできません。
ウージーがこれを尊重するかどうかはわかりません。ただし、許容可能なマッパーの失敗の数を高い値 (たとえば 10) に設定してみて、実行クラスター ノードが目的のノードでない場合は、Java アクションで例外をスローすることができます (InetAddress を使用してローカル マシン名を取得します)。 /IP)。
その後、うまくいけば (ただし、必ずしも保証されるわけではありません)、望ましくないノードではアクションが失敗し続け、最終的には選択したノードで成功します。
ややハックですが、うまくいく可能性があります (これも、ジョブ全体が失敗する前にマップ タスクの失敗回数を修正できるかどうかによって異なりmapred.map.max.attempts
ます。デフォルトでは 4 です)。
すべての Oozie ジョブ (単純な Java アクション、Pig アクション、Hive アクションなど) は、map-reduce ジョブとして実行されます。これは、Oozie フレームワークのコア プロパティです。
Oozie ワークフローは、コントロールの依存関係 DAG (直接非巡回グラフ) に配置されたアクションです。
したがって、クラスター内の目的のノードにファイルを保存できないことを願っています。