Кэширование искры: RDD Только 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

Info

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

Проблема

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

введите описание изображения здесь

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

введите описание изображения здесь

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

РЕДАКТИРОВАТЬ 1: я просто попытался использовать 60 разделов для HashPartitioner как:

..
.partitionBy(new HashPartitioner(60))
..

И он Работал. Теперь я получаю кеш целых RDD. Кто-нибудь догадывается, что могло бы произойти здесь? Может ли искажение данных вызвать это поведение?

Edit-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)

Ответ 1

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

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