2017-01-14 19 views
1

Я новичок Спарк и я бегу мое приложение для чтения данных 14kb из текста подавал, сделать некоторые преобразования и действия (сбор, collectAsMap) и сохранять данные в базу данныхСвеча памяти водителя и Палач памяти

Я бегу он локально в моем macbook с памятью 16G, с 8 логическими ядрами.

Java Max heap установлен в 12G.

Вот команда, которую я использую для запуска приложения.

бен/искровой представить --class com.myapp.application --master местной [*] --executor-память 2G --driver-память 4G /jars/application.jar

Я получаю следующее предупреждение

2017-01-13 16: 57: 31,579 [Палач запуск задачи рабоче-8hread] WARN org.apache.spark.storage.MemoryStore - не хватает места для кэширования rdd_57_0 в памяти! (рассчитано 26,4 МБ)

Может ли кто-нибудь направить меня на то, что здесь не так, и как я могу улучшить производительность? Также как оптимизировать на достаточном разливе? Вот вид разлива, что происходит в моей локальной системе

enter image description here

+2

В локальном режиме, 'spark.executor.memory' не имеет никакого эффекта. поэтому просто попробуйте «spark.driver.memory» до более 6 г, так как у вас есть 16-граммовый баран. –

+0

Каков размер файла, который вы пытаетесь прочитать? –

+0

@RajatMishra Я попробовал с памятью 6 г драйверов и 8 г java max heap. Я все еще получаю то же сообщение. –

ответ

0

В локальном режиме, вам не нужно указывать мастер, использованияКонтактная аргументы по умолчанию это нормально. Официальный сайт сказал: «Сценарий spark-submit в каталоге bin Spark используется для запуска приложений в кластере. Он может использовать все поддерживаемые Spark администраторы кластера через единый интерфейс, поэтому вам не нужно настраивать приложение специально для каждый из них ». Поэтому вам лучше использовать spark-submit в кластере, локально вы можете использовать искровую оболочку.

+0

С помощью искровой оболочки вы можете отлаживать приложение, чтобы найти, какой шаг неправильный. – Wang

2

Запуск исполнителей со слишком большой памятью часто приводит к чрезмерным задержкам сбора мусора. SO не является идеей бога, чтобы назначить больше памяти. Так как у вас есть только 14 КБ данных 2 ГБ памяти исполнителей и 4 ГБ памяти водителя более чем достаточно. Нет необходимости назначать этот объем памяти. Вы можете запустить это задание даже с 100 МБ памяти, и производительность будет лучше, чем 2 ГБ.

Драйвер памяти более полезен при запуске приложения, в режиме с прямыми кластерами, поскольку мастер приложения запускает драйвер. Здесь вы используете свое приложение в локальном режиме. driver-memory не требуется. Вы можете удалить эту конфигурацию из своей работы.

В приложении вы назначили

Java Max heap is set at: 12G. 
executor-memory: 2G 
driver-memory: 4G 

Общая память надельную = 16GB и ваш MacBook, имеющий 16 ГБ памяти только. Здесь вы выделили всю свою оперативную память на свое искровое приложение.

Это не хорошо. Сама операционная система потребляет около 1 ГБ памяти, и у вас могут быть другие приложения, которые также потребляют оперативную память. Итак, вы на самом деле выделяете больше памяти, чем у вас. И это основная причина, что ваше приложение бросает ошибку Not enough space to cache the RDD

  1. Там нет смысла присвоения Java Heap до 12 Гб Ředice его до 4 Гб или меньше.
  2. Уменьшите память исполнителя до executor-memory 1G или меньше
  3. Поскольку вы работаете локально, удалите driver-memory из вашей конфигурации.

Отправьте свою работу. Он будет работать плавно.

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

Spark on yarn executor resource allocation

+0

Поскольку приложение запускается в локальном режиме, разве вы не думаете, что память исполнителей не влияет на то, что рабочий живет в процессе jvm драйвера? –

+0

@ RajatMishra Да, вы правы, кажется, что в локальном режиме использовать 'executor-memory' нет. Я буду делать еще несколько тестов и обновить свой ответ соответственно :) –

+0

Есть ли у кого-нибудь источник управления памятью в Spark 2.0+, я не нахожу ничего похожего на отличный источник, который вы предоставили. благодаря – Boern