Для моего фрагмента кода, как показано ниже:Спарк Caching: РДД Только 8% кэшируются
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
Информация
- Размер файла ~ 4G
- Я использую 2
executors
(5G каждый) и 12 ядер. Spark
версия: 1.5.2
Проблема
Когда я смотрю на SparkUI
в Storage tab
, что я вижу:
Глядя внутрь RDD
, Кажется, только 2 из 24 partitions
кэшируются.
Любое объяснение такого поведения, и как это исправить.
EDIT 1: Я просто попытался с 60 перегородками для HashPartitioner
как:
..
.partitionBy(new HashPartitioner(60))
..
И Работали. Теперь я получаю весь кеш-код RDD
. Кто-нибудь догадывается, что могло бы произойти здесь? Может ли такое искажение данных вызвать подобное поведение?
Редактировать-2: Журналы, содержащие BlockManagerInfo
, когда я снова побежал с 24 partitions
. На этот раз 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)
Возможно, вы сняли скриншот, прежде чем вся работа была закончена, и она просто не обновилась? Если у вас есть файлы журналов, вы можете искать строки, содержащие «BlockManagerMasterActor»? В противном случае это означало бы ошибку ... –
Mine - это потоковая работа с жизненным циклом в 5 минут. Я ждал 15 минут. – Mohitt
Я получаю несколько журналов из 'BlockManagerMaster', но только как INFO, никаких ошибок. Ничего из 'BlockManagerMasterActor' – Mohitt