Подключение к 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.