Ho riscontrato un certo numero di problemi durante il tentativo di salvare uno SchemaRDD molto grande come nel formato Parquet su S3. Ho già postato domande specifiche per questi problemi, ma questo è quello che ho davvero bisogno di fare. Il codice dovrebbe essere simile a questoSalvataggio di un >> 25T SchemaRDD in formato Parquet su S3
import org.apache.spark._
val sqlContext = sql.SQLContext(sc)
val data = sqlContext.jsonFile("s3n://...", 10e-6)
data.saveAsParquetFile("s3n://...")
mi imbatto in problemi se ho più di circa 2000 partizioni o se v'è partizione superiore a 5G. Questo pone un limite superiore alla dimensione massima SchemaRDD che posso elaborare in questo modo. Il limite pratico è più vicino a 1T dato che le dimensioni delle partizioni variano notevolmente e per il processo non è necessaria una partizione 1 5G.
Domande che si occupano di problemi specifici che ho incontrato sono
- 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
Questa domanda è quello di vedere se ci sono soluzioni per l'obiettivo principale che non implicano necessariamente la risoluzione di uno dei suddetti problemi direttamente.
a distillare le cose ci sono 2 problemi
scrivere una sola frammento più grande di 5G per S # fallisce. AFAIK questo è un limite costruito di benne
s3n://
. Dovrebbe essere possibile per i buckets3://
ma non sembra funzionare da Spark e lohadoop distcp
da HDFS locale non può farlo neanche.La scrittura del file di riepilogo tende a fallire una volta che ci sono 1000 di frammenti. Sembrano esserci più problemi con questo. Scrivere direttamente su S3 produce l'errore nella domanda collegata qui sopra. Scrivere direttamente su HDFS locale produce un errore OOM anche su una r3.8xlarge (244G ram) una volta quando c'è circa 5000 frammenti. Questo sembra essere indipendente dal volume di dati effettivo. Il file di riepilogo sembra essenziale per una query efficiente.
Nel loro insieme questi problemi limitano tavoli in legno su S3 a 25T. In pratica, in realtà, è significativamente inferiore poiché le dimensioni dei frammenti possono variare ampiamente all'interno di un RDD e il limite 5G si applica al frammento più grande.
Come è possibile scrivere un >> 25T RDD come Parquet su S3?
Sto utilizzando Spark-1.1.0.