вступление
Этот проект позволяет запускать 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=vagrant 2016 - 03 - 18 15 : 04 : 48 , 785 [main] INFO hdfs.Scheduler - Starting Scheduler: api: http: //$scheduler:7000 files: jar:./hdfs-mesos- 0.0 . 1.0 .jar, hadoop:./hadoop- 1.2 . 1 .tar.gz mesos: master:master: 5050 , user:vagrant, principal:<none>, secret:<none> framework: name:hdfs, role:*, timeout:30d 2016 - 03 - 18 15 : 04 : 48 , 916 [main] INFO hdfs.HttpServer - started on port 7000 I0318 15 : 04 : 49.008314 19123 sched.cpp: 164 ] Version: 0.25 . 0 I0318 15 : 04 : 49.017160 19155 sched.cpp: 262 ] New master detected at master @192 .168. 3.5 : 5050 I0318 15 : 04 : 49.019287 19155 sched.cpp: 272 ] No credentials provided. Attempting to register without authentication I0318 15 : 04 : 49.029218 19155 sched.cpp: 641 ] Framework registered with 20160310 - 141004 - 84125888 - 5050 - 10895 - 0006 2016 - 03 - 18 15 : 04 : 49 , 044 [Thread- 17 ] INFO hdfs.Scheduler - [registered] framework:#- 0006 master:#326bb pid:master @192 .168. 3.5 : 5050 hostname:master 2016 - 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=namenode node added: id: nn type: namenode state: idle resources: cpus: 0.5 , mem: 512 # ./hdfs-mesos.sh node add dn0 --type=datanode node 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 items drwxr-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 help Usage: <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 node Node management commands Usage: node <cmd> Commands: list - list nodes add - add node update - update node start - start node stop - stop node remove - remove node Run `help node <cmd>` to see details of specific command # ./hdfs-mesos.sh help node add Add node Usage: 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 Options Option 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=datanode nodes added: id: dn0 type: datanode ... id: dn1 type: datanode ... # ./hdfs-mesos.sh node update dn* --cpus= 1 nodes updated: id: dn0 ... resources: cpus: 1.0 , mem: 512 id: dn1 ... resources: cpus: 1.0 , mem: 512 # ./hdfs-mesos.sh node start dn0,dn1 nodes 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 . |