В части 1 мы успешно создали, запустили и подключились к инстансам Amazon Ubuntu. В части 2 я покажу, как установить и настроить кластер Hadoop. Если вы видите эту страницу в первый раз, я настоятельно рекомендую вам перейти к части 1.
В этой статье
- HadoopNameNode будет называться master ,
- HadoopSecondaryNameNode будет называться SecondaryNameNode или SNN.
- HadoopSlave1 и HadoopSlave2 будут именоваться , как рабы (где узлы данных будут располагаться)
Итак, начнем.
1. Установка Apache Hadoop и настройка кластера
1.1 Обновите пакеты и зависимости.
Давайте обновим пакеты, начну с master, повторите это для SNN и 2 slave.
$ sudo apt-get update
После его завершения, давайте установим Java
1.2 Установите Java
Добавьте следующий PPA и установите последнюю версию Oracle Java (JDK) 7 в Ubuntu
$ sudo add-apt-repository ppa: webupd8team / java
$ sudo apt-get update && sudo apt-get install oracle-jdk7-installer
Проверьте, использует ли Ubuntu JDK 7
Повторите это для SNN и 2 рабов.
1.3 Скачать Hadoop
Я собираюсь использовать стабильную версию HADDOP 1.2.1 со страницы загрузки Apache, и вот зеркало 1.2.1
выдать команду wget из оболочки
$ wget http://apache.mirror.gtcomm.net/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz
Разархивируйте файлы и просмотрите содержимое пакета и файлы конфигурации.
$ tar -xzvf hadoop-1.2.1.tar.gz
Для простоты переименуйте каталог ‘hadoop-1.2.1’ в ‘hadoop’ для простоты эксплуатации и обслуживания.
$ mv hadoop-1.2.1 hadoop
1.4 Переменная среды установки
Переменная среды установки для пользователя ‘ubuntu’
Обновите файл .bashrc, чтобы добавить важные пути и каталоги Hadoop.
Перейдите в домашний каталог
$ кд
Откройте файл .bashrc в vi edito
$ vi .bashrc
Добавить следующее в конце файла
export HADOOP_CONF = / home / ubuntu / hadoop / conf
export HADOOP_PREFIX = / home / ubuntu / hadoop
# Установить JAVA_HOME
экспорт JAVA_HOME = / usr / lib / jvm / java-7-oracle
# Добавить Hadoop bin / каталог в путь
экспорта PATH = $ PATH: $ HADOOP_PREFIX / bin
Сохранить и выйти.
Чтобы проверить, правильно ли он был обновлен, перезагрузите профиль bash, используйте следующие команды
источник ~ / .bashrc
echo $ HADOOP_PREFIX
echo $ HADOOP_CONF
1.5 Настройка SSH без пароля на серверах
Главный сервер удаленно запускает службы на подчиненных узлах, что требует доступа без пароля к подчиненным серверам. Сервер AWS Ubuntu поставляется с предустановленным сервером OpenSSh.
Быстрое примечание:
Открытая часть ключа, загруженного в агент, должна быть помещена в целевую систему в ~ / .ssh / authorized_keys. Об этом позаботился процесс создания сервера AWS
Теперь нам нужно добавить идентификатор пары ключей AWS EC2 haddopec2cluster.pem в профиль SSH. Для этого нам понадобятся следующие утилиты ssh
- ‘ssh-agent’ — это фоновая программа, которая обрабатывает пароли для закрытых ключей SSH.
- Команда ssh-add запрашивает у пользователя пароль закрытого ключа и добавляет его в список, поддерживаемый ssh-agent. После того, как вы добавите пароль в ssh-agent, вас не попросят предоставить ключ при использовании SSH или SCP для подключения к хостам с вашим открытым ключом.
Amazon EC2 Instance уже позаботился о «author_keys» на главном сервере, выполните следующие команды, чтобы разрешить SSH-доступ без пароля к подчиненным серверам.
Прежде всего нам нужно защитить наши файлы пар ключей, если права доступа к файлам слишком открыты (см. Ниже), вы получите ошибку
Чтобы решить эту проблему, нам нужно выполнить следующие команды
$ chmod 644 авторизованных ключа
Совет: если вы установите права доступа ‘chmod 644’, вы получите файл, который вы можете записать сами, но только для остального мира.
$ chmod 400 haddoec2cluster.pem
Совет : chmod 400 — очень строгая настройка, предоставляющая только файл с доступом только для чтения. Никаких возможностей записи / выполнения для владельца и никаких разрешений ни для кого другого.
Для использования ssh-agent
и ssh-add
выполните следующие действия:
- В командной строке Unix введите: eval `ssh-agent` Примечание: убедитесь, что вы используете backquote (
`
), расположенную под тильдой (~
), а не одинарную кавычку ('
). - Введите команду: ssh-add hadoopec2cluster.pem
Если вы заметили, что файл .pem теперь имеет разрешение «только для чтения», и на этот раз он работает для нас.
Имейте в виду, что сессия ssh будет потеряна при выходе из оболочки, и у вас будут повторные команды ssh-agent и ssh-add.
Удаленный SSH
Давайте проверим, что мы можем подключиться к SNN и подчиненным узлам от мастера
$ ssh ubuntu @ <your-amazon-ec2-public URL>
При успешном входе в систему IP-адрес на оболочке изменится.
1.6 Настройка кластера Hadoop
В этом разделе описывается конфигурация кластера hadoop. Мы должны будем изменить
- hadoop-env.sh — Этот файл содержит некоторые настройки переменных среды, используемые Hadoop. Вы можете использовать их, чтобы повлиять на некоторые аспекты поведения демона Hadoop, такие как, где хранятся файлы журнала, максимальный объем используемой кучи и т. Д. Единственная переменная, которую вам нужно изменить на этом этапе, находится в этом файле — JAVA_HOME, который определяет путь к установке Java 1.7.x, используемой Hadoop.
- core-site.xml — ключевое свойство fs.default.name — для настройки namenode, например, hdfs: //
namenode
/ - hdfs-site.xml — свойство ключа — dfs.replication — по умолчанию 3
- mapred-site.xml — ключевое свойство mapred.job.tracker для конфигурации Jobtracker, например
jobtracker
: 8021
Сначала мы начнем с master (NameNode), а затем скопируем указанные выше изменения xml в оставшиеся 3 узла (SNN и slave).
Наконец, в разделе 1.6.2 нам нужно будет настроить conf / master и conf / slaves.
- masters — определяет, на каких машинах Hadoop будет запускать вторичные NameNodes в нашем многоузловом кластере.
- slaves — определяет списки хостов, по одному на строку, где будут запускаться подчиненные демоны Hadoop (датододы и треккеры).
Давайте пройдемся по одному. Начните с мастеров (наменоде).
hadoop-env.sh
$ vi $ HADOOP_CONF / hadoop-env.sh и добавьте JAVA_HOME, показанный ниже, и сохраните изменения.
ядро-site.xml
Этот файл содержит параметры конфигурации для Hadoop Core (например, для ввода-вывода), общие для HDFS, и свойство конфигурации файловой системы MapReduce Default. Fs.default.name указывается здесь, например, для hdfs / s3, который будет использоваться клиентами.
$ sudo $ HADOOP_CONF / core-site.xml
Мы собираемся добавить два свойства
- fs.default.name будет указывать на URL-адрес и порт NameNode (обычно 8020)
- hadoop.tmp.dir — База для других временных каталогов. Важно отметить, что каждому узлу нужен каталог hadoop tmp. Я собираюсь создать новый каталог «hdfstmp», как показано ниже, во всех 4 узлах. В идеале вы можете написать сценарий оболочки, чтобы сделать это для вас, но пока идем ручным способом.
$ cd
$ mkdir hdfstmp
Совет: некоторые важные каталоги: dfs.name.dir, dfs.data.dir в hdfs-site.xml. Значение по умолчанию для dfs.name.dir
is ${hadoop.tmp.dir}/dfs/data
и dfs.data.dir
is ${hadoop.tmp.dir}/dfs/data
. Крайне важно, чтобы вы правильно выбрали местоположение каталога в производственной среде.
<configuration> <property> <name>fs.default.name</name> <value>hdfs://ec2-54-209-221-112.compute-1.amazonaws.com:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/ubuntu/hdfstmp</value> </property> </configuration>
HDFS-site.xml
Этот файл содержит конфигурацию для демонов HDFS, NameNode, SecondaryNameNode и узлов данных.
Мы собираемся добавить 2 свойства
- dfs.permissions.enabled со значением false. Это означает, что любой пользователь, а не только пользователь «hdfs», может делать с HDFS все, что он хочет, поэтому не делайте этого в рабочей среде, если у вас нет веских причин. если «true», включите проверку разрешений в HDFS. Если «false», проверка прав доступа отключена, но все остальное поведение не изменяется. Переключение с одного значения параметра на другое не меняет режим, владельца или группу файлов или каталогов. Будьте очень осторожны, прежде чем установить это
- dfs.replication — по умолчанию для блока репликации задано 3. Фактическое количество репликаций может быть указано при создании файла. По умолчанию используется, если репликация не указана во время создания. Поскольку у нас есть 2 подчиненных узла, мы установим это значение на 2.
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
mapred-site.xml
Этот файл содержит параметры конфигурации для демонов MapReduce; трекер работы и трекеры задач.
Параметр mapred.job.tracker — это имя хоста (или IP-адрес) и пара портов, по которым Job Tracker прослушивает соединение RPC. Этот параметр указывает местоположение отслеживания заданий для клиентов отслеживания заданий и MapReduce.
JobTracker будет работать на главном сервере (NameNode)
<configuration> <property> <name>mapred.job.tracker</name> <value>hdfs://ec2-54-209-221-112.compute-1.amazonaws.com:8021</value> </property> </configuration>
1.6.1 Переместить файлы конфигурации в подчиненные
Теперь мы закончили с мастером настройки файлов hadoop xml, давайте скопируем файлы на оставшиеся 3 узла, используя безопасное копирование (scp)
начните с SNN, если вы начинаете новый сеанс, следуйте ssh-add согласно разделу 1.5
из командной строки unix выпуска мастера под командой
$ scp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml [email protected]: / home / ubuntu / hadoop / conf
повторите это для подчиненных узлов
1.6.2 Настройка главного и подчиненного
Каждый дистрибутив hadoop поставляется с основными и подчиненными файлами. По умолчанию он содержит одну запись для localhost, мы должны изменить эти 2 файла на машинах «master» (HadoopNameNode) и «slave» (HadoopSlave1 и HadoopSlave2) — у нас есть выделенный компьютер для HadoopSecondaryNamdeNode.
1.6.3 Изменение файла мастера на главной машине
conf/masters
Файл определяет, на каких машинах Hadoop запускает вторичные NameNodes в нашем многоузловом кластере. В нашем случае будет две машины HadoopNameNode и HadoopSecondaryNameNode
Руководство пользователя Hadoop HDFS : «Вторичный NameNode периодически объединяет файлы fsimage и файлы редактирования и сохраняет размер журнала изменений в пределах лимита. Обычно он запускается на другом компьютере, чем основной NameNode, поскольку его требования к памяти находятся в том же порядке, что и основной NameNode. Вторичный NameNode запускается с помощью «bin / start-dfs.sh» на узлах, указанных в файле «conf / masters». «
$ vi $ HADOOP_CONF / masters и укажите запись для хост-имени, где вы хотите запустить демон SecondaryNameNode. В нашем случае HadoopNameNode и HadoopSecondaryNameNode
1.6.4 Изменить файл ведомых на главном компьютере
Файл slaves используется для запуска DataNodes и TaskTrackers
$ vi $ HADOOP_CONF / slaves
1.6.5 Копирование мастеров и подчиненных в SecondaryNameNode
Поскольку конфигурация SecondayNameNode будет такой же, как и NameNode, нам нужно скопировать master и slave в HadoopSecondaryNameNode.
1.6.7 Настройка главного и подчиненного на узле «Ведомые»
Поскольку мы настраиваем подчиненные (HadoopSlave1 и HadoopSlave2), файл master на подчиненном компьютере будет пустым
$ vi $ HADOOP_CONF / мастера
Затем обновите файл «ведомые» на подчиненном сервере (HadoopSlave1), указав IP-адрес подчиненного узла. Обратите внимание, что файл «ведомых» на подчиненном узле содержит только собственный IP-адрес, а не любой другой узел данных в кластере.
$ vi $ HADOOP_CONF / slaves
Аналогичным образом обновите мастеров и рабов для HadoopSlave2
1.7 Запуск Hadoop Daemon
Первым шагом к запуску установки Hadoop является форматирование файловой системы Hadoop, которая работает поверх вашей, которая реализована поверх локальной файловой системы вашего кластера. Это необходимо сделать при первой установке Hadoop. Не форматируйте работающую файловую систему Hadoop, это приведет к удалению всех ваших данных.
Форматировать наменоде
$ hadoop namenode format
Позволяет запустить все демоны hadoop из HadoopNameNode
$ cd $ HADOOP_CONF
$ start-all.sh
Это начнется
- Демоны NameNode, JobTracker и SecondaryNameNode в HadoopNameNode
- Демоны SecondaryNameNode в HadoopSecondaryNameNode
- и демоны DataNode и TaskTracker на подчиненных узлах HadoopSlave1 и HadoopSlave2
Мы можем проверить статус namenode с http: // ec2-54-209-221-112.compute-1.amazonaws.com : 50070 / dfshealth.jsp
Проверьте статус Jobtracker: http: // ec2-54-209-221-112.compute-1.amazonaws.com : 50030 / jobtracker.jsp
Состояние подчиненного узла для HadoopSlave1: http: // ec2-54-209-223-7.compute-1.amazonaws.com : 50060 / tasktracker.jsp
Состояние подчиненного узла для HadoopSlave2: http: //
ec2-54-209-219-2.compute-1.amazonaws.com : 50060 / tasktracker.jsp
Чтобы быстро проверить наши настройки, запустите пример hadoop pi
ubuntu @ ec2-54-209-221-112: ~ / hadoop $ hadoop jar hadoop-examples-1.2.1.jar pi 10 1000000
Написал вход для карты № 0
Написал вход для карты № 1
Написал вход для карты № 2
Написал вход для карты № 3
Написал вход для карты № 4
Написал вход для карты № 5
Написал вход для карты № 6
Написал вход для карты № 7
Написал вход для карты № 8
Написал вход для карты № 9
Начало работы
14.01.13 15:44:12 INFO mapred.FileInputFormat: Всего путей ввода для обработки: 10
14.01.13 15:44:13 INFO mapred.JobClient: Выполнение задания: job_201401131425_0001
14.01.13 15:44:14 ИНФОРМАЦИЯ mapred.JobClient: карта 0% уменьшить 0%
14.01.13 15:44:32 ИНФОРМАЦИЯ mapred.JobClient: карта 20% уменьшить 0%
14.01.13 15:44:33 ИНФОРМАЦИЯ mapred.JobClient: карта 40% уменьшить 0%
14.01.13 15:44:46 ИНФОРМАЦИЯ mapred.JobClient: карта 60% уменьшить 0%
14.01.13 15:44:56 ИНФОРМАЦИЯ mapred.JobClient: карта 80% уменьшить 0%
14.01.13 15:44:58 ИНФОРМАЦИЯ mapred.JobClient: карта 100% уменьшить на 20%
14.01.13 15:45:03 ИНФОРМАЦИЯ mapred.JobClient: карта 100% уменьшить 33%
14.01.13 15:45:06 ИНФОРМАЦИЯ mapred.JobClient: карта 100% уменьшить 100%
14.01.13 15:45:09 INFO mapred.JobClient: Работа завершена: job_201401131425_0001
14.01.13 15:45:09 INFO mapred.JobClient: Счетчиков: 30
14.01.13 15:45:09 ИНФОРМАЦИЯ mapred.JobClient: Работа счетчиков
14.01.13 15:45:09 INFO mapred.JobClient: Запущено сокращение задач = 1
14.01.13 15:45:09 INFO mapred.JobClient: SLOTS_MILLIS_MAPS = 145601
14.01.13 15:45:09 INFO mapred.JobClient: общее время, затраченное всеми, уменьшает время ожидания после резервирования слотов (мс) = 0
14.01.13 15:45:09 INFO mapred.JobClient: Общее время, потраченное всеми картами, ожидающими после резервирования слотов (мс) = 0
14.01.13 15:45:09 INFO mapred.JobClient: Запущены задачи карты = 10
14.01.13 15:45:09 ИНФОРМАЦИЯ mapred.JobClient: задачи локальной карты данных = 10
14.01.13 15:45:09 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES = 33926
14.01.13 15:45:09 INFO mapred.JobClient: Счетчики форматов ввода файлов
14.01.13 15:45:09 ИНФОРМАЦИЯ mapred.JobClient: Bytes Read = 1180
14.01.13 15:45:09 INFO mapred.JobClient: Счетчики формата выходного файла
14.01.13 15:45:09 INFO mapred.JobClient: Bytes Written = 97
14.01.13 15:45:09 INFO mapred.JobClient: FileSystemCounters
14.01.13 15:45:09 INFO mapred.JobClient: FILE_BYTES_READ = 226
14.01.13 15:45:09 INFO mapred.JobClient: HDFS_BYTES_READ = 2740
14.01.13 15:45:09 INFO mapred.JobClient: FILE_BYTES_WRITTEN = 622606
14.01.13 15:45:09 INFO mapred.JobClient: HDFS_BYTES_WRITTEN = 215
14.01.13 15:45:09 ИНФОРМАЦИЯ mapred.JobClient: Map-Reduce Framework
14.01.13 15:45:09 INFO mapred.JobClient: Вывод на карту материализованных байтов = 280
14.01.13 15:45:09 INFO mapred.JobClient: входные записи карты = 10
14.01.13 15:45:09 INFO mapred.JobClient: Уменьшить количество перемешиваемых байтов = 280
14.01.13 15:45:09 INFO mapred.JobClient: Разлитые записи = 40
14.01.13 15:45:09 INFO mapred.JobClient: Выходные байты карты = 180
14/01/13 15:45:09 INFO mapred.JobClient: общее использование выделенной кучи (в байтах) =
2039111680
14.01.13 15:45:09 INFO mapred.JobClient: затраченное время процессора (мс) = 9110
14.01.13 15:45:09 INFO mapred.JobClient: входные байты карты = 240
14.01.13 15:45:09 INFO mapred.JobClient: SPLIT_RAW_BYTES = 1560
14.01.13 15:45:09 INFO mapred.JobClient: Объединить входные записи = 0
14.01.13 15:45:09 INFO mapred.JobClient: сокращение входных записей = 20
14.01.13 15:45:09 INFO mapred.JobClient: сокращение групп ввода = 20
14.01.13 15:45:09 INFO mapred.JobClient: Объединить выходные записи = 0
14.01.13 15:45:09 INFO mapred.JobClient: Снимок физической памяти (в байтах) = 1788379136
14.01.13 15:45:09 INFO mapred.JobClient: уменьшить количество выходных записей = 0
14.01.13 15:45:09 INFO mapred.JobClient: снимок виртуальной памяти (в байтах) = 10679681024
14.01.13 15:45:09 INFO mapred.JobClient: Карта выходных записей = 20
Работа завершена за 57.825 секунд
Расчетное значение Pi составляет 3,14158440000000000000
Вы можете проверить страницу статуса отслеживания работы, чтобы посмотреть полный статус работы
Детализируйте выполненную работу, и вы сможете увидеть больше деталей о задачах Map Reduce.
Наконец, не забудьте прекратить работу ваших экземпляров amazon ec2, иначе вас продолжат списывать со счетов.
Вот и все для этой статьи, надеюсь, вы найдете это полезным
С Новым Годом!