2017-05-09 6 views
1

私はカフカから得たストリーミングデータをAzure Data Lakeに書き込むためにflinkプログラムを使用しています。私はADLOutputStreamを取得して書き込みと閉じるの同期を使用するとうまくいきますが、パフォーマンスが非常に悪いのは1つのスレッドしかデータlake.Whenに書き込んでいないため、同期せずに複数のスレッドを使用しているときにHTTP 400 illegalargument例外がスローされます。複数のスレッドがAzureデータレイクのファイルに書き込む方法はありますか?複数のスレッドからAzureデータレイクにストリーミングデータを書き込む方法はありますか?

答えて

1

あなたのデザインをもう一度考えてください。

1つのアプローチは、複数のファイルをData Lakeに書き込むことです.1つはスレッドごとに1つです。 Data Lakeに入ると、USQLまたはPolyBaseを使用して、一連のファイルを1つのデータソースとして照会できます。あるいは、USQLジョブを編成して、それらが湖に入った後にファイルをマージすることもできます。これはローカル処理であり、正常に動作します。

1

AdlOutputStreamを使用することは、このような並列書き込みには適切なメカニズムではありません。 AdlOutputStreamは、単一のライターシナリオ用に設計されています。そこ複数のスレッドから並行してデータを摂取すると、通常我々が一般的に観察し、いくつかの特性です:

  1. あなたはスループットを最適化したいと(スレッド間)
  2. 注文は通常、
  3. 重要ではありませんスレッド間の同期を行いません

これらのタイプのシナリオに特に対応するために、Azure Data Lake Storeは、「並行追加」と呼ばれるユニークで高性能なAPIを提供します。ここで

は、このAPIを使用する方法を示します要点である:https://gist.github.com/asikaria/0a806091655c6e963eea59e89fdd40a9

方法は、当社のSDKにコアクラスで提供されています:https://azure.github.io/azure-data-lake-store-java/javadoc/com/microsoft/azure/datalake/store/Core.html

いくつかのポイントは、Azureのデータ湖ストアに固有に注意すること同時追加の実装:

  1. ファイル一度に同時アペンドで使用されている、あなたは一定のオフセットを使用することはできませんそれはPOSSであること
  2. に追加ファイル内に重複したデータが表示されることがあります。これは、エラーモードと自動再試行の副作用の可能性があります。

編集:もマレーFoxcraftからの回答は長い合理的なファイル・ローテーションポリシーでスレッドを実行するのに好適です。このアプローチで唯一の欠点は、1トンの小さなファイルで終わらないということです。

+0

ガイダンスと要点をありがとう。私は過去2週間の答えを探していました。 – Dhinesh

関連する問題