Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_DB_1_Maj.docx
Скачиваний:
7
Добавлен:
12.02.2024
Размер:
2.83 Mб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

Кафедра «Математическая кибернетика и информационные технологии»

Дисциплина «Большие данные»

Лабораторная работа 1

Выполнил:

студент группы БСТ2104

Мажукин И.Н.

Проверила: Полянцева К. А.

Москва, 2023 г.

Содержание

Цель работы 3

1 Задание 1 3

2 Ход работы 3

3 Задание 2 3

4 Ход работы 4

Работа с UI 13

Цель работы 3

1 Задание 1 4

2 Ход работы 4

3 Задание 2 4

4 Ход работы 5

Работа с UI 15

Цель работы

Получить навыки работы с файловой системой HDFS.

  1. Задание 1

Требуется выполнить вход на хост с использованием протокола SSH, используя команду в формате "ssh username@<IP-адрес>". При первой попытке входа на хост необходимо сменить пароль. Для этого нужно будет ввести старый пароль, который указан в Jenkins Job, а затем новый пароль.

  1. Ход работы

На рисунке 1 представлен вход на хост с использованием протокола SSH.

Рисунок 1 – Вход на хост с использованием протокола SSH

  1. Задание 2

  1. Создайте локальный тестовый файл, используя команду "echo "test text" >> test".

  2. Увеличьте размер файла, чтобы он превышал размер одного блока HDFS, используя команду "fallocate -lv 777M test".

  3. Создайте новую директорию в HDFS по пути "/data/test_dir".

  4. Положите файл "test" в HDFS по пути "/data/test_dir/test", используя команду "hdfs dfs -put test /data/test_dir/".

  5. Скопируйте директорию "/data/test_dir" в "/data/test_dir_1", используя команду "hdfs dfs -cp /data/test_dir /data/test_dir_1".

  6. Удалите файл "test" из директории "test_dir_1" без сохранения файла в корзине, используя команду "hdfs dfs -rm /data/test_dir_1/test".

  7. Просмотрите размер любой директории, используя команду "hdfs dfs -du -h /data/test_dir".

  8. Просмотрите, как файл "/data/test_dir/test" хранится на файловой системе с помощью команды "hdfs fsck /data/test_dir/test".

  9. Выполните команду "hdfs fsck /data/test_dir_1/test -blocks -files -locations".

  1. Ход работы

На рисунке 2 показано создание локального тестового файла, используя команду "echo 'test text' >> test" и проверка, с помощью команды "cat test".

Рисунок 2 – Создание тестового файла

На рисунке 3 показан процесс создания локального тестового файла "test" размером 777 мегабайт с использованием команды "fallocate -l 777M test", а также результат выполнения команды "du -m test", показывающий, что размер файла действительно составляет 777 мегабайт.

Рисунок 3 – Увеличение размера тестового файла до 777 МВ

На рисунке 4 показана команда "hdfs dfs -mkdir /data/test_dir_mazhukin", используемая для создания новой директории внутри файловой системы HDFS, а также команда "hdfs dfs -ls /data", показывающая список папок, находящихся внутри папки "data" в HDFS, который теперь содержит нашу новую директорию "test_dir_ mazhukin".

Рисунок 4 – Создание директории "test_dir_ mazhukin" в HDFS

На рисунке 5 показана команда "hdfs dfs -put test /data/test_dir_ mazhukin", используемая для копирование из локальной системы в HDFS локального файла "test" в директорию "test_dir_ mazhukin" в файловой системе HDFS, а также команда "hdfs dfs -ls /data/test_dir_ mazhukin", показывающая список файлов, находящихся внутри директории "test_dir_mazhukin" в HDFS, который теперь содержит только наш загруженный файл "test".

Рисунок 5 – Загрузка файла "test" в директорию "test_dir_ mazhukin " в HDFS

На рисунке 6 изображена команда "hdfs dfs -cp /data/test_dir_ mazhukin /data/test_dir_mazhukin_1", с помощью которой происходит копирование директории "test_dir_ mazhukin" с изменением имени на "test_dir_ mazhukin_1". Команда "hdfs dfs -ls /data" используется для проверки успешного копирования директорий.

Рисунок 6 – Копирование директории "test_dir_mazhukin" и создание "test_dir_mazhukin_1" в HDFS

На рисунке 7 представлены команды "hdfs dfs -rm -skipTrash /data/test_dir_mazhukin_1/test" для удаления файла "test" из директории "test_dir_mazhukin_1", "-skipTrash" указывает на то, что файлы должны быть удалены без отправки их в "Корзину", а также команда "hdfs dfs -ls /data/test_dir_mazhukin_1", показывающая содержимое директории после удаления файла и подтверждающая успешное выполнение операции.

