вступление
Этот проект позволяет запускать HDFS на Mesos. Вы должны быть знакомы с основами HDFS и Mesos:
- http://mesos.apache.org/documentation/latest/
- https://hadoop.apache.org/docs/r2.7.2/hdfs_design.html
Проект требует:
- Mesos 0.23.0+
- JDK 1.7.x
- Hadoop 1.2.x или 2.7.x
Мезос в Бродяге
Проект включает в себя бродячую среду , которая позволяет запускать кластер Mesos локально. Если вы собираетесь использовать внешний кластер Mesos, вы можете пропустить этот раздел.
1. Запустите бродячие узлы:
|
1
2
|
# cd hdfs-mesos/vagrant# vagrant up |
Создает главные и подчиненные узлы мезо.
2. Добавьте имена бродячих узлов в /etc/hosts
Теперь Месос в Бродяге должен быть запущен. Вы можете продолжить запуск планировщика. Для более подробной информации о vagrant окружающей среде, пожалуйста, прочитайте vagrant / README.md
Запущенный планировщик
1. Скачайте hdfs-mesos\*.jar ИЛИ hdfs-mesos\*.jar проект:
Скачать банку:
|
1
2
3
|
# mkdir hdfs-mesos# cd hdfs-mesos# wget https://github.com/elodina/hdfs-mesos/releases/download/0.0.1.0/hdfs-mesos-0.0.1.0.jar |
ИЛИ клонировать и построить:
|
1
2
3
|
# git clone https://github.com/elodina/hdfs-mesos.git# cd hdfs-mesos# ./gradlew jar |
2. Загрузите tarball hadoop:
|
1
|
# wget https://archive.apache.org/dist/hadoop/core/hadoop-2.7.2/hadoop-2.7.2.tar.gz |
3. Запустите планировщик:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
# ./hdfs-mesos.sh scheduler --api=http://$scheduler:7000 --master=zk://$master:2181/mesos --user=vagrant2016-03-18 15:04:48,785 [main] INFO hdfs.Scheduler - Starting Scheduler:api: http://$scheduler:7000files: jar:./hdfs-mesos-0.0.1.0.jar, hadoop:./hadoop-1.2.1.tar.gzmesos: master:master:5050, user:vagrant, principal:<none>, secret:<none>framework: name:hdfs, role:*, timeout:30d2016-03-18 15:04:48,916 [main] INFO hdfs.HttpServer - started on port 7000I0318 15:04:49.008314 19123 sched.cpp:164] Version: 0.25.0I0318 15:04:49.017160 19155 sched.cpp:262] New master detected at master@192.168.3.5:5050I0318 15:04:49.019287 19155 sched.cpp:272] No credentials provided. Attempting to register without authenticationI0318 15:04:49.029218 19155 sched.cpp:641] Framework registered with 20160310-141004-84125888-5050-10895-00062016-03-18 15:04:49,044 [Thread-17] INFO hdfs.Scheduler - [registered] framework:#-0006 master:#326bb pid:master@192.168.3.5:5050 hostname:master2016-03-18 15:04:49,078 [Thread-18] INFO hdfs.Scheduler - [resourceOffers]slave0#-O761 cpus:1.00; mem:2500.00; disk:35164.00; ports:[5000..32000]master#-O762 cpus:1.00; mem:2500.00; disk:35164.00; ports:[5000..32000]...2016-03-18 15:04:49,078 [Thread-18] INFO hdfs.Scheduler - [resourceOffers] |
где:
-
$scheduler— адрес планировщика, доступный из подчиненных узлов; -
$masterмастер-адрес, доступный с узла планировщика;
Планировщик должен зарегистрироваться и начать получать предложения ресурсов. Если планировщик не получает предложения, может потребоваться указать LIBPROCESS_IP:
|
1
|
# export LIBPROCESS_IP=$scheduler_ip |
Теперь планировщик должен быть запущен, и вы можете приступить к запуску узлов HDFS.
Запуск HDFS кластера
Проект предоставляет CLI & REST API для управления узлами HDFS. Сначала мы сосредоточимся на CLI.
1. Добавить наменоде и датоде:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
# ./hdfs-mesos.sh node add nn --type=namenodenode added: id: nn type: namenode state: idle resources: cpus:0.5, mem:512# ./hdfs-mesos.sh node add dn0 --type=datanodenode added: id: dn0 type: datanode state: idle resources: cpus:0.5, mem:512 |
2. Начальные узлы:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
# ./hdfs-mesos.sh node start \*nodes started: id: nn type: namenode state: running resources: cpus:0.5, mem:512 reservation: cpus:0.5, mem:512, ports:http=5000,ipc=5001 runtime: task: 383aaab9-982b-400e-aa35-463e66cdcb3b executor: 19065e07-a006-49a4-8f2b-636d8b1f2ad6 slave: 241be3a2-39bc-417c-a967-82b4018a0762-S0 (master) id: dn0 type: datanode state: running resources: cpus:0.5, mem:512 reservation: cpus:0.5, mem:512, ports:http=5002,ipc=5003,data=5004 runtime: task: 37f3bcbb-10a5-4323-96d2-aef8846aa281 executor: 088463c9-5f2e-4d1d-8195-56427168b86f slave: 241be3a2-39bc-417c-a967-82b4018a0762-S0 (master) |
Узлы работают и работают сейчас.
Примечание: запуск может занять некоторое время. Вы можете просматривать прогресс через Mesos UI.
3. Выполните несколько операций с ФС:
|
1
2
3
4
|
# hadoop fs -mkdir hdfs://master:5001/dir# hadoop fs -ls hdfs://master:5001/Found 1 itemsdrwxr-xr-x - vagrant supergroup 0 2016-03-17 12:46 /dir |
Примечание: в fs url используется хост namenode и порт ipc.
Использование CLI
Проект обеспечивает CLI следующей структурой:
|
1
2
3
4
5
6
7
|
# ./hdfs-mesos.sh helpUsage: <cmd> ...Commands: help [cmd [cmd]] - print general or command-specific help scheduler - start scheduler node - node management |
Помощь предоставляется для каждой команды и подкоманды:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# ./hdfs-mesos.sh help nodeNode management commandsUsage: node <cmd>Commands: list - list nodes add - add node update - update node start - start node stop - stop node remove - remove nodeRun `help node <cmd>` to see details of specific command# ./hdfs-mesos.sh help node addAdd nodeUsage: node add <ids> [options]Option (* = required) Description--------------------- -------------core-site-opts Hadoop core-site.xml options.--cpus <Double> CPU amount (0.5, 1, 2).--executor-jvm-opts Executor JVM options.--hadoop-jvm-opts Hadoop JVM options.--hdfs-site-opts Hadoop hdfs-site.xml options.--mem <Long> Mem amount in Mb.* --type node type (name_node, data_node).Generic OptionsOption Description------ -------------api REST api url (same as --api option for scheduler). |
Все связанные с узлами команды поддерживают массовые операции с использованием выражений id узла. Примеры:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# ./hdfs-mesos.sh node add dn0..1 --type=datanodenodes added: id: dn0 type: datanode ... id: dn1 type: datanode ...# ./hdfs-mesos.sh node update dn* --cpus=1nodes updated: id: dn0 ... resources: cpus:1.0, mem:512 id: dn1 ... resources: cpus:1.0, mem:512# ./hdfs-mesos.sh node start dn0,dn1nodes started: id: dn0 ... id: dn0 ... |
Примеры выражения Id:
-
nn— сопоставляет узел с идентификатором nn -
*— соответствует любому узлу (должен быть экранирован в слэше) -
dn*— сопоставляет узел с идентификатором, начинающимся с dn -
dn0..2— соответствует узлам dn0, dn1, dn2
Использование REST
Планировщик использует встроенный HTTP-сервер. Сервер выполняет две функции:
- распространение двоичных файлов Hadoop, JRE и исполнителя;
- обслуживание REST API, вызванного CLI;
Большинство команд CLI отображаются на вызов API REST. Примеры:
| Команда CLI | REST call |
|---|---|
node add nn --type=namenode --cpus=2 |
/api/node/add?node=nn&type=namenode&cpus=2 |
node start dn* --timeout=3m- |
/api/node/start?node=dn*&timeout=3m |
node remove dn5 |
/api/node/remove?node=dn5 |
Вызовы REST принимают простые HTTP-параметры и возвращают ответы JSON. Примеры:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# curl http://$scheduler:7000/api/node/list[ { "id": "nn", "type": "namenode", ... }, { "id": "dn0", "type": "datanode", ... }]# curl http://$scheduler:7000/api/node/start?node=nn,dn0{ "status": "started", "nodes": [ { "id": "nn", "state": "running", ... }, { "id": "dn0", "state": "running", ... } ]} |
Параметры CLI преобразуют один-к-одному в параметры REST. Параметры CLI используют пунктирный стиль, а параметры REST используют случай верблюда. Пример отображений:
| CLI param | REST param |
|---|---|
<id> (узел добавить | обновить |…) |
node |
timeout (начало узла | остановка) |
timeout |
core-site-opts (узел добавить | обновить) |
coreSiteOpts |
executor-jvm-opts (узел добавить | обновить) |
executorJvmOpts |
В некоторых случаях вызов API REST может вернуть ошибку. Ошибки помечаются кодом состояния, отличным от 200. Ответ об ошибке возвращается в формате JSON.
Пример:
|
1
2
3
4
5
|
# curl -v http://192.168.3.1:7000/api/node/start?node=unknown...HTTP/1.1 400 node not found...{"error":"node not found","code":400} |
Для более подробной информации о REST API, пожалуйста, обратитесь к источникам.
| Ссылка: | Apache Hadoop Узел данных HDFS Apache Mesos Framework от нашего партнера по JCG Джо Стейна в блоге All Things Hadoop . |