2015-04-07 62 views
5

Quando richiamo esplicitamente rdd.cache, è possibile vedere dalla scheda di memoria di spark console che solo una frazione del rdd è in realtà memorizzata nella cache. La mia domanda è dove sono le parti rimanenti? In che modo Spark decide quale parte lasciare nella cache?conserva solo una frazione di RDD

La stessa domanda si applica ai dati grezzi iniziali letti da sc.textFile(). Capisco che questi rdd vengano automaticamente memorizzati nella cache, anche se la tabella di memoria della console spark non visualizza alcuna informazione sul loro stato di cache. Sappiamo quanti di questi sono memorizzati nella cache o sono mancanti?

risposta

3

cache() è lo stesso di persist(StorageLevel.MEMORY_ONLY) e la quantità di dati probabilmente supera la memoria disponibile. Spark quindi sfrutta le cache in modo "meno recente".

È possibile modificare la memoria riservata per il caching impostando le opzioni di configurazione. Vedere la Spark Documentation per i dettagli e guardare fuori per: spark.driver.memory, spark.executor.memory, spark.storage.memoryFraction

non sono un esperto, ma non credo che textFile() memorizza nella cache automaticamente qualsiasi cosa; il Spark Quick Start memorizza in modo esplicito un file di testo RDD: sc.textFile(logFile, 2).cache()

+0

Grazie per la spiegazione. Ho visto un numero di cache a bassa percentuale. Non sembrava che la parte mancante fosse causata dalla mancanza di memoria degli esecutori di scintille. Non posso esserne sicuro Inoltre, ho letto una volta che i dati di input sono automaticamente memorizzati nella cache. Non riesco più a trovare l'articolo. Continuerò a cercare. – bhomass

+0

La memoria cache predefinita è al massimo 300m. Suppongo (dimensione heap predefinita 512mb * 0.6 memoryFraction, meno un altro overhead). Dipende dalla configurazione se è necessario aumentare la memoria del driver o dell'esecutore. Esegui Spark localmente o con un cluster? Se localmente, devi solo modificare 'spark.driver.memory'. – stholzm

+0

Se si esegue la memorizzazione nella cache poiché il passaggio iniziale è costoso da calcolare e la memorizzazione nella cache come un oggetto in memoria non è richiesta, un miglioramento migliore sarebbe utilizzare il metodo persit con un livello di archiviazione alternativo. https://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence MEMORY_ONLY_SET, ti permette di spremere di più in memoria (x4 con la mia struttura dati), le opzioni DISK ti permettono di fare la cache sul disco –

Problemi correlati