Главная страница

Методы анализа данных 2 практика. 2 практика. Исследование данных с помощью Sqoop для рсубд (MariaDB)


Скачать 3.51 Mb.
НазваниеИсследование данных с помощью Sqoop для рсубд (MariaDB)
АнкорМетоды анализа данных 2 практика
Дата27.10.2022
Размер3.51 Mb.
Формат файлаdocx
Имя файла2 практика.docx
ТипИсследование
#757963

Исследование данных с помощью Sqoop для РСУБД (MariaDB)


В этой практической работе вам предстоит импортировать и экспортировать таблицы из РСУБД в HDFS (Hadoop Distributed Filesystem), используя Sqoop.

Импортирование таблицы в HDFS с использованием Sqoop.

Начну с получения информации о базах данных и таблицах в них перед импортированием таблиц в HDFS.

  1. В терминале авторизуюсь в MariaDB и выберите базу данных labs.



Замечание: Если вы не введете ничего в качестве пароля (password), то он будет запрошен:

$ mysql -u student -p labs

Введите "student".

  1. Если авторизация прошла успешно, то приглашение для ввода сменится на "MariaDB [labs]>". Введите команду для проверки того, какие базы данных доступны.



Рисунок 1. Список баз данных в MariaDB

  1. Затем введите команду для просмотра таблиц в базе labs:



Рисунок 2. Список названий таблиц в БД labs

На экране отображены таблицы authors и posts.

Эти таблицы мы будем импортировать и экспортировать через команды Sqoop.

Замечание: Команды desc и describe выполняют одно и то же.



Рисунок 3. Структура таблиц authors и posts

  1. Посмотрим на структуру таблиц authors и post, а также на несколько записей оттуда.



  1. Для выхода из MariaDB напишите quit и нажмите Enter.



  1. Для получения помощи по базовым командам sqoop запустите следующую команду:



  1. Для получения детализированной информации по каждой подкоманде, введите ее название после help. Например, для получения справки по команде import, выполните следующую команду:



  1. Просмотр списка баз данных в MariaDB и таблиц в базе данных labs осуществляется следующей командой:



Результат выполнения этой команды совпадает с тем, что мы видели на рисунке 1.

Замечание: альтернативой использованию аргумента --password является использование ключа -P (заглавная буква) и ввод пароля при запросе. При этом вводимые символы будут невидимы.



В результате выполнения этой команды будут выведены таблицы authors, aythors_export и posts.

  1. Импортируем все таблицы в базе labs используя команду import-all-tables.



Замечание: в Sqoop хоть и есть команда import-all-table, на практике она редко используется.

Причина в том, что эта команда за раз выполняет много задач. Постарайтесь по возможности ее больше не использовать.

В реальных средах обычно сотни баз данных с тысячами таблиц в каждой, поэтому используйте эту команду только для тестов.

Обычно импортирование даже одной таблицы занимает много времени. В большинстве случаев используйте команду import.

  1. Выполните эту команду для получения таблицы posts из базы labs и сохранения последней в HDFS:





После выполнения этой команды создастся директория posts в домашней директории HDFS /user/student, а данные сохранятся как показано ниже:



Рисунок 4. Список постов в HDFS

  1. Создаем целевую директорию в HDFS для импортирования данных в нее.

$hdfs dfs -mkdir /mywarehouse

  1. Импортируем таблицу authors и сохраняем ее в директорию HDFS, которую мы создали выше, используя ‘,’ для разделения полей.

Замечание: аргумент --field-terminated-by ‘,’ используется для задания запятой в качестве разделителя полей в HDFS файле. Если вы хотите работать с Hive или Spark, то лучше использовать ‘\t’ вместо ‘,’.

$ sqoop import --connect jdbc:mysql://localhost/labs \

--username student --password student \

--table authors --fields-terminated-by ',' \

--target-dir /mywarehouse/authors



  1. Для проверки воспользуемся командой hdfs по целевой директории.

$ hdfs dfs -ls /mywarehouse/authors

$ hdfs dfs -cat /mywarehouse/authors/part-m-00000



Рисунок 5. Список файлов в /mywarehouse/authors

