Я пробую небольшую настройку hadoop (для экспериментов) всего с двумя машинами. Я загружаю около 13 ГБ данных, таблицу примерно из 39 миллионов строк с коэффициентом репликации 1, используя Hive. Моя проблема в том, что hadoop всегда хранит все эти данные на одном узле данных. Только если я изменю dfs_replication fatcor на 2 с помощью setrep, hadoop копирует данные на другой узел. Я также попробовал балансировщик ($ HADOOP_HOME / bin / start-balancer.sh -threshold 0). Балансировщик распознает, что ему необходимо переместить около 5 ГБ для балансировки. Но говорит: «Ни один блок нельзя переместить. Выход ...» и уходит.
2010-07-05 08: 27: 54,974 INFO org.apache.hadoop.hdfs.server.balancer.Balancer: с использованием порога 0,0 2010-07-05 08: 27: 56,995 INFO org.apache.hadoop.net.NetworkTopology : Добавление нового узла: /default-rack/10.252.130.177:1036 2010-07-05 08: 27: 56,995 ИНФОРМАЦИЯ org.apache.hadoop.net.NetworkTopology: Добавление нового узла: /default-rack/10.220.222.64 : 1036 2010-07-05 08: 27: 56,996 ИНФОРМАЦИЯ org.apache.hadoop.hdfs.server.balancer.Balancer: 1 перегруженные узлы: 10.220.222.64:1036 05.07.2010 08: 27: 56,996 ИНФОРМАЦИЯ орг. apache.hadoop.hdfs.server.balancer.Balancer: 1 недостаточно используемых узлов: 10.252.130.177:1036 2010-07-05 08: 27: 56,997 INFO org.apache.hadoop.hdfs.server.balancer.Balancer: необходимо переместить 5,42 ГБ байта для балансировки кластера.
Итерация метки времени # Перемещение уже перемещенных байтов Осталось переместить перемещаемых байтов Перемещение блоков невозможно. Выход ... Балансировка заняла 2,222 секунды
Может ли кто-нибудь подсказать, как добиться равномерного распределения данных в HADoop без репликации?
В hadoop есть несколько вещей, которые могут вам помочь:
а) первая копия блока всегда записывается на локальный узел для процессов, запущенных внутри кластера. Дополнительные реплики сделаны в другом месте.
б) hadoop предназначен для большого количества узлов. Вот почему репликация по умолчанию - 3. В небольших кластерах существует множество потенциальных зависаний. Если есть возможность, попробуйте поработать с кластером не менее 5-10 узлов, даже для тестирования.
На основании (а) я бы порекомендовал запустить куст на узле вне вашего кластера.
Возможно, это не самый оптимизированный способ сделать это, но вот как я это сделаю, если моя задача заключается в распределении данных с одного узла данных на несколько узлов данных.
Загрузите данные так же, как вы загрузили, а затем запустите средство сопоставления отступов с несколькими редукторами (около четырех должно помочь). Поскольку у вас есть 2 узла данных (и я предполагаю, что 2 средства отслеживания задач), оба средства отслеживания задач будут использоваться для запуска задания и в конечном итоге будут распределять данные.