Учебники

Hadoop — многоузловой кластер

В этой главе описывается настройка многоузлового кластера Hadoop в распределенной среде.

Поскольку весь кластер не может быть продемонстрирован, мы объясняем кластерную среду Hadoop, используя три системы (одну ведущую и две подчиненные); ниже приведены их IP-адреса.

  • Hadoop Master: 192.168.1.15 (hadoop-master)
  • Hadoop Slave: 192.168.1.16 (hadoop-slave-1)
  • Hadoop Slave: 192.168.1.17 (hadoop-slave-2)

Выполните шаги, указанные ниже, чтобы настроить кластер Hadoop Multi-Node.

Установка Java

Java является основной предпосылкой для Hadoop. Прежде всего, вы должны проверить существование java в вашей системе, используя «java -version». Синтаксис команды версии Java приведен ниже.

$ java -version

Если все работает нормально, вы получите следующий вывод.

java version "1.7.0_71" 
Java(TM) SE Runtime Environment (build 1.7.0_71-b13) 
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)

Если Java не установлен в вашей системе, выполните следующие шаги для установки Java.

Шаг 1

Загрузите Java (JDK <последняя версия> — X64.tar.gz), перейдя по следующей ссылке www.oracle.com

Затем jdk-7u71-linux-x64.tar.gz будет загружен в вашу систему.

Шаг 2

Обычно вы найдете загруженный файл Java в папке Downloads. Проверьте его и извлеките файл jdk-7u71-linux-x64.gz, используя следующие команды.

$ cd Downloads/
$ ls
jdk-7u71-Linux-x64.gz

$ tar zxf jdk-7u71-Linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-Linux-x64.gz

Шаг 3

Чтобы сделать Java доступным для всех пользователей, вы должны переместить его в папку «/ usr / local /». Откройте корень и введите следующие команды.

$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit

Шаг 4

Для настройки переменных PATH и JAVA_HOME добавьте следующие команды в файл ~ / .bashrc .

export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=PATH:$JAVA_HOME/bin

Теперь проверьте команду java -version из терминала, как описано выше. Выполните описанный выше процесс и установите Java на всех узлах вашего кластера.

Создание учетной записи пользователя

Создайте системную учетную запись пользователя в главной и подчиненной системах, чтобы использовать установку Hadoop.

# useradd hadoop 
# passwd hadoop

Картирование узлов

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

# vi /etc/hosts
enter the following lines in the /etc/hosts file.

192.168.1.109 hadoop-master 
192.168.1.145 hadoop-slave-1 
192.168.56.1 hadoop-slave-2

Настройка входа на основе ключа

Настройте ssh на каждом узле так, чтобы они могли общаться друг с другом без запроса пароля.

# su hadoop 
$ ssh-keygen -t rsa 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tutorialspoint@hadoop-master 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp1@hadoop-slave-1 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp2@hadoop-slave-2 
$ chmod 0600 ~/.ssh/authorized_keys 
$ exit

Установка Hadoop

На главном сервере загрузите и установите Hadoop, используя следующие команды.

# mkdir /opt/hadoop 
# cd /opt/hadoop/ 
# wget http://apache.mesi.com.ar/hadoop/common/hadoop-1.2.1/hadoop-1.2.0.tar.gz 
# tar -xzf hadoop-1.2.0.tar.gz 
# mv hadoop-1.2.0 hadoop
# chown -R hadoop /opt/hadoop 
# cd /opt/hadoop/hadoop/

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

Вы должны настроить сервер Hadoop, внеся следующие изменения, как указано ниже.

ядро-site.xml

Откройте файл core-site.xml и отредактируйте его, как показано ниже.

<configuration>
   <property> 
      <name>fs.default.name</name> 
      <value>hdfs://hadoop-master:9000/</value> 
   </property> 
   <property> 
      <name>dfs.permissions</name> 
      <value>false</value> 
   </property> 
</configuration>

HDFS-site.xml

Откройте файл hdfs-site.xml и отредактируйте его, как показано ниже.

<configuration>
   <property> 
      <name>dfs.data.dir</name> 
      <value>/opt/hadoop/hadoop/dfs/name/data</value> 
      <final>true</final> 
   </property> 

   <property> 
      <name>dfs.name.dir</name> 
      <value>/opt/hadoop/hadoop/dfs/name</value> 
      <final>true</final> 
   </property> 

   <property> 
      <name>dfs.replication</name> 
      <value>1</value> 
   </property> 
</configuration>

mapred-site.xml

Откройте файл mapred-site.xml и отредактируйте его, как показано ниже.

