サードパーティのREST APIに膨大な量のデータをスピーディに書き込まなければならない場合があるかと思います。APIをシングルスレッドで実行するのは非常に時間がかかります。理想としては、データスループットを高速化するために、APIを何度も並列で実行するのが良いでしょう。
Integrate.ioはHadoop MapReduceを使用してサーバーのクラスタ上にコンピューティングタスクを分散させるため、(メモリやディスクの制約により)単一のサーバーでは処理できない大規模なデータセットに理想的な製品です。これにより、ペタバイト級のデータの並列処理が可能になります。
MapReduceの処理は、4つの主要なフェーズに分けられます。
- Map キーによってグループ化されたキー・バリューペアです。
- Shuffle 同じキーを持つすべての値が、Reducerによって一緒に束ねられます。
- Sort すべてのレコードはReducerによりキーごとにソートされます。
- Reduce Reducerによりデータ値が集計されます、
サードパーティAPIへのデータ書き込みを高速化するために、Curリクエストを並列で実行することができます。Curl()を実行するSelectコンポーネントの直前にSortコンポーネントを追加することで、タスクが複数のクラスタノードに渡り分散されるようになります(タスクはMapperではなくReducerによって処理されるため)。
デフォルトでは、Integrate.ioは単一のHadoop Reducerを使用します(Integrate.ioのシステム変数「_DEFAULT_PARALLELISM」は0に設定されています)が、「_DEFAULT_PARALLELISM」はシングルノード(1 node)のHadoopクラスタでは5に設定することができ、5つの並列スレッドを処理できるようになります。
Integrate.ioの変数「 _DEFAULT_PARALLELISM」を増やすのは、Hadoopクラスタが複数のノードを持っている場合にのみ有効です。例えば15の並列スレッドであれば、「_DEFAULT_PARALLELISM」は3ノードのクラスタが必要となります。
Regular Curl Vs Parallel Curl
サードパーティのAPIが書き込み負荷を処理できることを確認することが重要です。でないと、ジョブがレート制限で失敗します。Intercom、Salesforceなどのサービスは、1分あたりの追加のAPIコールとデータスループットに対して、上のレベルのプランを必要とすることがよくあります。
Integrate.ioのコンポーネントの多くは、データベース接続やワークフローを含め、デフォルトで並列で動作するように設計されています。