MapReduceは、SchedulerXによって開発された軽量モデルであり、バッチデータ処理を分散方式で実行します。 MapJobProcessorまたはMapReduceJobProcessorインターフェースを呼び出して、接続されたワーカーを分散コンピューティングエンジンとして使用し、大量のデータをバッチで処理できます。 MapReduceには、大量のデータのバッチ処理に使用されるHadoopやSparkなどの従来の方法に比べて、低コスト、高速、シンプルなプログラミングなどの利点があります。 MapReduceは、ビッグデータプラットフォームにデータをインポートする必要がなく、追加のストレージとコンピューティングコストをかけずに、数秒でデータを処理します。
注意事項
タスクのサイズは 64 KB を超えることはできません。
ProcessResultのresultフィールドの戻り値のサイズは 1,000 バイトを超えることはできません。
reduceメソッドを使用する場合、すべてのタスクの結果はマスターノードにキャッシュされます。 この場合、マスターノードのメモリ負荷が高くなります。 タスク数を少なくし、resultフィールドの戻り値を小さくすることをお勧めします。 reduceメソッドが不要な場合は、MapJobProcessorインターフェースを直接呼び出すことができます。
フェイルオーバーがトリガーされると、SchedulerXはタスクを複数回実行する場合があります。 この場合、タスクの冪等性を実装する必要があります。
メソッド
MapJobProcessor 派生クラス
メソッド
説明
必須
public ProcessResult process(JobContext context) throws Exception;
タスクを実行するためのエントリです。 コンテキストからタスク名を取得するために使用するロジックを開発する必要があります。 このメソッドが呼び出されると、システムはProcessResultを返します。
はい
public ProcessResult map(List<? extends Object> taskList, String taskName);
mapメソッドは、複数のワーカーにタスクのバッチを分散するために使用されます。 mapメソッドは複数回呼び出すことができます。 taskListが空の場合、エラーが返されます。 このメソッドが呼び出されると、システムはProcessResultを返します。
はい
public void kill(JobContext context);
このメソッドは、フロントエンドでジョブが終了したときにトリガーされます。 ワークロードを中断するために使用するロジックを開発する必要があります。
いいえ
MapReduceJobProcessor 派生クラス
メソッド
説明
必須
public ProcessResult process(JobContext context) throws Exception;
タスクを実行するためのエントリです。 コンテキストからタスク名を取得するために使用するロジックを開発する必要があります。 このメソッドが呼び出されると、システムはProcessResultを返します。
はい
public ProcessResult map(List<? extends Object> taskList, String taskName);
mapメソッドは、複数のワーカーにタスクのバッチを分散するために使用されます。 mapメソッドは複数回呼び出すことができます。 taskListが空の場合、エラーが返されます。 このメソッドが呼び出されると、システムはProcessResultを返します。
はい
public ProcessResult reduce(JobContext context);
reduceメソッドは、すべてのワーカーノードのタスクが実行された後にコールバックされます。 reduceメソッドはマスターノードによって実行され、通常はデータの集計、ダウンストリームへの通知の送信、またはワークフローでのアップストリームアプリケーションとダウンストリームアプリケーション間のデータの受け渡しに使用されます。
reduceメソッドは、すべてのタスクの結果を処理します。
システムは、
return ProcessResult(true, result)
を使用して、注文 ID などのタスクの実行結果を返します。システムがreduceメソッドを呼び出すと、システムはコンテキストからすべてのタスクのステータス(
context.getTaskStatuses()
)と実行結果(context.getTaskResults()
)を取得し、実行結果を処理します。
はい
public void kill(JobContext context);
このメソッドは、フロントエンドでジョブが終了したときにトリガーされます。 ワークロードを中断するために使用するロジックを開発する必要があります。
いいえ
public boolean runReduceIfFail(JobContext context)
タスクが失敗した場合に reduce メソッドを呼び出すかどうかを指定します。 デフォルト設定:タスクが失敗した場合、reduceメソッドが実行されます。
いいえ
手順
SchedulerX コンソールにログインします。 左側のナビゲーションペインで、[タスク管理] をクリックします。
[タスク管理] ページで、[タスクの作成] をクリックします。
[タスクの作成] パネルで、[実行モード] ドロップダウンリストから [mapreduce] を選択し、[詳細設定] セクションで関連パラメータを設定します。 次の表にパラメータを示します。
パラメータ
説明
分散ポリシー
説明エージェントバージョンは 1.10.3 以降である必要があります。
ポーリングスキーム:システムは、各ワーカーに同じ数のタスクを均等に分散します。 このポリシーは、各ワーカーがタスクの処理にほぼ同じ時間を必要とするシナリオに適しています。 これはデフォルト値です。
Workerload最適戦略:マスターノードはワーカーノードの負荷を自動的に検出します。 このポリシーは、各ワーカーがタスクの処理に必要とする時間に大きな差があるシナリオに適しています。
単一マシン並列サブタスク数
ワーカーの実行スレッド数です。 デフォルト値:5。実行を高速化するために、より大きな値を指定できます。 ダウンストリームまたはデータベースが指定した値に耐えられない場合は、より小さい値を指定できます。
サブタスクの失敗再試行回数
タスクが失敗した場合、タスクは自動的に再試行されます。 デフォルト値:0。
サブタスクの失敗再試行間隔
タスクが失敗した場合の2回連続の再試行の間隔です。 単位:秒。 デフォルト値:0。
サブタスクフェイルオーバー戦略
説明エージェントバージョンは 1.8.12 以降である必要があります。
ワーカーがタスクの実行に失敗して停止した後、新しいワーカーにタスクを分散するかどうかを指定します。 スイッチをオンにすると、フェイルオーバーがトリガーされたときにシステムがタスクを複数回実行する場合があります。 タスクの冪等性を実装する必要があります。
マスターノードが実行に参加する
説明エージェントバージョンは 1.8.12 以降である必要があります。
マスターノードがタスクの実行に参加するかどうかを指定します。 タスクを実行するには、少なくとも 2 つのワーカーが使用可能である必要があります。 非常に多数のタスクが存在する場合は、スイッチをオフにすることをお勧めします。
サブタスク分散方法
プッシュモデル:システムはタスクを各ワーカーに均等に分散します。
プルモデル:各ワーカーは自動的にタスクをプルします。 このモデルには木桶理論は適用されません。 このモデルは、タスクをプルするための動的なスケールアップをサポートしています。 プルプロセス中に、すべてのタスクはマスターノードにキャッシュされます。 これにより、メモリに大きな負荷がかかります。 同時に 10,000 を超えるタスクを分散しないことをお勧めします。
パラメータの詳細については、「ジョブ管理の詳細パラメータ」をご参照ください。