18

だから私はSparkで(SQLのものを使って)読んでいる寄木細工のファイルを1つだけ持っていて、それを100個のパーティションで処理したいと思っています。spark.default.parallelism100 に設定してみました。また、寄木細工の圧縮を (gzip から) なしに変更しようとしました。何をしても、spark ジョブの最初のステージには 1 つのパーティションしかありません (シャッフルが発生すると、100 に再パーティション化され、その後明らかにはるかに高速になります)。

現在、いくつかのソース(以下のような)によると、寄木細工は(gzipを使用している場合でも)分割可能である必要があるため、私は非常に混乱しており、アドバイスが欲しい.

https://www.safaribooksonline.com/library/view/hadoop-application-architectures/9781491910313/ch01.html

私はspark 1.0.0を使用していますが、どうやらデフォルト値spark.sql.shuffle.partitionsは200なので、そうではありません。実際、並列処理のすべてのデフォルトは 1 よりもはるかに大きいため、何が起こっているのかわかりません。

4

5 に答える 5

1

寄木細工への書き込み中に分散を制御したいとおっしゃいました。RDD から寄木細工を作成すると、寄木細工は RDD のパーティションを保持します。したがって、RDD を作成して 100 個のパーティションを指定し、parquet 形式のデータフレームから 100 個の個別の parquet ファイルを fs に書き込むことになります。読み取りの場合、spark.sql.shuffle.partitionsパラメーターを指定できます。

于 2015-05-12T18:45:30.403 に答える
0

これを実現するには、SparkContextHadoop 構成 ( sc.hadoopConfiguration) プロパティを設定するために使用する必要がありますmapreduce.input.fileinputformat.split.maxsize

このプロパティを hdfs.blockSize よりも小さい値に設定すると、分割数と同じ数のパーティションを取得できます。

例: =
134217728 hdfs.blockSize(128MB) で、
完全なブロックを 1 つだけ含む 1 つのファイルが読み取られ
mapreduce.input.fileinputformat.split.maxsize= 67108864 (64MB)の場合

次に、それらの分割が読み込まれる 2 つのパーティションがあります。

于 2016-06-10T21:05:55.750 に答える