плохое планирование задач в Hadoop

Я запускаю некоторые задачи по уменьшению карты на хаупе. Mapper используется для генерации данных и, следовательно, не зависит от размещения блока hdfs. Для тестирования моей системы я использую 2 узла и один главный узел. Я провожу тестирование на hadoop-2.0 с пряжей.

Есть что-то очень неудобное, что я нахожу с hadoop. Я настроил его для запуска 8 задач карт. К сожалению, Hadoop запускает все 8 задач карты на одном узле, а другой узел почти идеален. Там 4 редуктора, и это тоже не балансирует эти редукторы. Это действительно приводит к плохой производительности, когда это происходит.

У меня есть эти свойства, установленные в mapred-site.xml как в средстве отслеживания вакансий, так и в средстве отслеживания задач.

 <property>
    <name>mapreduce.tasktracker.map.tasks.maximum</name>
    <value>2</value>
  </property>
  <property>
    <name>mapreduce.tasktracker.reduce.tasks.maximum</name>
    <value>2</value>
  </property>

Может кто-нибудь объяснить, можно ли решить эту проблему или почему такая проблема существует с hadoop?


person 0xhacker    schedule 07.02.2014    source источник
comment
можете ли вы рассказать больше о генерации данных и, следовательно, не зависит от размещения блока hdfs. понять источник данных для задания?   -  person rVr    schedule 07.02.2014
comment
В основном это похоже на генератор случайного текста в Hadoop, где картографы генерируют случайные данные. Для этого вам действительно не нужен источник входных данных.   -  person 0xhacker    schedule 08.02.2014


Ответы (1)


Не думайте о преобразователях/редьюсерах как о серверах один к одному. Похоже, что ваша система знает, что нагрузка настолько мала, что нет необходимости запускать редьюсеры в кластере. Он пытается избежать сетевых издержек при передаче файлов от главного узла к подчиненному.

Думайте о количестве преобразователей и редьюсеров как о том, сколько одновременных потоков вы позволите запускать в своем кластере. Это важно при определении того, сколько памяти выделить для каждого преобразователя/редуктора.

Чтобы добиться равномерного распределения, вы можете попробовать выделить достаточно памяти для каждого преобразователя/редуктора, чтобы для него требовался целый узел. Например, 4 узла, 8 мапперов. Заставьте каждого картографа иметь 50% оперативной памяти на каждом узле. Не уверен, что это будет работать так, как ожидалось, но на самом деле балансировка нагрузки Hadoop сама по себе является чем-то хорошим в теории, но может показаться, что это не так для ситуаций с небольшими данными.

person Dan Ciborowski - MSFT    schedule 07.02.2014