Параллельные и распределенные вычисления

Семинар 7

HDFS

Пономаренко Роман
@rerand0m
rerandom@ispras.ru

Консольный клиент hdfs

$ hdfs dfs -ls /
Found 6 items
drwxr-xr-x   - hdfs  supergroup          0 2021-12-29 12:56 /data
drwxr-xr-x   - hdfs  supergroup          0 2020-12-22 14:07 /datasets
drwxr-xr-x   - hbase hbase               0 2022-12-17 18:20 /hbase
drwxr-xr-x   - hdfs  supergroup          0 2021-03-11 20:43 /opt
drwxrwxrwx   - hdfs  supergroup          0 2023-04-01 13:44 /tmp
drwxrwxr-x   - hdfs  supergroup          0 2023-03-30 09:47 /user

$ hdfs dfs -ls -h /data/wiki/en_articles/
Found 1 items
-rw-r--r--   3 hdfs supergroup      11.5 G 2017-07-03 19:21 /data/wiki/en_articles/articles

$ hdfs dfs -du -h /data/wiki/en_articles/
11.5 G  34.4 G  /data/wiki/en_articles/articles
man

Другие команды

$ hdfs dfs -mkdir <dir>

$ hdfs dfs -put <local_file> <hdfs_file> # Копирование файла с mipt-client.atp-fivt.org

$ hdfs dfs -cat <file> # Вывод на экран

$ hdfs dfs -text <file> # Вывод на экран (распознаёт кодировку и декодирует файл)

$ hdfs dfs -tail <file> # Вывод последнего килобайта

$ hdfs dfs -mv <file1> <file2>

$ hdfs dfs -cp <file1> <file2> # Лучше разобраться с hadoop distcp

$ hdfs dfs -setrep <rep> <file> # Задать фактор репликации, -w для ожидания завершения

$ hdfs dfs -rm <file> # Перемещает в /.Trash/ для удаления флаг --skipTrash

$ hdfs dfs -rm -r <folder>
					

HDFS fsck

$ hdfs fsck /data/wiki/en_articles/articles -files -blocks -locations
Connecting to namenode via http://mipt-master.atp-fivt.org:50070
FSCK started by PonomarenkoRE (auth:SIMPLE) from /93.175.29.107 for path /data/wiki/en_articles/articles at Sun Apr 02 00:19:15 UTC 2023
/data/wiki/en_articles/articles 12328051927 bytes, 92 block(s):  OK
0. BP-1135830572-93.175.29.106-1493426010892:blk_1073971213_230460 len=134217728 Live_repl=3 [DatanodeInfoWithStorage[93.175.29.109:50010,DS-3b63d425-0f0e-45be-b954-f090a313119d,DISK], DatanodeInfoWithStorage[93.175.29.111:50010,DS-0618707d-c00c-4563-b7d8-ec217f4c972c,DISK], DatanodeInfoWithStorage[93.175.29.108:50010,DS-e6145908-c576-4b13-b0b0-7222d3355fc9,DISK]]
1. BP-1135830572-93.175.29.106-1493426010892:blk_1073971222_230469 len=134217728 Live_repl=3 [DatanodeInfoWithStorage[93.175.29.111:50010,DS-0618707d-c00c-4563-b7d8-ec217f4c972c,DISK], DatanodeInfoWithStorage[93.175.29.110:50010,DS-ea163d39-5f3c-41e6-9281-aa2013a5ba38,DISK], DatanodeInfoWithStorage[93.175.29.113:50010,DS-0577ca31-8450-4384-a540-cd4f83eb1bbf,DISK]]
...
$ hdfs fsck -blockId blk_1073971213
Connecting to namenode via http://mipt-master.atp-fivt.org:50070
FSCK started by PonomarenkoRE (auth:SIMPLE) from /93.175.29.107 at Sun Apr 02 00:25:04 UTC 2023