Рисунок 7 – Копирование директории "test_dir_mazhukin" и создание "test_dir_mazhukin_1" в HDFS

На рисунке 8 представлена команда "hdfs dfs -du -h /data/test_dir_mazhukin", позволяющая определить размер директории "test_dir_mazhukin" в HDFS. Результат команды "777 M 2.3 G" указывает на то, что общий объем занимаемого пространства на диске для директории "test_dir_mazhukin" составляет 2,5 гигабайта, а размер файла "test" составляет 777 мегабайт и репликация этого файла занимает 2.3 гигабайта пространства на диске (учитывая фактор репликации по умолчанию, равный 3).

Р исунок 8 – Проверка размера директории "test_dir_mazhukin" в HDFS

На рисунке 9 показано выполнение проверки HDFS с использованием команды "hdfs fsck /data/test_dir/test -files -blocks -loca tions" и результат после успешной проверки.

Рисунок 9 - выполнение проверки HDFS

  1. Какой фактор репликации установлен на кластере? Ответ: 3

  2. Сколько блоков составляют файл? Ответ: 7

 При выполнении команды fsck появилась строчка

Connecting to namenode via http://<active_namenode>:50070/fsck?ugi=user&path=%2Fdata%2Ftest1

Команда fsck также использует WebHDFS API.

  • Выполним команду hdfs fsck /data/test_dir_mazhukin_1/test -blocks -files –locations. "files" относится к файлам, хранящимся в HDFS. "blocks" являются минимальными единицами данных в HDFS. Файлы разбиваются на блоки фиксированного размера (обычно 128 МБ или 64 МБ) и каждый блок реплицируется на несколько узлов данных. "locations" относятся к физическим узлам данных, на которых хранятся реплики блоков.

Рисунок 10 – Вывод информация о каждом блоке, из которого состоит файл

Нам станет доступна информация о каждом блоке, из которого состоит файл. Разберем информацию по первому блоку HDFS:

0. BP-1573654390-10.53.210.XXX-1692789776563:blk_1073747600_6921 len=134217728 Live_repl=3 [DatanodeInfoWithStorage[10.53.210.133:1019,DS-6e6240e7-5ce7-4cae-afd5-3382f24e049c,DISK], DatanodeInfoWithStorage[10.53.210.XXX:1019,DS-f0a4e64f-aa6c-4204-93e7-1ec4bba0dc59,DISK], DatanodeInfoWithStorage[10.53.210.143:1019,DS-f0d9852e-3d01-474d-95fc-856662cb5d38,DISK]]

0.

Номер блока по порядку

BP-1573654390-10.53.210.XXX-1692789776563

Идентификатор block pull

blk_1073747600

Идентификатор блока

6921

Generation stamp. 

len=134217728

Объем блока

Live_repl=3

Количество живых реплик блока

