Учебное пособие по импорту и экспорту Sqoop — руководство для начинающих
2 марта 2023 г.В последнее время я изо дня в день работаю с Apache Sqoop, а также давно не делился своими знаниями с миром. 😜
Итак, вот учебник по импорту и экспорту Sqoop. Ожидайте, что это будет очень простой, но короткий и приятный учебник, так как даже я новичок в Apache Sqoop.
Начнем с ПОЧЕМУ Sqoop?
Sqoop используется всякий раз, когда необходимо передавать огромные объемы данных через Hadoop & Реляционные/структурированные базы данных, такие как Oracle или MySQL. Вы можете положиться на Sqoop, который сделает эту работу за вас эффективно.
Импорт Sqoop, как это подразумевается, используется для передачи данных из реляционных баз данных в файловую систему Hadoop (HDFS), а экспорт Sqoop делает обратное, то есть из Hadoop во внешние базы данных (RDBMS).
Sqoop имеет множество инструментов, 2 из которых — импорт и экспорт. Sqoop использует MapReduce для импорта и экспорта данных, что обеспечивает параллельную работу, а также отказоустойчивость.
Импорт Sqoop
Перейдем к основному заданию Sqoop Import; ниже приведены 2 основных типа для него:
1. Захватить весь стол
## specify tool being used
sqoop import
## arguments
-Dmapred.job.queue.name="<queue name>"
-Dmapreduce.map.memory.mb=1024
--connect <JDBC URL>
--username "<usename>"
--password "<password>"
--table <rdbms table name>
--hcatalog-database <hive database name>
--hcatalog-table <hive table name>
--hive-partition-key partition_date
--hive-partition-value <date>
--hcatalog-storage-stanza "<specify storage format>"
--num-mappers <number of mappers>
Здесь import - инструмент для импорта таблицы базы данных в HDFS, -Dmapred.job.queue.name используется для указания очереди, в которой вы хотите запустить задание sqoop; если вы не укажете, будет стоять очередь по умолчанию.
-Dmapreduce.map.memory.mb используется для указания памяти на ваших картографах; с помощью этого аргумента вы можете увеличить или уменьшить объем памяти для картографов.
—connect — это аргумент инструмента для подключения к базе данных, который использует строку подключения JDBC.
—username — это аргумент для установки имени пользователя для аутентификации.
— пароль — это аргумент для установки пароля аутентификации.
Примечание. Если у вас нет с собой пароля, вы можете использовать аргумент —password-file и передать путь к файлу параметров (файлу паролей), хранящемуся в HDFS.
—table — аргумент, указывающий, какую таблицу читать,
Здесь — база данных hcatalog, HCatalog — это служба хранения и управления таблицами для Hadoop. Этот аргумент указывает имя базы данных таблицы, в которую мы импортируем данные.
—hcatalog-table — это аргумент для указания имени таблицы, в которую мы импортируем данные.
—hive-partition-key используется для указания столбца разделения таблицы.
—hive-partition-value используется для указания, в какой раздел мы собираемся импортировать данные.
—hcatalog-storage-stanza используется для указания формата хранения таблицы.
— аргумент num-mappers используется для указания количества картографов, которые будет использовать задание.
Картографы — это не что иное, как ряд параллельных процессов, которые sqoop использует для импорта данных.
Примечание. Убедитесь, что в вашей таблице есть все столбцы из источника, т. е. таблица hcatalog, иначе ваша задача sqoop выдаст ошибку, а также столбец с секционированием имеет тип «строка».
Если вы не создали целевую таблицу для своего задания импорта, вы также можете использовать аргумент --create-hive-table и передать , чтобы создать таблицу для импорта sqoop на на ходу.
2. Sqoop только необходимые столбцы
Подождите! Что делать, если мне нужна не вся таблица, а только некоторые столбцы из исходной таблицы?
Вот как это сделать. Единственное дополнение к существующим аргументам
— столбцы, которые являются специфичным для инструмента аргументом для указания столбцов из исходной таблицы, которые вы хотите импортировать в свою таблицу.
## specify tool being used
sqoop import
## arguments
-Dmapred.job.queue.name="<queue name>"
-Dmapreduce.map.memory.mb=1024
--connect <JDBC URL>
--username "<usename>"
--password "<password>"
--table <source table name>
--hcatalog-database <hive database name>
--hcatalog-table <hive table name>
--columns "col1, col2, col3..."
--hive-partition-key partition_date
--hive-partition-value <date>
--hcatalog-storage-stanza "<specify storage format>"
--num-mappers 1
Экспорт Sqoop
Большая часть аргументов для экспорта sqoop осталась прежней, за исключением нескольких дополнений:
## specify tool being used
sqoop export
## arguments
-Dmapred.job.queue.name="<queue name>"
-Dmapreduce.map.memory.mb=1024
-Dsqoop.export.records.per.statement=<records per statement>
-Dsqoop.export.statements.per.transaction=<number of statements per transaction>
--connect <JDBC URL>
--username "<usename>"
--password "<password>"
--table <destination schema.destination table>
--hcatalog-database <database name>
--hcatalog-table <hive table name>
--hive-partition-key partition_date
--hcatalog-partition-values <partition from which to export>
--num-mappers 1
--update-key <primary key>
--update-mode allowinsert
Здесь -Dsqoop.export.records.per.statement подразумевает количество строк, которые sqoop должен экспортировать за один раз в СУБД; когда вы назначаете ему 100, вы просите sqoop экспортировать 100 строк за один раз.
-Dsqoop.export.statements.per.transaction используется для определения того, сколько таких операторов должно происходить за транзакцию.
— update-key используется для обновления записей в целевой таблице на основе переданного вами столбца; здесь это первичный ключ.
—update-mode позволяет вставлять новые записи в целевую таблицу, если они еще не существуют.
Примечание. Если пользователи не используют режим обновления для разрешения вставки с помощью ключа обновления, никакие новые записи не будут экспортированы sqoop в целевую таблицу; только столбцы в целевой таблице будут обновлены на основе первичного ключа.
Это все для учебника. Приятного чтения!
Оригинал