Block Id: blk_1073971213
Block belongs to: /data/wiki/en_articles/articles
No. of Expected Replica: 3
No. of live Replica: 3
No. of excess Replica: 0
No. of stale Replica: 0
No. of decommissioned Replica: 0
No. of decommissioning Replica: 0
No. of corrupted Replica: 0
Block replica on datanode/rack: mipt-node01.atp-fivt.org/default is HEALTHY
Block replica on datanode/rack: mipt-node04.atp-fivt.org/default is HEALTHY
Block replica on datanode/rack: mipt-node02.atp-fivt.org/default is HEALTHY

# Вообще должно работать: sudo -u hdfsuser ssh hdfsuser@mipt-node01.atp-fivt.org find /dfs -name "blk_1073971213"
$ ssh hdfsuser@mipt-node01.atp-fivt.org find /dfs -name "blk_1073971213"
hdfsuser@mipt-node01.atp-fivt.org's password: hdfsuser
/dfs/dn/current/BP-1135830572-93.175.29.106-1493426010892/current/finalized/subdir3/subdir128/blk_1073971213
					

WebHDFS REST API

curl -i -L "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=OPEN
[&offset=<LONG>][&length=<LONG>][&buffersize=<INT>]"

curl -L -i "http://mipt-master.atp-fivt.org:50070/webhdfs/v1/data/wiki/en_articles_part/articles-part?op=OPEN&length=100"
HTTP/1.1 307 TEMPORARY_REDIRECT
Cache-Control: no-cache
Expires: Sun, 02 Apr 2023 00:36:56 GMT
Date: Sun, 02 Apr 2023 00:36:56 GMT
Pragma: no-cache
Expires: Sun, 02 Apr 2023 00:36:56 GMT
Date: Sun, 02 Apr 2023 00:36:56 GMT
Pragma: no-cache
Content-Type: application/octet-stream
X-FRAME-OPTIONS: SAMEORIGIN
Location: http://mipt-node05.atp-fivt.org:50075/webhdfs/v1/data/wiki/en_articles_part/articles-part?op=OPEN&namenoderpcaddress=mipt-master.atp-fivt.org:8020&length=100&offset=0
Content-Length: 0
Server: Jetty(6.1.26.cloudera.4)

HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET
Access-Control-Allow-Origin: *
Content-Type: application/octet-stream
Connection: close
Content-Length: 100

12	Anarchism         Anarchism is often defined as a political philosophy which holds the state to b
more

Namenode

Может быть доступен напрямую:

http://mipt-master.atp-fivt.org:50070

А можно пробросить порт:

ssh -L 50070:mipt-master.atp-fivt.org:50070 MY_USER@mipt-client.atp-fivt.org  # вместо MY_USER введите свой логин (`par***`)
					

Заходить тогда через localhost:50070

Java API

Ref

Python API

Нужно создать файл ~/.hdfscli.cfg с содержимым:

[global]
default.alias = default

[default.alias]
url = http://mipt-master.atp-fivt.org:50070
user = <my_user> # например, velkerr

Затем можно работать:

Docs

HDFS shell

src

Apache Hue

Нужно пробросить порт:

ssh -L 8888:mipt-node03.atp-fivt.org:8888 MY_USER@mipt-client.atp-fivt.org  # вместо MY_USER введите свой логин (`par***`)
					

Заходить через localhost:8888

Логин: hue_user

Пароль: hue_password

Задача 1

Для HDFS ёмкостью 2PB, c размером блока 64MB и фактором репликации 3, оценить минимальный объем RAM на Namenode. Считаем, что метаинформация о каждом блоке (независимо от числа реплик) занимает в памяти NameNode 600B.

2PB / 64MB - число блоков.

Разных блоков будет: 2PB / 64MB / 3

Требуемая память:
(2PB / 64MB / 3) * 600B = 6.25GB

Задача 2

На кластере используются HDD с характеристиками: seek time - 12мс, скорость линейного чтения - 210 MB/c. Какой минимальный размер блока в HDFS стоит выбрать, чтобы время поиска блока составляло не больше 0.5% от времени чтения блока?

0.5% от времени чтения блока размера Х должен быть не меньше 12мс:

X / 210 MB/c * 0.005 >= 0.012 c
X >= 0.012 * 210 / 0.005 = 504 MB