Per il mio frammento di codice, come di seguito:Spark Caching: RDD Solo l'8% nella cache
val levelsFile = sc.textFile(levelsFilePath)
val levelsSplitedFile = levelsFile.map(line => line.split(fileDelimiter, -1))
val levelPairRddtemp = levelsSplitedFile
.filter(linearr => (linearr(pogIndex).length!=0))
.map(linearr => (linearr(pogIndex).toLong, levelsIndexes.map(x => linearr(x))
.filter(value => (!value.equalsIgnoreCase("") && !value.equalsIgnoreCase(" ") && !value.equalsIgnoreCase("null")))))
.mapValues(value => value.mkString(","))
.partitionBy(new HashPartitioner(24))
.persist(StorageLevel.MEMORY_ONLY_SER)
levelPairRddtemp.count // just to trigger rdd creation
Info
- La dimensione del file è ~ 4G
- Sto usando 2
executors
(5G ciascuno) e 12 core. Spark
versione: 1.5.2
Problema
Quando guardo il SparkUI
in Storage tab
, Quello che vedo è:
Guardando dentro il RDD
, sembra che solo 2 su 24 partitions
siano memorizzati nella cache.
Ogni spiegazione a questo comportamento, e come risolvere questo problema.
EDIT 1: Ho appena provato con 60 partizioni per HashPartitioner
come:
..
.partitionBy(new HashPartitioner(60))
..
Ed lavorato. Ora sto ricevendo l'intero RDD
nella cache. Qualche ipotesi su cosa potrebbe essere successo qui? L'asimmetria dei dati può causare questo comportamento?
Modifica-2: registri contenenti BlockManagerInfo
quando ho eseguito nuovamente con 24 partitions
. Questa volta sono stati memorizzati nella cache 3/24 partitions
:
16/03/17 14:15:28 INFO BlockManagerInfo: Added rdd_294_14 in memory on ip-10-1-34-66.ec2.internal:47526 (size: 107.3 MB, free: 2.6 GB)
16/03/17 14:15:30 INFO BlockManagerInfo: Added rdd_294_17 in memory on ip-10-1-34-65.ec2.internal:57300 (size: 107.3 MB, free: 2.6 GB)
16/03/17 14:15:30 INFO BlockManagerInfo: Added rdd_294_21 in memory on ip-10-1-34-65.ec2.internal:57300 (size: 107.4 MB, free: 2.5 GB)
potrebbe essere possibile che tu abbia scattato lo screenshot prima che l'intero lavoro fosse terminato e semplicemente non si è aggiornato? Se hai i file di log puoi cercare le linee contenenti 'BlockManagerMasterActor'? Altrimenti significherebbe un errore ... –
Il mio è un flusso di lavoro con una durata del ciclo di 5 minuti. Ho aspettato per 15 minuti. – Mohitt
Ottengo alcuni registri da 'BlockManagerMaster', ma solo come INFO, nessun errore. Niente da 'BlockManagerMasterActor' – Mohitt