私のセットアップ:
2 つの Spark クラスター。EC2 に 1 つ、Amazon EMR に 1 つ。どちらも Spark 1.3.1 です。
EMR クラスターはemr-bootstrap-actionsでインストールされました。EC2 クラスターは、Spark のデフォルトの EC2 スクリプトと共にインストールされました。
コード:
12 個の Parquet ファイルを含むフォルダーを読み取り、パーティションの数を数えます
val logs = sqlContext.parquetFile(“s3n://mylogs/”)
logs.rdd.partitions.length
所見:
- EC2 では、このコードは 12 個のパーティションを提供します (ファイルごとに 1 つ、理にかなっています)。
- EMR では、このコードで 138 (!) 個のパーティションが得られます。
質問:
Parquet ファイルの読み取り時にパーティションの数を制御するものは何ですか?
まったく同じSparkリリースで、S3のまったく同じフォルダーを読みました。これにより、パーティショニングの発生方法を制御する構成設定がいくつかあると思われます。誰かがこれについてもっと情報を持っていますか?
洞察をいただければ幸いです。
ありがとう。
アップデート:
EMR の S3 ファイル システムの実装によって、多数のパーティションが作成されているようです ( com.amazon.ws.emr.hadoop.fs.EmrFileSystem
)。
取り外し時
<property><name>fs.s3n.impl</name><value>com.amazon.ws.emr.hadoop.fs.EmrFileSystem</value></property>
(これによりcore-site.xml
、Hadoop の S3 ファイルシステムに戻ります) から、12 個のパーティションになります。
で実行するとEmrFileSystem
、次のようにパーティションの数を制御できるようです。
<property><name>fs.s3n.block.size</name><value>xxx</value></property>
使用時にパーティションの数を制御するよりクリーンな方法はありEmrFileSystem
ますか?