Статьи

Настройка Apache Hadoop Multi — Node Cluster

Мы делимся своим опытом об установке Apache Hadoop на компьютерах под управлением Linux (Multi-Node). Здесь мы также поделимся опытом по устранению неисправностей и сделаем обновление в будущем.

Шаг создания пользователя и других настроек —

  • Мы начнем с добавления выделенного пользователя системы Hadoop в каждый кластер.
1
2
$ sudo addgroup hadoop
$ sudo adduser –ingroup hadoop hduser
  • Затем мы настраиваем SSH (Secure Shell) на всем кластере, чтобы обеспечить безопасный обмен данными.
1
2
user@node1:~$ su – hduser
hduser@node1:~$ ssh-keygen -t rsa -P “”

Вывод будет примерно таким:

1
2
3
4
5
6
7
8
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hduser/.ssh/id_rsa):
Created directory '/home/hduser/.ssh'.
Your identification has been saved in /home/hduser/.ssh/id_rsa.
Your public key has been saved in /home/hduser/.ssh/id_rsa.pub.
The key fingerprint is:
9b:82:ea:58:b4:e0:35:d7:ff:19:66:a6:ef:ae:0e:d2 hduser@ubuntu
.....
  • Далее нам нужно включить SSH-доступ к локальной машине с помощью этого вновь созданного ключа:
1
hduser@node1:~$ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

Повторите вышеупомянутые шаги во всех узлах кластера и протестируйте, выполнив следующую инструкцию

1
hduser@node1:~$ ssh localhost

Этот шаг также необходим для сохранения отпечатка ключа хоста локального компьютера в файле known_hosts пользователя hduser.

Далее нам нужно отредактировать файл / etc / hosts, в который мы поместили IP-адреса и имена каждой системы в кластере.

В нашем сценарии у нас есть один ведущий (с IP 192.168.0.100) и один ведомый (с IP 192.168.0.101)

1
$ sudo vi /etc/hosts

и мы помещаем значения в файл хоста как пару ключ-значение.

1
2
192.168.0.100 master
192.168.0.101 slave
  • Предоставление доступа по SSH

Пользователь hduser на главном узле должен иметь возможность подключения

    1. в свою собственную учетную запись на ведущем через ssh master в этом контексте не обязательно ssh localhost.
    2. на учетную запись hduser подчиненного (-ых) через пароль без пароля SSH.

Таким образом, мы раздаем открытый ключ SSH hduser @ master всем подчиненным (в нашем случае у нас только один подчиненный. Если вам нужно выполнить больше, выполните следующую инструкцию, изменяя имя машины, т.е. slave, slave1, slave2).

1
hduser@master:~$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub hduser@slave

Попробуйте подключить master к master и master к slave (s) и проверить, все ли в порядке.

Конфигурирование Hadoop

  • Давайте отредактируем conf / masters (только в узле master)

и мы вводим мастер в файл.

Делая это, мы сказали Hadoop, что запускаем Namenode и вторичные NameNodes в нашем многоузловом кластере на этой машине.

Основной NameNode и JobTracker всегда будут на компьютере, на котором мы запускаем bin / start-dfs.sh и bin / start-mapred.sh .

  • Давайте теперь отредактируем conf / slaves (только в узле master)
1
2
master
slave

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

если у нас есть больше подчиненных, то добавьте один хост в строку, как показано ниже:

1
2
3
4
master
slave
slave2
slave3

и т.д….

Теперь давайте отредактируем два важных файла ( во всех узлах нашего кластера):

  1. конф / ядро-site.xml
  2. конф / ядро-hdfs.xml

1) conf / core-site.xml

Мы должны изменить параметр fs.default.para, который указывает имя узла и порт. (В нашем случае это мастер машины)

1
2
3
4
5
6
7
8
<property>
 
<name>fs.default.name</name>
<value>hdfs://master:54310</value>
 
…..[Other XML Values]
 
</property>

Создайте каталог, в который Hadoop будет хранить свои данные —

1
$ mkdir /app/hadoop

Мы должны убедиться, что каталог доступен для записи любому пользователю:

1
$ chmod 777 /app/hadoop

Измените core-site.xml еще раз, чтобы добавить следующее свойство:

1
2
3
4
<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop</value>
</property>

2) conf / core-hdfs.xml

Мы должны изменить параметр dfs.replication, который указывает репликацию блоков по умолчанию. Он определяет, на сколько машин должен быть реплицирован один файл, прежде чем он станет доступным. Если мы установим это значение выше, чем количество доступных подчиненных узлов (точнее, число узлов данных), мы начнем видеть много ошибок типа «(Обнаружено нулевое количество целей, запрещено1.size = 1)» в журнале. файлы.

Значение по умолчанию для dfs.replication равно 3. Однако, поскольку у нас есть только два доступных узла (в нашем сценарии), поэтому мы установили для dfs.replication значение 2.

1
2
3
4
5
<property>
<name>dfs.replication</name>
<value>2</value>
…..[Other XML Values]
</property>
  • Давайте отформатируем файловую систему HDFS через NameNode.

Запустите следующую команду на master

1
bin/hadoop namenode -format
  • Давайте запустим многоузловой кластер:

Запустите команду: (в нашем случае мы будем работать на компьютере с именем master)

1
bin/start-dfs.sh

Проверка статуса Hadoop —

После того, как все началось, запустите команду jps на всех узлах, чтобы убедиться, что все работает нормально или нет.

В главном узле желаемый результат будет —

1
2
3
4
5
6
$ jps
 
14799 NameNode
15314 Jps
14880 DataNode
14977 SecondaryNameNode

В раб (ы):

1
2
3
$ jps
15314 Jps
14880 DataNode

Конечно, идентификаторы процессов могут отличаться от машины к машине.

Поиск проблемы

Вполне возможно, что Datanode может начать работу не во всех наших узлах. На данный момент, если мы видим

1
logs/hadoop-hduser-datanode-.log

на произведенных узлах за исключением —

1
java.io.IOException: Incompatible namespaceIDs

В этом случае нам нужно сделать следующее —

  1. Остановите полный кластер, то есть слои MapReduce и HDFS.
  2. Удалите каталог данных на проблемном узле данных: этот каталог указан dfs.data.dir в файле conf / hdfs-site.xml. В нашем случае соответствующий каталог / app / hadoop / tmp / dfs / data
  3. Переформатируйте NameNode. Все данные HDFS будут потеряны во время обработки формата.
  4. Перезагрузите кластер.

Или же

Мы можем вручную обновить namespaceID проблемных узлов данных:

  1. Остановите проблемный DataNode.
  2. Отредактируйте значение namespaceID в $ {dfs.data.dir} / current / VERSION, чтобы сопоставить соответствующее значение текущего NameNode в $ {dfs.name.dir} / current / VERSION.
  3. Перезапустите фиксированные DataNode.

В разделе Работа с Map-Reduce в Apache Hadoop (Multinode Cluster) мы поделимся своим опытом работы с Map Reduce Job в соответствии с примером Apache Hadoop.

Ресурсы

Справка: Настройка многоузлового кластера Apache Hadoop от нашего партнера по JCG Пияса Де в блоге Phlox Blog .