2014-10-13 15 views
7

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

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 bucket s3:// ma non sembra funzionare da Spark e lo hadoop 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.

risposta

3

Da AWS documentazione S3:

Il volume totale dei dati e il numero di oggetti che è possibile memorizzare sono illimitate. Singoli oggetti Amazon S3 possono avere dimensioni comprese tra 1 byte e 5 terabyte. L'oggetto più grande che può essere caricato in un singolo PUT è di 5 gigabyte. Per gli oggetti più grandi di 100 megabyte, i clienti dovrebbero prendere in considerazione l'utilizzo della funzionalità di caricamento multipart.

Un modo per andare in giro in questo modo:

  • Attache un volume EBS al vostro sistema, formattarlo.
  • Copia i file nel volume EBS "locale".
  • Effettua l'istantanea del volume, passa automaticamente al tuo S3.

Offre anche un carico minore sull'istanza.

Per accedere a tali dati, è necessario allegare l'istantanea come EBS a un'istanza.