11

Для моего фрагмента кода, как показано ниже:Спарк 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 

Информация

  1. Размер файла ~ 4G
  2. Я использую 2 executors (5G каждый) и 12 ядер.
  3. Spark версия: 1.5.2

Проблема

Когда я смотрю на SparkUI в Storage tab, что я вижу:

enter image description here

Глядя внутрь RDD, Кажется, только 2 из 24 partitions кэшируются.

enter image description here

Любое объяснение такого поведения, и как это исправить.

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) 
+0

Возможно, вы сняли скриншот, прежде чем вся работа была закончена, и она просто не обновилась? Если у вас есть файлы журналов, вы можете искать строки, содержащие «BlockManagerMasterActor»? В противном случае это означало бы ошибку ... –

+0

Mine - это потоковая работа с жизненным циклом в 5 минут. Я ждал 15 минут. – Mohitt

+0

Я получаю несколько журналов из 'BlockManagerMaster', но только как INFO, никаких ошибок. Ничего из 'BlockManagerMasterActor' – Mohitt

ответ

1

Я считаю, что это происходит потому, что ограничения памяти достигнуты, или даже больше на точку, параметры памяти, которые вы используете, не позволяйте вашу работу использовать все ресурсы.

Увеличение # частей означает уменьшение размера каждой задачи, что может объяснить поведение.

Смежные вопросы