0

S3でORC形式の2つの異なるデータセットを読み込むためにspark sqlを使用しています。しかし、ほぼ同じサイズのデータ​​セットでは、読み込みのパフォーマンスの差が大きくなります。同じサイズで行の長さが異なると、パフォーマンスの違いがスパークで読み取られる

データセット1:50列2.12億レコードそれぞれを含み、S3バケット内のORC形式で15ギガバイトまでの合計。

データセット2:150列2900万レコードそれぞれが含まれており、同じS3バケット内のORC形式で15ギガバイトまでの合計。

データセット1は、2分を取得し、spark sqlを使用して読み取ります。同じインフラストラクチャ内で同じスパーク読み取り/カウントジョブを使用してデータセット2を読み取るには、12分を使用します。

各行の長さによってこの大きな違いが生じる可能性があります。誰も私がこれらのデータセットを読む際にパフォーマンスの大きな違いがある理由を理解するのを助けることができますか? (とないアマゾンEMR &それはS3です://クライアント)クライアント: それは(どのくらいの追求についてです)仕事が起こっていると、クライアントはランダムIOについて巧妙されているかどうかをされますが、S3Aを使用していると仮定すると、

答えて

1

。基本的には、HTTP接続を閉じて新しいものを作成する必要がある場合、seek()はHTTP1.1 GETよりも非常に高価です。 Hadoop 2.8+には、HADOOP-14244:Lazy seekとHADOOP-13203という2つの機能が追加されています。高性能ランダムIO 。(ファイルを.gzを読んなど)

spark.hadoop.fs.s3a.experimental.fadvise random

これは非ランダムIOのパフォーマンスを傷つけるだろうが、非常に重要です:

あなたclassopath上のHadoop 2.8 + JARを持っている場合は、行きますORC /寄木細工IO perf。

Amazon EMRを使用している場合、s3クライアントはクローズソースです。私は恐れている彼らのサポートチームに連れて行きます。

+0

私はAmazon EMRとそのs3クライアントを使用しています。パフォーマンスをテストすることはできますか?注:データセット1ではファイル数が多いです(データセット2では300に対して220)。 –

+0

ファイルの数よりもスキップ量が多いと思われますが、ファイルをさらに分割することはできます。パフォーマンスをテストするには?おそらくHadoop 2.8のインストールでローカルに起動し、 "ユーザ提供のJAR" https://spark.apache.org/downloads.htmlで起動してください。VMにスティックして、2番目のデータセットに対してオンエアをオンにします。その他の戦略。ローカルですべてダウンロードし、ベンチマークになる可能性があるfile://でperfを比較してください。 –

関連する問題