Этот пост содержит инструкции по установке Hadoop на Ubuntu. Это краткое пошаговое руководство по установке Hadoop. Здесь вы получите все команды и их описание, необходимые для установки Hadoop в автономном режиме (кластер с одним узлом), Hadoop в псевдо-распределенном режиме (кластер с одним узлом) и Hadoop в распределенном режиме (кластер с несколькими узлами).
Основная цель этого руководства — запустить «простую» установку Hadoop, чтобы вы могли поиграться с программным обеспечением и узнать о нем больше.
Этот учебник был протестирован на:
- Ubuntu Linux (10.04 LTS)
- Hadoop 0.20.2
Предпосылки:
Установите Java:
Java 1.6.x (Sun Java или Open Java) рекомендуется для Hadoop
1. Добавьте репозиторий Canonical Partner Repository в свои подходящие репозитории:
|
1
|
|
2. Обновите список источников
|
1
|
$ sudo apt-get update |
3. Установите sun-java6-jdk
|
1
|
$ sudo apt-get install sun-java6-jdk |
4. После установки быстро проверьте, правильно ли настроен Sun JDK:
|
1
2
3
4
|
user@ubuntu:~# java -versionjava version "1.6.0_20"Java(TM) SE Runtime Environment (build 1.6.0_20-b02)Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing) |
Добавление выделенного пользователя системы Hadoop:
Мы будем использовать выделенную учетную запись пользователя Hadoop для запуска Hadoop. Хотя это и не требуется, но рекомендуется, потому что это помогает отделить установку Hadoop от других программных приложений и учетных записей пользователей, работающих на одном компьютере (подумайте: безопасность, разрешения, резервные копии и т. Д.)
|
1
|
$ sudo adduser hadoop_admin |
Авторизуйтесь под пользователем hadoop_admin:
|
1
|
user@ubuntu:~$ su - hadoop_admin |
Установка Hadoop:
|
1
2
3
|
$ cd /usr/local$ sudo tar xzf hadoop-0.20.2.tar.gz$ sudo chown -R hadoop_admin /usr/local/hadoop-0.20.2 |
Определить JAVA_HOME:
Отредактируйте файл конфигурации /usr/local/hadoop-0.20.2/conf/hadoop-env.sh и установите JAVA_HOME:
export JAVA_HOME = путь к корневому каталогу вашей установки Java (например, / usr / lib / jvm / java-6-sun)
|
1
|
$ vi conf/hadoop-env.sh |
Перейдите в каталог установки hadoop (HADOOP_HOME, т.е. /usr/local/hadoop-0.20.2/):
|
1
|
$ bin/hadoop |
Будет сгенерирован следующий вывод:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
Usage: hadoop [--config confdir] COMMANDwhere COMMAND is one of:namenode -format format the DFS filesystemsecondarynamenode run the DFS secondary namenodenamenode run the DFS namenodedatanode run a DFS datanodedfsadmin run a DFS admin clientmradmin run a Map-Reduce admin clientfsck run a DFS filesystem checking utilityfs run a generic filesystem user clientbalancer run a cluster balancing utilityjobtracker run the MapReduce job Tracker nodepipes run a Pipes jobtasktracker run a MapReduce task Tracker nodejob manipulate MapReduce jobsqueue get information regarding JobQueuesversion print the versionjar <jar> run a jar filedistcp <srcurl> <desturl> copy file or directories recursivelyarchive -archiveName NAME <src>*<dest> create a hadoop archivedaemonlog get/set the log level for each daemonorCLASSNAME run the class named CLASSNAMEMost commands print help when invoked w/o parameters: |
Настройка Hadoop в автономном режиме завершена ……. !!!!!!!
Теперь давайте запустим несколько примеров:
1. Запустите пример Classic Pi:
|
1
|
$ bin/hadoop jar hadoop-*-examples.jar pi 10 100 |
2. Запустите пример grep:
|
1
2
3
4
|
$ mkdir input$ cp conf/*.xml input$ bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'$ cat output/* |
3. Запустите пример подсчета слов:
|
1
2
3
|
$ mkdir inputwords$ cp conf/*.xml inputwords$ bin/hadoop jar hadoop-*-examples.jar wordcount inputwords outputwords |
Если вы обнаружите какую-либо ошибку, посетите страницу Hadoop
После запуска Hadoop в автономном режиме. Запустите Hadoop в псевдораспределенном режиме (кластер с одним узлом):
Настройка SSH:
Hadoop требует SSH-доступа для управления своими узлами, т. Е. Удаленными машинами и вашим локальным компьютером. Поэтому для нашей установки Hadoop с одним узлом нам необходимо настроить SSH-доступ к localhost для пользователя hadoop_admin.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
user@ubuntu:~$ su - hadoop_admin hadoop_admin@ubuntu:~$ sudo apt-get install openssh-server openssh-clienthadoop_admin@ubuntu:~$ ssh-keygen -t rsa -P ""Generating public/private rsa key pair.Enter file in which to save the key (/home/hadoop_admin/.ssh/id_rsa):Created directory '/home/hadoop_admin/.ssh'.Your identification has been saved in /home/hadoop_admin/.ssh/id_rsa.Your public key has been saved in /home/hadoop_admin/.ssh/id_rsa.pub.The key fingerprint is:9b:82:ea:58:b4:e0:35:d7:ff:19:66:a6:ef:ae:0e:d2 hadoop_admin@ubuntuThe key's randomart image is:[...snipp...]hadoop_admin@ubuntu:~$ |
Разрешите SSH доступ к вашему локальному компьютеру и подключитесь по ssh
|
01
02
03
04
05
06
07
08
09
10
|
$ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys$ ssh localhostThe authenticity of host 'localhost (::1)' can't be established.RSA key fingerprint is e7:89:26:49:ae:02:30:eb:1d:75:4f:bb:44:f9:36:29.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 'localhost' (RSA) to the list of known hosts.Linux ubuntu 2.6.32-22-generic #33-Ubuntu SMP Wed Apr 30 13:27:30 UTC 2010 i686 GNU/LinuxUbuntu 10.04 LTS[...snipp...]$ |
Редактировать файлы конфигурации:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
$ vi conf/core-site.xml<configuration><property><name>fs.default.name</name><value>hdfs://localhost:9000</value></property><property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property></configuration> |
Если вы указываете какой-то другой путь, убедитесь, что у пользователя hadoop_admin есть права на чтение и запись в этом каталоге (sudo chown hadoop_admin / your / path)
|
1
2
3
4
5
6
7
|
$ vi conf/hdfs-site.xml<configuration><property><name>dfs.replication</name><value>1</value></property></configuration> |
|
1
2
3
4
5
6
7
|
$ vi conf/mapred.xml<configuration><property><name>mapred.job.tracker</name> <value>localhost:9001</value></property></configuration> |
Форматирование имени узла:
|
1
|
$ /hadoop/bin/hadoop namenode -format |
Будет сгенерирован следующий вывод:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
$ bin/hadoop namenode -format10/05/10 16:59:56 INFO namenode.NameNode: STARTUP_MSG:/************************************************************STARTUP_MSG: Starting NameNodeSTARTUP_MSG: host = ubuntu/127.0.1.1STARTUP_MSG: args = [-format]STARTUP_MSG: version = 0.20.2STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010************************************************************/10/05/10 16:59:56 INFO namenode.FSNamesystem: fsOwner=hadoop_admin,hadoop10/05/08 16:59:56 INFO namenode.FSNamesystem: supergroup=supergroup10/05/08 16:59:56 INFO namenode.FSNamesystem: isPermissionEnabled=true10/05/08 16:59:56 INFO common.Storage: Image file of size 96 saved in 0 seconds.10/05/08 16:59:57 INFO common.Storage: Storage directory .../.../dfs/name has been successfully formatted.10/05/08 16:59:57 INFO namenode.NameNode: SHUTDOWN_MSG:/************************************************************SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1************************************************************/$ |
НАЧАЛО ОДИНОЧНОГО КЛАСТЕРА:
|
1
|
$ /bin/start-all.sh |
Будет сгенерирован следующий вывод:
|
1
2
3
4
5
6
7
|
hadoop_admin@ubuntu:/usr/local/hadoop$ bin/start-all.shstarting namenode, logging to /usr/local/hadoop/bin/../logs/hadoop-hadoop-namenode-ubuntu.outlocalhost: starting datanode, logging to /usr/local/hadoop/bin/../logs/hadoop-hadoop-datanode-ubuntu.outlocalhost: starting secondarynamenode, logging to /usr/local/hadoop/bin/../logs/hadoop-hadoop-secondarynamenode-ubuntu.outstarting jobtracker, logging to /usr/local/hadoop/bin/../logs/hadoop-hadoop-jobtracker-ubuntu.outlocalhost: starting tasktracker, logging to /usr/local/hadoop/bin/../logs/hadoop-hadoop-tasktracker-ubuntu.outhadoop_admin@ubuntu:/usr/local/hadoop$ |
проверьте, работают ли ожидаемые процессы Hadoop с помощью jps
|
1
2
3
4
5
6
|
$ jps14799 NameNode14977 SecondaryNameNode 15183 DataNode15596 JobTracker15897 TaskTracker |
Настройка Hadoop в псевдораспределенном режиме завершена ……. !!!!!!!
ОСТАНОВКА ОДИНОЧНОГО КЛАСТЕРА:
|
1
|
$ /bin/stop-all.sh |
Будет сгенерирован следующий вывод:
|
1
2
3
4
5
6
7
|
$ bin/stop-all.shstopping jobtrackerlocalhost: stopping tasktrackerstopping namenodelocalhost: stopping datanodelocalhost: stopping secondarynamenode$ |
Вы можете запустить тот же набор экзаменов, что и в автономном режиме, в oder, чтобы убедиться, что ваша установка прошла успешно.
Веб-интерфейс для NameNode
HTTP: // локальный: 50070
Веб-интерфейс для JobTracker
HTTP: // локальный: 50030
Веб-интерфейс для TaskTracker
HTTP: // локальный: 50060
После запуска Hadoop в автономном режиме. Запускаем Hadoop в распределенном режиме (многоузловой кластер).
Предварительное условие : перед запуском hadoop в распределенном режиме вы должны настроить hadoop в псевдораспределенном режиме, и вам нужно как минимум две машины, одна для главного, а другая для подчиненного (вы можете создать более одной виртуальной машины на одной машине).
| КОМАНДА | ОПИСАНИЕ |
|---|---|
| $ bin / stop-all.sh | Перед запуском hadoop в распределенном режиме сначала остановите каждый кластер.
запустите этот cmd на всех машинах в кластере (master и slave) |
| $ vi / etc / hosts | Затем введите Мастер добавления IP (например, мастер 192.168.0.1) IP-слэйв (например: 192.168.0.2 раб) запустите этот cmd на всех машинах в кластере (master и slave) |
| $ ssh-copy-id -i $ HOME / .ssh / id_rsa.pub slave | установка пароля без пароля ( на всех машинах вы должны войти под тем же именем пользователя ) запустите этот cmd на master |
| или же $ cat .ssh / id_rsa.pub Затем его содержимое затем копируется в |
мы также можем установить ssh manuall без пароля |
|
$ vi conf / master
затем введите мастер
|
Файл conf / masters определяет наменоды нашего многоузлового кластера
запустите этот cmd на master |
|
$ vi conf / slaves
тогда типа раб
|
В этом файле conf / slaves перечислены хосты, по одному на строку, где будут запускаться подчиненные демоны Hadoop (датододы и средства отслеживания задач).
запустите этот cmd на всех машинах в кластере (master и slave) |
| $ vi conf / core-site.xml
затем введите:
<Свойство>
<Имя> fs.default.name </ имя>
<значение> HDFS: // мастер: 54310 </ значение> </ Недвижимость>
|
Отредактируйте файл конфигурации core-site.xml
запустите этот cmd на всех машинах в кластере (master и slave) |
| $ vi conf / mapred-site.xml
затем введите:
<Свойство>
<Имя> mapred.job.tracker </ имя>
<значение> мастер: 54311 </ значение> </ Недвижимость>
|
Отредактируйте файл конфигурации mapred-site.xml
запустите этот cmd на всех машинах в кластере (master и slave) |
| $ vi conf / hdfs-site.xml затем введите: <Свойство>
<Имя> dfs.replication </ имя>
<value> 2 </ value> </ property> |
Отредактируйте файл конфигурации hdfs-site.xml
запустите этот cmd на всех машинах в кластере (master и slave) |
|
$ vi conf / mapred-site.xml
затем введите:
<Свойство>
<Имя> mapred.local.dir </ имя>
<значение> $ {hadoop.tmp.dir} / mapred / местный </ значение> <Свойство>
<Имя> mapred.map.tasks </ имя>
<значение> 20 </ значение> </ Недвижимость>
<Свойство>
<Имя> mapred.reduce.tasks </ имя>
<значение> 2 </ значение> |
Отредактируйте файл конфигурации mapred-site.xml запустите этот cmd на master |
|
$ bin / start-dfs.sh
|
Запуск многоузлового кластера. Сначала запускаются демоны HDFS. демон namenode запускается на master, а демоны datanode запускаются на всех slave
запустите этот cmd на master |
|
$ jps
|
Это должно дать вывод, как это:
14799 NameNode
15314 Jps
16977 вторичное_имя
запустите этот cmd на master |
|
$ jps
|
Это должно дать вывод, как это:
15183 DataNode
15616 Jps
запустить этот cmd на всех рабах |
|
$ bin / start-mapred.sh
|
Демоны MapReduce запускаются: трекер заданий запускается на главном сервере, а демоны таскера запускаются на всех подчиненных
запустите этот cmd на master |
|
$ jps
|
Это должно дать вывод, как это:
16017 Jps
14799 NameNode
15596 JobTracker
14977 SecondaryNameNode
запустите этот cmd на master |
|
$ jps
|
Это должно дать вывод, как это:
15183 DataNode
15897 TaskTracker
16284 Jps запустить этот cmd на всех рабах |
| Поздравляем, установка Hadoop завершена | |
| HTTP: // локальный: 50070 / | веб-интерфейс для имени узла |
| HTTP: // локальный: 50030 / | веб-интерфейс для отслеживания работы |
| Теперь давайте запустим несколько примеров | |
| $ bin / hadoop jar hadoop — * — examples.jar pi 10 100 | пример запуска пи |
| $ bin / hadoop dfs -mkdir input
$ bin / hadoop dfs -put conf input $ bin / hadoop jar hadoop — * — examples.jar grep ввод-вывод ‘dfs [az.] +’ $ bin / hadoop dfs -cat output / * |
запустить пример grep |
| $ bin / hadoop dfs -mkdir inputwords
$ bin / hadoop dfs -put conf inputwords $ bin / hadoop jar hadoop — * — examples.jar wordcount входные слова выходные слова $ bin / hadoop dfs -cat outputwords / * |
запустить пример wordcount |
|
$ bin / stop-mapred.sh
$ bin / stop-dfs.sh
|
Чтобы остановить демонов
запустите этот cmd на master |
Справка: Hadoop в автономном режиме , Hadoop в псевдораспределенном режиме и Hadoop в распределенном режиме от нашего партнера JCG