Как веб-интерфейс Apache Spark сообщает о разнице между текущим RDD и хранилищем в сведениях о приложении?

Посмотрев на Что произойдет, если 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

Моя идея, которую я проверю завтра, - отключить кэширование/сохранение. Спасибо за любой вклад!


person JimLohse    schedule 20.06.2016    source источник
comment
Кстати, я признаю, что делаю что-то странное, создавая массив Accumulables (n = от 1000 до 2000 для нашего приложения). Я намерен переписать это на Scala в свободное время (ха-ха-ха), потому что SparkContext Scala позволяет использовать HashMap Accumulable, а JavaSparkContext — нет. Тем не менее, я не думаю, что это потратило слишком много памяти, но это некрасиво, я согласен :)   -  person JimLohse    schedule 20.06.2016
comment
И я вижу stackoverflow.com /questions/26562033/ и stackoverflow.com/questions/34114625/, но они не Чтобы ответить на мой конкретный вопрос, что означает использование памяти на моем снимке экрана вкладки «Исполнитель» на странице сведений о приложении?   -  person JimLohse    schedule 20.06.2016