非常に大きな SchemaRDD を S3 の Parquet 形式で保存しようとすると、多くの問題が発生しました。これらの問題については、すでに具体的な質問を投稿しましたが、これが本当に必要なことです。コードは次のようになります
import org.apache.spark._
val sqlContext = sql.SQLContext(sc)
val data = sqlContext.jsonFile("s3n://...", 10e-6)
data.saveAsParquetFile("s3n://...")
約 2000 を超えるパーティションがある場合、または 5G を超えるパーティションがある場合、問題が発生します。これにより、この方法で処理できる SchemaRDD の最大サイズに上限が設定されます。パーティションのサイズは大きく異なり、プロセスが失敗するために必要な 5G パーティションは 1 つだけであるため、実際の制限は 1T に近くなります。
私が遭遇した特定の問題を扱う質問は、
- Apache Spark から Amazon S3 へのマルチパートアップロード
- 再分割された SchemaRDD を Spark SQL で Parquet に書き込む際のエラー
- Spark SQL が多数のシャードを含む Parquet データの書き込みを完了できない
この質問は、上記の問題のいずれかを直接解決することを必ずしも必要としない、主な目標に対する解決策があるかどうかを確認することです。
物事を蒸留するには2つの問題があります
5G を超える単一のシャードを S3 に書き込むと失敗します。
s3n://
私の知る限り、これはバケットの組み込み制限です。バケットでは可能ですs3://
が、Spark からは機能しないようでhadoop distcp
、ローカル HDFS からも機能しません。数千のシャードがあると、サマリー ファイルの書き込みが失敗する傾向があります。これには複数の問題があるようです。S3 に直接書き込むと、上記のリンクされた質問でエラーが発生します。ローカル HDFS に直接書き込むと、r3.8xlarge (244G RAM) でさえ、約 5000 個のシャードがある場合に OOM エラーが発生します。これは、実際のデータ量とは無関係のようです。サマリー ファイルは、効率的なクエリに不可欠なようです。
これらの問題をまとめると、S3 の Parquet テーブルは 25T に制限されます。実際には、RDD 内でシャードのサイズが大きく異なる可能性があり、5G 制限が最大のシャードに適用されるため、実際には大幅に少なくなります。
>>25T RDD を Parquet として S3 に書き込むにはどうすればよいですか?
Spark-1.1.0 を使用しています。