Если запустить команду cat, вы сможете увидеть, что каждая строка данных отделена от соседней знаком ‘,’, что отличается от того, что было в файле posts (там были табуляции) в HDFS.

  1. Импортирование определенных столбцов осуществляется указанием аргумента --columns для папки authors в домашней директории HDFS. Импортируемые столбцы: first_name, last_name, email

$ sqoop import --connect jdbc:mysql://localhost/labs --username student --password student --table authors --fields-terminated-by '\t' --columns "first_name, last_name, email"



Рисунок 6. Результаты команды Sqoop

  1. Импортируем только подходящие строки с помощью --where. Для примера импортируем строки из таблицы authors, где first_name указано, как ‘Dorthy’.

$ sqoop import --connect jdbc:mysql://localhost/test --username student --password student --table authors --fields-terminated-by '\t' --where "first_name='Dorthy'" --target-dir authors_Dorthy

Замечание: вывод работ (job) Hadoop сохраняется в один или более файлов разделов (partition). Обычно создаются 4 файла, а результаты запроса помещаются в произвольный файл.



  1. Импортируем таблицу, используя другой формат файла, вместо простого текстового. Импортируем таблицу authors в файл формата Parquet:

$sqoop import --connect jdbc:mysql://localhost/labs --username student --password student --table authors --target-dir /mywarehouse/authors_parquet --as-parquetfile



  1. Смотрим результат при помощи отображения содержимого целевой директории HDFS:



Figure 7. Список файлов Parquet

Каждому файлу Parquet дано уникальное имя, например, 5e44cda6-728c-4912-864a-94d0659930f3.parquet. Данные в этом формате нельзя просмотреть напрямую, так как формат двоичный. Для просмотра записей в таких файлах используйте команду parquet-tools show. Сначала нужно получить файл parquet на локальный узел, а затем запустить команду parqet-tools:

$ hdfs dfs -get /mywarehouse/authors_parquet/5e44cda6-728c-4912-864a-94d0659930f3.parquet

$ parquet-tools show 5e44cda6-728c-4912-864a-94d0659930f3.parquet



  1. Импортируем таблицу authors, используя сжатие (аргумент --compress или -z):

$ sqoop import --connect jdbc:mysql://localhost/labs --username student --password student --table authors --target-dir /mywarehouse/authors_compressed --compress



Рисунок 8. Список сжатых файлов

  1. Импортируем строки, где first_name указано, как «Dorthy» (мы уже делали это в шаге 15) и сохраняем результат в папку dorthy в домашней директории HDFS:

$ sqoop import --connect jdbc:mysql://localhost/labs --username student --password student --table authors --fields-terminated-by '\t' --where "first_name='Dorthy'" --target-dir dorthy

Экспортируем сохраненную папку dorthy в качестве таблицы в базу данных labs:

$sqoop export --connect jdbc:mysql://localhost/labs --username student --password student --table authors_export --fields-terminated-by '\t' --export-dir dorthy



  1. Посмотрим содержимое экспортированных записей в MariaDB:



Рисунок 9. Экспортированные записи в MariaDB

Создайте целевую директорию в HDFS для импортирования данных таблицы из базы labs (/tmp/mylabs).

Из таблицы posts импортируйте первичный ключ, заголовки постов, дату публикации в директорию HDFS /tmp/mylabs/posts_info. Сохраните файл в текстовом формате с табуляциями в качестве разделителей.

Подсказка: вам необходимо выяснить названия нужных столбцов, используя команды sqoop, а не напрямую в MariaDB.





Теперь сохраните то же самое, только в формате parquet со сжатием snappy в папке /tmp/mylabs/posts_compressed.



Из окна терминала отобразите несколько записей из тех, что вы только что проимпортировали.

Импортируйте столбцы id, first_name, last_name, birthdate из таблицы authors в домашнюю директорию HDFS. Файл сохраните в текстовом формате с табуляциями в качестве разделителей.

Подсказка: если директория authors уже существует в домашней директории HDFS, удалите ее и только потом выполните команду import.





    1. Импортируйте и сохраните в директории /tmp/mylabs/posts_NotN те посты, название которых не NULL. Импортируйте только следующие столбцы: id, title, content. Сохраните файл в формате parquet, а для сжатия используйте кодек snappy.





Подсказка: выражение SQL для проверки того, что значение в столбце не NULL: "название_столбца is not NULL"

SQL будет объяснен на лекции.


написать администратору сайта