Подключение к Sqoop через CLI

Обзор

Sqoop предоставляет интерфейс командной строки, реализованный в виде сценария bin/sqoop. Чтобы взаимодействовать с Sqoop через CLI, подключитесь к хосту кластера с клиентом Sqoop через SSH и выполните нужную команду Sqoop CLI.

Например, проверьте версию, выполнив:

$ sqoop version

Пример вывода:

2024-05-21 13:44:12,685 (main) [INFO - org.apache.sqoop.Sqoop.<init>(Sqoop.java:94)] Running Sqoop version: 1.4.7_arenadata2
Sqoop 1.4.7_arenadata2

Команда sqoop help выводит список всех команд Sqoop. Вы можете вызвать справку для конкретной команды, выполнив sqoop help <название-команды>. Например: sqoop help import.

Команды имеют следующий синтаксис:

$ sqoop [COMMAND] [GENERIC_OPTIONS] [COMMAND_OPTIONS]

Здесь:

  • COMMAND — команда Sqoop CLI;

  • GENERIC_OPTIONS — общие аргументы командной строки Hadoop;

  • COMMAND_OPTIONS — параметры выбранной команды.

Пример использования

Sqoop предоставляет несколько инструментов, одним из которых является команда import-all-tables, которая позволяет копировать данные из базы данных в HDFS.

Ниже пример команды для копирования данных из базы данных PostgreSQL с именем test_db:

$ sqoop import-all-tables --connect jdbc:postgresql://127.0.0.1:5432/test_db --username <имя-пользователя> --password <пароль>

Здесь <имя-пользователя> и <пароль> — это учетные данные пользователя базы данных.

Примеры строк из вывода команды:

2024-05-22 17:30:07,477 (main) [INFO - org.apache.sqoop.manager.SqlManager.initOptionDefaults(SqlManager.java:98)] Using default fetchSize of 1000
2024-05-22 17:30:07,709 (main) [INFO - org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:91)] Beginning code generation
2024-05-22 17:30:07,718 (main) [INFO - org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:776)] Executing SQL statement: SELECT t.* FROM "test_db" AS t LIMIT 1
2024-05-22 17:30:07,747 (main) [INFO - org.apache.sqoop.orm.CompilationManager.findHadoopJars(CompilationManager.java:100)] HADOOP_MAPRED_HOME is /usr/lib/hadoop-mapreduce
2024-05-22 17:30:07,678 (main) [INFO - org.apache.sqoop.orm.CompilationManager.jar(CompilationManager.java:362)] Writing jar file: /tmp/sqoop-hdfs/compile/9f4a1740d29b617ea7bd61b54d16b63b/test_db.jar
...
2024-05-22 17:30:07,680 (main) [INFO - org.apache.sqoop.mapreduce.ImportJobBase.runJob(ImportJobBase.java:190)] Transferred 173 bytes in 19.1641 seconds (9.0273 bytes/sec)
2024-05-22 17:30:07,699 (main) [INFO - org.apache.sqoop.mapreduce.ImportJobBase.runJob(ImportJobBase.java:192)] Retrieved 7 records.

Чтобы проверить, правильно ли скопированы данные, выполните команду hdfs dfs -ls <директория>:

$ hdfs dfs -ls hdfs://adhdev/user/hdfs/test_db

В выводе команды должны появиться файлы с данными из БД:

Found 6 items
-rw-r--r--   3 hdfs hadoop          0 2024-05-22 17:29 hdfs://adhdev/user/hdfs/test_db/_SUCCESS
-rw-r--r--   3 hdfs hadoop         17 2024-05-22 17:29 hdfs://adhdev/user/hdfs/test_db/part-m-00000
-rw-r--r--   3 hdfs hadoop         13 2024-05-22 17:29 hdfs://adhdev/user/hdfs/test_db/part-m-00001
-rw-r--r--   3 hdfs hadoop         22 2024-05-22 17:29 hdfs://adhdev/user/hdfs/test_db/part-m-00002
-rw-r--r--   3 hdfs hadoop         17 2024-05-22 17:29 hdfs://adhdev/user/hdfs/test_db/part-m-00003
-rw-r--r--   3 hdfs hadoop         16 2024-05-22 17:29 hdfs://adhdev/user/hdfs/test_db/part-m-00004

При подключении к базе данных через Sqoop убедитесь, что:

  • В директории /var/lib/sqoop/ есть JDBC-драйвер для нужной базы данных и Sqoop имеет к нему доступ на чтение и запись.

  • Пользователь, чьи учетные данные используются для подключения к базе данных, имеет доступ ко всем таблицам БД.

  • Вы запускаете команду от имени пользователя, у которого есть доступ на запись в HDFS.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней