 
        
        МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Математическая кибернетика и информационные технологии»
Дисциплина «Большие данные»
Практическая работа №1
Москва, 2024
Оглавление
1 Техническое задание 1 3
2 Ход выполнения задания 1 3
3 Техническое задание 2 3
4 Ход выполнения задания 2 4
5 Работа с UI 13
5 Вывод 17
1 Техническое задание 1
Цель работы: получить навыки работы с файловой системой HDFS.
Задание: требуется выполнить вход на хост с использованием протокола SSH, используя команду в формате "ssh username@<IP-адрес>". При первой попытке входа на хост необходимо сменить пароль.
2 Ход выполнения задания 1
На рисунке 1 показан вход на хост с использованием протокола SSH, и смена пароля входа.
 
Рисунок 1 – Вход на хост и смена пароля
3 Техническое задание 2
- Создайте локальный тестовый файл, используя команду "echo "test text" >> test". 
- Увеличьте размер файла, чтобы он превышал размер одного блока HDFS, используя команду "fallocate –l 777M test". 
- Создайте новую директорию в HDFS по пути "/data/test_dir". 
- Положите файл "test" в HDFS по пути "/data/test_dir/test", используя команду "hdfs dfs -put test /data/test_dir/". 
- Скопируйте директорию "/data/test_dir" в "/data/test_dir_1", используя команду "hdfs dfs -cp /data/test_dir /data/test_dir_1". 
- Удалите файл "test" из директории "test_dir_1" без сохранения файла в корзине, используя команду "hdfs dfs -rm /data/test_dir_1/test". 
- Просмотрите размер любой директории, используя команду "hdfs dfs -du -h /data/test_dir". 
- Просмотрите, как файл "/data/test_dir/test" хранится на файловой системе с помощью команды "hdfs fsck /data/test_dir/test". 
4 Ход выполнения задания 2
На рисунке 2 показано создание локального тестового файла, используя команду "echo 'test text' >> test" и проверка, с помощью команды "cat test".
 
Рисунок 2 – Создание локального тестового файла
На рисунке 3 показан процесс создания локального тестового файла "test" размером 777 мегабайт с использованием команды "fallocate -l 777M test", а также результат выполнения команды "du -m test", показывающий, что размер файла действительно составляет 777 мегабайт.
 
Рисунок 3 – Увеличение размера файла
На рисунке 4 показана команда "hdfs dfs -mkdir /data/test_dir_smirnov" используемая для создания новой директории внутри файловой системы HDFS, а также команда "hdfs dfs -ls /data", показывающая список папок, находящихся внутри папки "data" в HDFS (рисунок 5), который теперь содержит нашу новую директорию "test_dir_smirnov".
 
Рисунок 4 – Создание новой директории
 
Рисунок 5 – Список папок, находящихся внутри папки "data" в HDFS
На рисунке 6 показана команда "hdfs dfs -put test/data/test_dir_smirnov", используемая для копирования из локальной системы в HDFS локального файла "test" в директорию "test_dir_smirnov" в файловой системе HDFS, а также команда "hdfs dfs -ls /data/test_dir_smirnov", показывающая список файлов, находящихся внутри директории "test_dir_smirnov".
 
Рисунок 6 – Копирование файла "test" в директорию "test_dir_smirnov"
На рисунке 7 изображена команда "hdfs dfs -cp/data/test_dir_smirnov /data/test_dir_smirnov_1", с помощью которой происходит копирование директории "test_dir_smirnov" с изменением имени на "test_dir_smirnov_1". Команда "hdfs dfs -ls /data" используется для проверки успешного копирования директорий.
 
 
Рисунок 7 - Копирование директории "test_dir_smirnov" с изменением имени на "test_dir_smirnov_1"
На рисунке 8 представлены команды "hdfs dfs -rm -skipTrash /data/test_dir_smirnov_1/test" для удаления файла "test" из директории "test_dir_smirnov_1", "-skipTrash" – команда указывает на то, что файлы должны быть удалены без отправки их в Корзину, а также команда "hdfs dfs -ls /data/test_dir_smirnov_1", показывающая содержимое директории после удаления файла и подтверждающая успешное выполнение операции.
 
Рисунок 8 - Удаление файла "test" из директории "test_dir_smirnov_1"
На рисунке 9 представлена команда "hdfs dfs -du -h /data/test_dir_smirnov", позволяющая определить размер директории "test_dir_smirnov" в HDFS.
 
Рисунок 9 – Определение размера директории "test_dir_smirnov" в HDFS
На рисунке 10 показано выполнение проверки HDFS с использованием команды "hdfs fsck /data/test_dir_smirnov/test, для просмотра хранения файла на файловой системе.
 
Рисунок 10 – Хранение файла на файловой системе
- Какой фактор репликации установлен на кластере? 
Ответ: 3
- Сколько блоков составляют файл? 
Ответ: 7
При выполнении команды fsck появилась строчка
 
Команда fsck также использует WebHDFS API.
- Выполним команду hdfs fsck /data/test_dir_smirnov/test -blocks -files –locations. "files" относится к файлам, хранящимся в HDFS. "blocks" являются минимальными единицами данных в HDFS. "locations" относятся к физическим узлам данных, на которых хранятся реплики блоков. 
 
Рисунок 11 – Вывод информация о каждом блоке, из которого состоит файл
На рисунке 12 представлена информация о первом блоке.
 
Рисунок 12 – Информация о первом блоке
- Заполните таблицу для данных первого блока Вашего тестового файла 
| 0. | Номер блока по порядку | 
| BP-2089730104-192.168.0.3-1694299343161 | Идентификатор block pull | 
| blk_1074431084 | Идентификатор блока | 
| 690502 | Generation stamp. | 
| len=134217728 | Объем блока | 
| Live_repl=3 | Количество живых реплик блока | 
| DatanodeInfoWithStorage[192.168.0.6:50010 | IP-адрес и порт, по которому доступен блок | 
| DS-1dc216c9-2a5f-488e-b078-213648c850b1 | Data Storage ID идентификатор ноды (Если у ноды изменится hostname или IP-адрес, нода всё равно будет идентифицироваться внутри HDFS) | 
| DISK | Способ хранения блока (Может также хранится в S3-хранилище) | 
Также с помощью команды можно узнать подробную информацию о состоянии конкретного блока данных (hdfs fsck -blockId blk_1074431084).
- Скопируйте результат работы команды для любого из блоков, составляющих ваш тестовый файл. Какие данные мы получили? 
 
Рисунок 13 – Вывод информации о блоке
Выполним несколько команд через HDFS REST API. Так как на кластерах SDP Hadoop по умолчанию включена аутентификация kerberos, будем использовать соответствующий синтаксис команд:
- Выполним вывод информации о файле /data/test_dir/test: 
curl -i --negotiate -u : http://node1.mtuci.cloud.ru:50070/webhdfs/v1/data/test_dir_smirnov/test?op=GETFILESTATUS
- Какая информация выводится в результате работы команды? 
 
Рисунок 14 – Вывод информации о файле data/test_dir_smirnov/test
- HTTP/1.1 200 OK: Эта строка указывает на успешный ответ сервера с кодом состояния 200. 
- Date: Thu, 26 Sep 2024 16:56:31 GMT: Эта строка указывает на дату и время ответа сервера. 
- Cache-Control: no-cache: Этот заголовок указывает на то, что ответ не должен кэшироваться на клиентской стороне или промежуточных серверах. 
- Expires: Thu, 26 Sep 2024 16:56:31 GMT: Этот заголовок указывает на то, что ресурс будет считаться устаревшим после указанной даты и времени. 
- Pragma: no-cache: Этот заголовок указывает на то, что ответ не должен кэшироваться. 
- X-FRAME-OPTIONS: SAMEORIGIN: Этот заголовок указывает на опции фрейма X-Frame, определяющие, какие сайты имеют право встраивать данный контент внутри фрейма. 
- Content-Type: application/json: Этот заголовок указывает на тип содержимого ответа, который в данном случае является JSON-данными. 
- Transfer-Encoding: chunked: Этот заголовок указывает на способ передачи содержимого, в данном случае содержимое передается блоками переменной длины. 
- {"FileStatus":{...}}: Это фрагмент JSON-данных, содержащий информацию о файле. В нем указаны различные свойства файла, такие как: 
- Время доступа (accessTime), 
- Размер блока (blockSize) 
- Количество дочерних элементов (childrenNum), 
- Идентификатор файла (fileId), 
- Группа владельца файла (group), 
- Длина файла (length), 
- Время изменения файла (modificationTime), 
- Владелец файла (owner), 
- Суффикс пути файла (pathSuffix), 
- Разрешение доступа к файлу (permission), репликация файла (replication), хранилище файла (storagePolicy) и тип файла (type). 
- Теперь попробуем прочитать первые 10 символов тестового файла, используя тот же синтаксис команды: 
 
Рисунок 15 – Попытка прочитать первые 10 символов тестового файла
| sber-node | Адрес ноды, на которой установлен клиент hdfs | 
| 50070 | Порт подключения к REST API | 
| --negotiate | включаем SPNEGO в curl | 
| /webhdfs/v1 | Адрес Web API | 
| /data/test_dir_smirnov/test | Путь к нужному файлу в HDFS | 
| op= | Производимое действие | 
| length= | Желаемая длина считывания символов | 
- Почему мы не получили требуемых данных? Ответ: Не полный путь обращение к node. 
- Проанализируйте ссылку раздела location из ответа сервера. 
- Для того, чтобы получить желаемые данные мы можем добавить в curl-запрос флаг -L (location). Эта опция заставит Curl повторить запрос для нового адреса, который мы получили ранее в Location. 
 
Рисунок 16 – Вывод нужной информации
- Скопируйте файл /test из /data/test_dir в test_dir_1 и удалите его /data/test_dir_1/test с помощью curl-команды. Приложите скриншоты. 
-sh-4.2$ hdfs dfs -chmod -R 777 /data/test_dir_smirnov
-sh-4.2$ hdfs dfs -chmod -R 777 /data/test_dir_smirnov_1
-sh-4.2$ curl -i - -negotiate -u : -X PUT "http://node1.mtuci.cloud.ru:50070/webhdfs/v1/data/test_dir_smirnov/test?op=RENAME&destination=/data/test_dir_smirnov_1/"
-sh-4.2$ curl -i --negotiate -u : -X DELETE "http://node1.mtuci.cloud.ru:50070/webhdfs/v1/data/test_dir_smirnov_1/test?op=DELETE&recursive=false"
 
Рисунок 17 – Выполнение команд
