2017-09-11 4 views
1

私たちは〜10GBのzip圧縮された〜30GBの圧縮されたgzipファイルを処理するsomバッチジョブを持っています。データフローでlargz gzippedファイルを効果的に処理するにはどうすればよいですか?

これを処理しようとすると、Javaで不当な時間がかかり、より効果的な方法を探しています。 TextIOまたはgcsのネイティブjava sdkを使用してファイルをダウンロードすると、処理に8時間以上かかるため、何らかの理由でutをスケールアウトすることができます。おそらく、gzipされているのでファイルを分割しません。

ファイルを解凍して解凍したファイルを処理すると、ジョブは約10分かかるため、100倍の速さで処理されます。

gzippedファイルを処理するには余分な時間がかかることがありますが、100倍は長すぎます。

答えて

1

gzippedファイルは分割可能ではないので、Dataflowはgzip形式の各入力ファイルの読み込みをパラレル化する方法がありません。可能であれば、GCSに非圧縮形式で保存するのが最善の方法です。

100倍のパフォーマンスの違いについて:パイプラインの圧縮されていないバージョンと圧縮されていないバージョンでは、パイプラインの作業者のVMはいくつでしたか?もしあなたが仕事のIDを持っていれば、私たちはそれをさらに調査するために内部的に調べることができます。

+0

負荷が分割可能でないので、私が持っていた作業員の数はそれほど重要ではないと思います。私は30人の労働者で仕事を始めようとしましたが、分割できないので自動的にそれを縮小します。 –

+0

'TextIO'を処理する前に一時フォルダに解凍して書き込むことが可能になりますので、負荷を並列化できます。これは現時点で私たちがやっていることです。 –

+0

TextIOを最初に圧縮解除してGCSに書き込むことは、同様に遅くなり、パフォーマンスが向上しません。同じファイルが複数のパイプラインで読み取られている場合を除いて、圧縮解除のコストは両者で償却することができます。 –

関連する問題