DatanodeInfoWithStorage[10.53.210.133:1019

IP-адрес и порт, по которому доступен блок

DS-6e6240e7-5ce7-4cae-afd5-3382f24e049c

Data Storage ID идентификатор ноды (Если у ноды изменится hostname или IP-адрес, нода всё равно будет идентифицироваться внутри HDFS)

DISK

Способ хранения блока (Может также хранится в S3-хранилище)

  1. Заполните таблицу для данных первого блока Вашего тестового файла

0.

Номер блока по порядку

BP-2089730104-192.168.0.3-1694299343161

Идентификатор block pull

blk_1073744156

Идентификатор блока

3332

Generation stamp. 

len=134217728

Объем блока

Live_repl=3

Количество живых реплик блока

DatanodeInf oWithStorage[192.168.0.7:50010

IP-адрес и порт, по которому доступен блок

DS-0fa1051e-e894-40f2-9702-25061bf076da

Data Storage ID идентификатор ноды (Если у ноды изменится hostname или IP-адрес, нода всё равно будет идентифицироваться внутри HDFS)

DISK

Способ хранения блока (Может также хранится в S3-хранилище)

Также с помощью команды можно узнать подробную информацию о состоянии конкретного блока данных (hdfs fsck -blockId blk_1073744156)

hdfs fsck -blockId blk_XXXXX

  1. Скопируйте результат работы команды для любого из блоков, составляющих ваш тестовый файл. Какие данные мы получили?

Рисунок 11 – Вывод информации о блоке

Выполним несколько команд через HDFS REST API. Так как на кластерах SDP Hadoop по умолчанию включена аутентификация kerberos, будем использовать соответсвтующий синтаксис команд:

  1. Выполним вывод информации о файле /data/test_dir/test:

curl -i --negotiate -u : http://<active_namenode>:50070/webhdfs/v1/data/test_dir/test?op=GETFILESTATUS

curl -i --negotiate -u : http://node1.mtuci.cloud.ru:50070/webhdfs/v1/data/test_dir_mazhukin/test?op=GETFILESTATUS

  1. Какая информация выводится в результате работы команды?

Рисунок 12 – Вывод информации о файле /data/test_dir_mazhukin/test

HTTP/1.1 200 OK: Эта строка указывает на успешный ответ сервера с кодом состояния 200.

Date: Mon, 18 Sep 2023 19:07:56 GMT: Эта строка указывает на дату и время ответа сервера.

Cache-Control: no-cache: Этот заголовок указывает на то, что ответ не должен кэшироваться на клиентской стороне или промежуточных серверах.

Expires: Mon, 18 Sep 2023 19:07:56 GMT: Этот заголовок указывает на то, что ресурс будет считаться устаревшим после указанной даты и времени.

Pragma: no-cache: Этот заголовок указывает на то, что ответ не должен кэшироваться.

X-FRAME-OPTIONS: SAMEORIGIN: Этот заголовок указывает на опции фрейма X-Frame, определяющие, какие сайты имеют право встраивать данный контент внутри фрейма. В данном случае, заголовок говорит, что только сайты из того же источника (origin) имеют право встраивать контент.

Content-Type: application/json: Этот заголовок указывает на тип содержимого ответа, который в данном случае является JSON-данными.

Transfer-Encoding: chunked: Этот заголовок указывает на способ передачи содержимого, в данном случае содержимое передается блоками переменной длины.

{"FileStatus":{...}}: Это фрагмент JSON-данных, содержащий информацию о файле. В нем указаны различные свойства файла, такие как время доступа (accessTime), размер блока (blockSize), количество дочерних элементов (childrenNum), идентификатор файла (fileId), группа владельца файла (group), длина файла (length), время изменения файла (modificationTime), владелец файла (owner), суффикс пути файла (pathSuffix), разрешение доступа к файлу (permission), репликация файла (replication), хранилище файла (storagePolicy) и тип файла (type).

  1. Теперь попробуем прочитать первые 10 символов тестового файла, используя тот же синтаксис команды:

Рисунок 13 – Вывод первых 10 символов тестового файла,

"curl -i --negotiate -u : http://<active_namenode>:50070/webhdfs/v1/data/test_dir/test?op=OPEN&length=10"

curl -i --negotiate -u : http://node1.mtuci.cloud.ru:50070/webhdfs/v1/data/test_dir_mazhukin/test?op=OPEN&length=10

где

sber-node

Адрес ноды, на которой установлен клиент hdfs

50070

Порт подключения к REST API

--negotiate 

включаем SPNEGO в curl

/webhdfs/v1

Адрес Web API

/data/test_dir/test

Путь к нужному файлу в HDFS

op=

Производимое действие

length=

Желаемая длина считывания символов

  1. Почему мы не получили требуемых данных? Ответ: Мы обратились не дошли до нужной node.

  2. Проанализируйте ссылку раздела location из ответа сервера

  3. Для того, чтобы получить желаемые данные мы можем добавить в curl-запрос флаг -L (location). Эта опция заставит Curl повторить запрос для нового адреса, который мы получили ранее в Location.

Рисунок 14 – Вывод верной информации

"curl -i -L --negotiate -u : http://<active_namenode>:50070/webhdfs/v1/data/test_dir/test?op=OPEN&length=10"

"curl -i -L --negotiate -u : http://node5.mtuci.cloud.ru:50070/webhdfs/v1/data/test_dir_mazhukin/test?op=OPEN&length=10"

  1. Скопируйте файл /test из /data/test_dir в test_dir_1 и удалите его /data/test_dir_1/test с помощью curl-команды. Приложите скриншоты.

hdfs dfs -chmod -R 777 /data/test_dir_mazhukin

hdfs dfs -chmod -R 777 /data/test_dir_mazhukin_1

curl -i - -negotiate -u : -X PUT "http://node1.mtuci.cloud.ru:50070/webhdfs/v1/data/test_dir_mazhukin/test?op=RENAME&destination=/data/test_dir_mazhukin_1/"

curl -i - -negotiate -u : -X DELETE "http://node1.mtuci.cloud.ru:50070/webhdfs/v1/data/test_dir_mazhukin_1/test?op=DELETE&recursive=false"

Рисунок 15 – Выполнение команд