<configuration>
   <property> 
      <name>mapred.job.tracker</name> 
      <value>hadoop-master:9001</value> 
   </property> 
</configuration>

hadoop-env.sh

Откройте файл hadoop-env.sh и отредактируйте JAVA_HOME, HADOOP_CONF_DIR и HADOOP_OPTS, как показано ниже.

Примечание. Установите JAVA_HOME в соответствии с конфигурацией вашей системы.

export JAVA_HOME=/opt/jdk1.7.0_17
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
export HADOOP_CONF_DIR=/opt/hadoop/hadoop/conf

Установка Hadoop на подчиненные серверы

Установите Hadoop на всех подчиненных серверах, следуя приведенным командам.

# su hadoop 
$ cd /opt/hadoop 
$ scp -r hadoop hadoop-slave-1:/opt/hadoop 
$ scp -r hadoop hadoop-slave-2:/opt/hadoop

Настройка Hadoop на главном сервере

Откройте главный сервер и настройте его, следуя приведенным командам.

# su hadoop 
$ cd /opt/hadoop/hadoop

Настройка главного узла

$ vi etc/hadoop/masters

hadoop-master

Конфигурирование подчиненного узла

$ vi etc/hadoop/slaves

hadoop-slave-1 
hadoop-slave-2

Узел имени формата в Hadoop Master

# su hadoop 
$ cd /opt/hadoop/hadoop 
$ bin/hadoop namenode –format
11/10/14 10:58:07 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************ 
STARTUP_MSG: Starting NameNode 
STARTUP_MSG: host = hadoop-master/192.168.1.109 
STARTUP_MSG: args = [-format] 
STARTUP_MSG: version = 1.2.0 
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1479473;
compiled by 'hortonfo' on Mon May 6 06:59:37 UTC 2013 
STARTUP_MSG: java = 1.7.0_71 

************************************************************/
11/10/14 10:58:08 INFO util.GSet: Computing capacity for map BlocksMap
editlog=/opt/hadoop/hadoop/dfs/name/current/edits
………………………………………………….
………………………………………………….
…………………………………………………. 
11/10/14 10:58:08 INFO common.Storage: Storage directory 
/opt/hadoop/hadoop/dfs/name has been successfully formatted.
11/10/14 10:58:08 INFO namenode.NameNode: 
SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop-master/192.168.1.15
************************************************************/

Запуск сервисов Hadoop

Следующая команда запускает все службы Hadoop на Hadoop-Master.

$ cd $HADOOP_HOME/sbin
$ start-all.sh

Добавление нового узла данных в кластер Hadoop

Ниже приведены шаги, которые необходимо выполнить для добавления новых узлов в кластер Hadoop.

сетей

Добавьте новые узлы в существующий кластер Hadoop с соответствующей конфигурацией сети. Предположим следующую конфигурацию сети.

Для новой конфигурации узла —

IP address : 192.168.1.103 
netmask : 255.255.255.0
hostname : slave3.in

Добавление пользователя и доступа по SSH

Добавить пользователя

На новом узле добавьте пользователя «hadoop» и установите пароль пользователя Hadoop на «hadoop123» или любой другой, используя следующие команды.

useradd hadoop
passwd hadoop

Установить пароль меньше подключения от ведущего к новому ведомому.

Выполните следующее на мастере

mkdir -p $HOME/.ssh 
chmod 700 $HOME/.ssh 
ssh-keygen -t rsa -P '' -f $HOME/.ssh/id_rsa 
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys 
chmod 644 $HOME/.ssh/authorized_keys
Copy the public key to new slave node in hadoop user $HOME directory
scp $HOME/.ssh/id_rsa.pub [email protected]:/home/hadoop/

Выполните следующее на рабах

Войдите в hadoop. Если нет, войдите в систему пользователя hadoop.

su hadoop ssh -X [email protected]

Скопируйте содержимое открытого ключа в файл «$ HOME / .ssh / authorized_keys», а затем измените разрешение на него, выполнив следующие команды.

cd $HOME
mkdir -p $HOME/.ssh 
chmod 700 $HOME/.ssh
cat id_rsa.pub >>$HOME/.ssh/authorized_keys 
chmod 644 $HOME/.ssh/authorized_keys

Проверьте логин SSH с главного компьютера. Теперь проверьте, можете ли вы использовать ssh для нового узла без пароля от мастера.

ssh [email protected] or hadoop@slave3

Установить имя хоста нового узла

Вы можете установить имя хоста в файле / etc / sysconfig / network

On new slave3 machine

NETWORKING = yes 
HOSTNAME = slave3.in

