В этой главе описывается настройка многоузлового кластера 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 может быть запущен / выключен на лету с помощью следующей команды в любой момент времени.