2016-06-13 3 views
3

Итак, у меня кластер cloudera с 7 рабочими узлами.Пряжа: как использовать все ресурсы кластера?

  • 30GB RAM
  • 4 виртуальных процессоров

Вот некоторые из моих конфигураций, которые я нашел важным (от Google) в настройки производительности моего кластера. Я бегу с:

  • yarn.nodemanager.resource.cpu-vcores => 4
  • yarn.nodemanager.resource.memory-mb => 17GB (отдых, зарезервированной для операционной системы и других процессов)
  • mapreduce.map.memory.mb => 2 Гб
  • mapreduce.reduce.memory.mb => 2GB
  • Запуск nproc => 4 (Количество доступных блоков обработки)

Теперь мое беспокойство, когда Я смотрю на свой ResourceManager, я вижу доступную память как 119 GB, и это нормально. Но когда я запускаю тяжелую работу sqoop, и мой кластер находится на пике, он использует только ~59 GB памяти, в результате чего ~60 GB память не используется.

Один из способов, который я вижу, может исправить эту проблему с неиспользуемой памятью, увеличивается map|reduce.memory до 4 ГБ, чтобы мы могли использовать до 16 ГБ на узел.

Другой способ - увеличить количество контейнеров, что я не уверен, как это сделать.

  • 4 ядра x 7 узлов = 28 возможных контейнеров. 3, которые используются другими процессами, только 5 в настоящее время доступны для работы sqoop.

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

Любая помощь или предложения по конфигурации кластера будут высоко оценены. Благодарю.

+0

Вы используете DefaultResourceCalculator? Или вы настроили использовать DominantResourceCalculator? – Nicomak

+0

Можете ли вы разместить конфигурацию 'yarn-site.xml' и' mapred-site.xml'? – Nicomak

+0

Я использую установку cloudera. Не удалось найти свойство 'yarn.nodemanager.container-monitor.resource-calculator.class'. Использование FairScheduler в качестве scheduler.class, если это помогает. Любая конкретная конфигурация должна указываться из 'yarn-site.xml' и' mapred-site.xml'? – PratPor

ответ

1

Если ваши входные данные находятся в 26 разбиениях, YARN создаст 26 карт для параллельной обработки этих расщеплений.

Если у вас есть 7 узлов с 2 Гб картографами на 26 расколов, передел должно быть что-то вроде:

  • Node1: 4 картостроители => 8 GB
  • NODE2: 4 картостроители => 8 Гб
  • node3: 4 картостроители => 8 Гб
  • Node4: 4 картографов => 8 Гб
  • Node5: 4 картографов => 8 Гб
  • Node6: 3 картостроители => 6 Гб
  • Node7: 3 картостроители => 6 GB
  • Итого: 26 картостроители => 52 GB

Таким образом, общий объем памяти, используемый в вашей карте сократить работу, если все картографы работают в то же время будет 26x2 = 52 ГБ. Возможно, если вы добавите пользователя памяти редуктором (-ами) и контейнером ApplicationMaster, вы можете достичь своего 59 ГБ в какой-то момент, как вы сказали.

Если это поведение, которое вы наблюдаете, и задание законченный после этих 26 карт, тогда нет ничего плохого. Вам нужно всего около 60 ГБ, чтобы выполнить свою работу, распространяя задачи на всех ваших узлах, не дожидаясь, пока контейнерные слоты освободятся. Другие бесплатные 60 ГБ просто ждут, потому что они вам не нужны. Увеличение размера кучи только для использования всей памяти не обязательно улучшит производительность.

Отредактировано:

Однако, если вы все еще есть много картографов, ожидающих быть запланировано, то, возможно, его потому, что ваша установка insconfigured для расчета распределения контейнеров с использованием vcores, а также. Это не по умолчанию в Apache Hadoop, но может быть настроен:

yarn.scheduler.capacity.resource-calculator: Реализация ResourceCalculator будет использоваться для сравнения ресурсов в планировщике. По умолчанию, например, org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator использует память, а DominantResourceCalculator использует Dominant-resource для сравнения многомерных ресурсов, таких как память, CPU и т. Д. Ожидается имя класса Java ResourceCalculator.

Поскольку вы определили yarn.nodemanager.resource.cpu-vcores по 4, и поскольку каждый преобразователь использует по умолчанию 1 vcore, вы можете запускать только 4 модуля на узел за раз.

В этом случае вы можете удвоить свое значение yarn.nodemanager.resource.cpu-vcores до 8. Его просто произвольное значение должно удвоить количество картографов.

+0

Эй. Спасибо за ответ. Я фактически выполняю работу sqoop для около 1.7 ТБ данных. Это много, и я отдаю около 2000 карточек для работы ('--m 2000'). Для выполнения задачи с текущей конфигурацией требуется до 1,5 - 2 часов, но при этом память остается неиспользованной на протяжении всего задания, так как одновременно может работать только 26 карт (с «2 ГБ»). Это явно создает впечатление, что он ограничен количеством доступных видеороликов. Я буду проверять больше и обновлять здесь, если найду какое-нибудь лучшее решение, чем увеличение памяти карты памяти до 4 ГБ. – PratPor

+0

Затем увеличьте yarn.nodemanager.resource.cpu-vcores до 8. Его просто произвольное значение вы можете удвоить его, если ваш калькулятор был действительно ограничен из-за процессора, он должен удвоить количество карточек – Nicomak

+0

Да, я пробовал это и его фактически работает, чтобы удвоить количество картографов. Запустил тестовое задание (pi) и обнаружил, что он ухудшает производительность работы, так как теперь на один основной ресурс совместного использования будет работать 2 mappers, а работа pi - больше вычислений, чем на основе памяти. Так что все, что я понял, это на самом деле компромисс здесь. Для заданий, не требующих большой памяти, мы можем увеличить счетчик карт (vcores), иначе его безопаснее просто увеличить память задачи карты до 4 ГБ. Спасибо за помощь. – PratPor