2017-11-25 6 views
0

データフローバッチロードのパフォーマンスベンチマークを実行していて、Bigqueryコマンドラインツールの同じロードと比較して負荷が非常に遅いことがわかりました。Apache Beamを使用したデータフローバッチロードのパフォーマンスに関する問題

ファイルサイズは約20 MBで、何百万ものレコードがありました。私はさまざまなマシンタイプを試して、n1-highmem-4で最高のロードパフォーマンスを得ました。これは、ターゲットBQテーブルのロードに約8分かかることがあります。

コマンドラインユーティリティでBQコマンドを実行して同じテーブルの負荷を適用した場合、同じ量のデータを処理して読み込むのに2分ほどかかりませんでした。 データフロージョブを使用したこの負荷の低いパフォーマンスに関する洞察はありますか?どのようにBQコマンドラインユーティリティに匹敵するようにパフォーマンスを向上させるには?

答えて

5

ほとんどの場合、VMの起動とシャットダウンに数分かかる場合があります。 BQ CLIを使用して直接行うことができるものを実行している場合は、その目的のためにデータフローを使用するのは過度の可能性があります。しかし、あなたの質問をコードやデータフローのジョブIDなどの詳細情報で更新することができます。

+0

@jkffありがとうございます。私は、週末後にオフィスで一度詳細(ジョブIDとスニペット)を共有します。しかし、私は正確なプロセスを説明することができます。まず、私のコードは 'TextIO/AvroIO.read()'を使って 'Text/Avro'ファイルからデータを読み込みます。次に、テーブル内の既存のレコードと、いくつかのキーに基づいてPCollectionの新しいエントリを比較し、 'Upsert'プロセスの一部としてテーブル内の新しい要素リストを取得します。この処理の後、単に 'BigqueryIO.write()'を使って 'TableRows'の新しいPCollectionをターゲットテーブルにプッシュします。これはデータフローで実装しようとしている3つのステップのプロセスです。 –

+0

ジョブID: '2017-11-24_03_41_00-13093050104159263095'を見ると、私が直面している待ち時間の問題を分析するのに役立ちます。これは完了までに16分かかった同じ仕事の求人IDでした。以前は同じマシンタイプを使用していましたが、私の仕事は8分で完了しました。同じジョブIDは '2017-11-24_02_47_19-15366595440306710005'です。 –

+1

ジョブには、大部分の時間を要する「設定の読み取り」ステップが含まれているようです。あなたのコードをいくつか含めることができますか?また、データフローWeb UIの変換タイミングとそのログには何がありますか?彼らは何が起こっているかのヒントを与えるかもしれません。 – jkff

関連する問題