2016-02-19 3 views
1

Если у моего сервера 50 ГБ памяти, Hbase использует 40 ГБ. И когда я запускаю Spark, я устанавливаю память как --executor-memory 30G. Так что Spark захватит некоторую память от Hbase, так как осталось всего 10 ГБ. Другой вопрос, если Spark нужен только 1 ГБ памяти, но я дал Spark 10G памяти, Spark займет 10 ГБ памяти.Как Spark занимает память

+0

Отчасти ответили на ваш вопрос. Для полного решения вам нужно добавить дополнительную информацию об окружающей среде, а также Когда вы говорите, что ** я дал Spark 10G memory **, о каком параметре вы говорите? Пожалуйста, добавьте то же самое, что и часть вашего вопроса, и я разработаю предоставленный ответ. – Sumit

ответ

0

Поведение будет отличаться в зависимости от режима развертывания. Если вы используете локальный режим, то --executor-memory ничего не изменит, так как у вас только 1 Executor, и это ваш драйвер, поэтому вам нужно увеличить память вашего драйвера.

В случае, если вы используете автономный режим и отправкой задания в режиме кластера, то следующий будет применяться: -

  1. --executor-memory это память требуется на исполнителя. Это размер кучи исполнителей. По умолчанию 60% сконфигурированной --executor-memory используется для кеширования RDD. Остальные 40% памяти доступны для любых объектов, созданных во время выполнения задачи. это эквивалентно -Xms и -Xmx. поэтому, если вы предоставите больше доступной памяти, тогда ваши исполнители покажут ошибки в отношении недостаточной памяти.
0

Когда вы предоставляете память 30-разрядного исполнительного устройства Spark, ОС не даст ему реальной физической памяти. Но как и когда ваш исполнитель требует, чтобы фактическая память либо кэшировала, либо обрабатывала, это приведет к тому, что другие процессы, такие как hbase, будут заменены. Если ваш обмен системой установлен на ноль, вы столкнетесь с ошибкой OOM.

ОС Сворачивает незанятую часть процесса, которая может заставить ваш процесс вести себя очень медленно.

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