Чтобы изменения вступили в силу, либо перезапустите компьютер, либо выполните команду hostname на новом компьютере с соответствующим именем хоста (хороший вариант — перезагрузка).

На узле slave3 —

имя хоста slave3.in

Обновите / etc / hosts на всех машинах кластера следующими строками —

192.168.1.102 slave3.in slave3

Теперь попробуйте пропинговать компьютер с именами хостов, чтобы проверить, разрешается ли он по IP или нет.

На новом узле машины —

ping master.in

Запустите DataNode на новом узле

Запустите демон datanode вручную, используя скрипт $ HADOOP_HOME / bin / hadoop-daemon.sh . Он автоматически свяжется с мастером (NameNode) и присоединится к кластеру. Мы также должны добавить новый узел в файл conf / slaves на главном сервере. Команды на основе скриптов распознают новый узел.

Войти в новый узел

su hadoop or ssh -X [email protected]

Запустите HDFS на вновь добавленном подчиненном узле, используя следующую команду

./bin/hadoop-daemon.sh start datanode

Проверьте вывод команды jps на новом узле. Это выглядит следующим образом.

$ jps
7141 DataNode
10312 Jps

Удаление DataNode из кластера Hadoop

Мы можем удалить узел из кластера на лету, пока он работает, без потери данных. HDFS предоставляет функцию вывода из эксплуатации, которая обеспечивает безопасное удаление узла. Чтобы использовать его, выполните следующие действия:

Шаг 1 — Войдите в мастер

Авторизуйтесь на главном компьютере пользователя, на котором установлен Hadoop.

$ su hadoop

Шаг 2 — Изменить конфигурацию кластера

Файл исключения должен быть настроен перед запуском кластера. Добавьте ключ с именем dfs.hosts.exclude в наш файл $ HADOOP_HOME / etc / hadoop / hdfs-site.xml . Значение, связанное с этим ключом, предоставляет полный путь к файлу в локальной файловой системе NameNode, который содержит список компьютеров, которым не разрешено подключаться к HDFS.

Например, добавьте эти строки в файл etc / hadoop / hdfs-site.xml .

<property> 
   <name>dfs.hosts.exclude</name> 
   <value>/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt</value> 
   <description>DFS exclude</description> 
</property>

Шаг 3 — Определите хосты для вывода из эксплуатации

Каждая машина, подлежащая выводу из эксплуатации, должна быть добавлена ​​в файл, идентифицируемый как hdfs_exclude.txt, по одному доменному имени на строку. Это предотвратит их подключение к NameNode. Содержимое файла «/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt» показано ниже, если вы хотите удалить DataNode2.

slave2.in

Шаг 4 — принудительная перезагрузка конфигурации

Запустите команду «$ HADOOP_HOME / bin / hadoop dfsadmin -refreshNodes» без кавычек.

$ $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes

Это заставит NameNode перечитать свою конфигурацию, включая недавно обновленный файл «exclude». Он будет выводить из эксплуатации узлы в течение определенного периода времени, позволяя реплицировать блоки каждого узла на машины, которые по расписанию должны оставаться активными.

На slave2.in проверьте вывод команды jps. Через некоторое время вы увидите, что процесс DataNode автоматически отключается.

Шаг 5 — Отключение узлов

После завершения процесса вывода из эксплуатации выведенное из эксплуатации оборудование можно безопасно отключить для проведения технического обслуживания. Запустите команду report для dfsadmin, чтобы проверить состояние вывода из эксплуатации. Следующая команда опишет состояние узла вывода из эксплуатации и подключенных узлов к кластеру.

$ $HADOOP_HOME/bin/hadoop dfsadmin -report

Шаг 6 — Правка исключает файл снова

После списания машин их можно удалить из файла «исключает». Повторный запуск $ HADOOP_HOME / bin / hadoop dfsadmin -refreshNodes снова считывает исключаемый файл обратно в NameNode; предоставление возможности узлам данных присоединяться к кластеру после завершения обслуживания, или снова требуется дополнительная емкость в кластере и т. д.

Специальное примечание. Если вышеуказанный процесс выполняется, а процесс TaskTracker все еще выполняется на узле, его необходимо отключить. Один из способов — отключить машину, как мы делали на предыдущих этапах. Мастер распознает процесс автоматически и объявит его мертвым. Нет необходимости следовать одному и тому же процессу для удаления треккера задач, потому что это НЕ очень важно по сравнению с DataNode. DataNode содержит данные, которые вы хотите безопасно удалить без потери данных.

Tasktracker может быть запущен / выключен на лету с помощью следующей команды в любой момент времени.