Посмотрев на Что произойдет, если RDD не сможет не помещается в память в Spark? и Storagelevel в Spark RDD MEMORY_AND_DISK_2() вызывает исключение У меня все еще есть вопрос:
Отслеживает ли «хранилище» на вкладке «Исполнитель» данные в RDD по мере их создания? Или только один раз этот RDD сохраняется в памяти или на диске в соответствии с настройками кеша? Если вы посмотрите на снимок экрана ниже в этом посте, то увидите, что создано около 100 000 объектов, но он показывает нулевое использование памяти.
Хотите больше подробностей? Создание RDD под названием «dataSetN», которое представляет собой просто RDD целых чисел желаемого размера (обычно) 10 ^ 6, а затем сопоставление его с RDD наших «SparkDoDrops»:
JavaRDD<TholdDropResult> dropResultsN = dataSetN.map(s -> new SparkDoDrop(parFile, pedFile).call(s)).persist(StorageLevel.MEMORY_ONLY());
Публикуя только фрагменты кода, мы на самом деле что-то делаем с этими членами RDD «dropResultsN», поэтому я знаю, что Spark не ленится:
for (Accumulable<TholdDropTuple, TholdDropResult> dropEvalAccum : dropAccumList) {
dropResultsN.foreach(new VoidFunction<TholdDropResult>() {
@Override
public void call(TholdDropResult dropResultFromN) throws Exception {
dropEvalAccum.add(dropResultFromN);
}
});
При просмотре вкладки «Исполнитель» в сведениях о приложении:
На момент создания этого экрана было создано и сохранено в RDD более 100 000 объектов Java, о чем я знаю благодаря ведению журнала каждый раз, когда создается 1000 объектов.
Наконец, когда я увеличил (единственный для тестирования) исполнитель до 17,5 ГБ, он почти дошел до 100 КБ, и я получил эту ошибку. В последнем прогоне с 12G он продолжал возвращаться и переделывать то, что потерял, и казалось, что он никогда не закончит:
16/06/19 19:47:59 INFO SparkDoDrop: Hit a 100 milestone on N = 90900
16/06/19 19:48:06 INFO MemoryStore: Will not store rdd_1_1 as it would require dropping another block from the same RDD
16/06/19 19:48:06 WARN MemoryStore: Not enough space to cache rdd_1_1 in memory! (computed 5.2 GB so far)
16/06/19 19:48:06 INFO MemoryStore: Memory use = 6.4 GB (blocks) + 5.2 GB (scratch space shared across 2 tasks(s)) = 11.6 GB. Storage limit = 12.1 GB.
16/06/19 19:48:14 INFO SparkDoDrop: Hit a 100 milestone on N = 91000
Моя идея, которую я проверю завтра, - отключить кэширование/сохранение. Спасибо за любой вклад!