Beim Versuch, ein sehr großes SchemaRDD im Parkettformat auf S3 zu speichern, sind einige Probleme aufgetreten. Ich habe bereits spezielle Fragen für diese Probleme gestellt, aber das ist es, was ich wirklich tun muss. Der Code sollte so etwas wie dieseSpeichern eines >> 25T SchemaRDD im Parkett-Format unter S3
import org.apache.spark._
val sqlContext = sql.SQLContext(sc)
val data = sqlContext.jsonFile("s3n://...", 10e-6)
data.saveAsParquetFile("s3n://...")
ich auf Probleme stoßen aussehen, wenn ich mehr als etwa 2000 Partitionen oder wenn es Partition größer als 5G. Dies legt eine Obergrenze für die maximale Größe SchemaRDD, die ich auf diese Weise verarbeiten kann. Das praktische Limit liegt näher bei 1T, da die Größe der Partitionen sehr unterschiedlich ist und Sie nur 1 5G-Partition benötigen, damit der Prozess fehlschlägt.
Fragen mit den spezifischen Problemen zu tun mir begegnet sind
- Multipart uploads to Amazon S3 from Apache Spark
- Error when writing a repartitioned SchemaRDD to Parquet with Spark SQL
- Spark SQL unable to complete writing Parquet data with a large number of shards
Diese Fragen, ob es irgendwelche Lösungen für das Hauptziel sind zu sehen ist, dass nicht unbedingt die oben genannten Probleme direkt zu lösen.
Dinge zu destillieren dort unten zwei Probleme sind
eine einzelne Scherbe größer als 5G Schreiben in S # ausfällt. AFAIK dies ein eingebautes Limit von
s3n://
Eimer. Es sollte fürs3://
Buckets möglich sein, aber scheint nicht von Spark undhadoop distcp
aus dem lokalen HDFS funktionieren, kann es auch nicht tun.Schreiben der Zusammenfassungsdatei neigt dazu, fehlzuschlagen, sobald es 1000er von Shards gibt. Es scheint mehrere Probleme damit zu geben. Schreiben direkt in S3 erzeugt den Fehler in der oben verlinkten Frage. Das Schreiben direkt in das lokale HDFS erzeugt einen OOM-Fehler selbst bei einem r3.8xlarge (244G RAM), wenn dort etwa 5000 Shards vorhanden sind. Dies scheint unabhängig vom tatsächlichen Datenvolumen zu sein. Die Zusammenfassungsdatei scheint für eine effiziente Abfrage wesentlich zu sein.
Zusammen begrenzen diese Probleme Parkett-Tabellen auf S3 zu 25T. In der Praxis ist es tatsächlich wesentlich weniger, da die Shard-Größen innerhalb einer RDD stark variieren können und die 5G-Grenze für den größten Shard gilt.
Wie kann ich eine >> 25T RDD als Parkett zu S3 schreiben?
Ich benutze Spark-1.1.0.