過去6か月間に受信したイベントをHDFSにストリーミングするSparkStreamingジョブを実装しました。
HDFSで多数の小さなファイルを作成しているので、それぞれのファイルサイズをHDFSの128 MB(ブロックサイズ)にします。
追加モードを使用すると、代わりにすべてのデータが1つの寄木細工のファイルに書き込まれます。
128 MBのデータごとに新しいHDFS寄木細工のファイルを作成するようにSparkを構成するにはどうすればよいですか?
Sparkは、書き込む前に、オブジェクトのパーティションと同じ数のファイルを書き込みます。それは本当に非効率的です。パーツファイルの総数を減らすために、これを試してください。オブジェクトの合計バイトサイズをチェックし、最適なサイズを+1するように表現します。
import org.apache.spark.util.SizeEstimator
val inputDF2 : Long = SizeEstimator.estimate(inputDF.rdd)
//find its appropiate number of partitions
val numPartitions : Long = (inputDF2/134217728) + 1
//write it out with that many partitions
val outputDF = inputDF.repartition(numPartitions.toInt)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加