サードパーティのREST APIに膨大な量のデータをスピーディに書き込まなければならない場合があるかと思います。APIをシングルスレッドで実行するのは非常に時間がかかります。理想としては、データスループットを高速化するために、APIを何度も並列で実行するのが良いでしょう。

Integrate.ioはHadoop MapReduceを使用してサーバーのクラスタ上にコンピューティングタスクを分散させるため、(メモリやディスクの制約により)単一のサーバーでは処理できない大規模なデータセットに理想的な製品です。これにより、ペタバイト級のデータの並列処理が可能になります。

MapReduceの処理は、4つの主要なフェーズに分けられます。

  1. Map キーによってグループ化されたキー・バリューペアです。
  2. Shuffle 同じキーを持つすべての値が、Reducerによって一緒に束ねられます。
  3. Sort すべてのレコードはReducerによりキーごとにソートされます。
  4. 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

thumbnail image

サードパーティのAPIが書き込み負荷を処理できることを確認することが重要です。でないと、ジョブがレート制限で失敗します。Intercom、Salesforceなどのサービスは、1分あたりの追加のAPIコールとデータスループットに対して、上のレベルのプランを必要とすることがよくあります。

Integrate.ioのコンポーネントの多くは、データベース接続やワークフローを含め、デフォルトで並列で動作するように設計されています。