Использование Sqoop
Импорт баз данных в кластер Yandex Data Processing из внешних источников выполняется с помощью утилиты Sqoop
-
сведения о формировании строк подключения и установке драйверов для Sqoop;
-
команды для импорта данных с помощью Sqoop в:
Примечание
Утилита Sqoop не поддерживается для кластеров Yandex Data Processing версии 2.0 и выше. В качестве альтернативы используйте функциональные возможности Apache Spark™
Формирование строки подключения JDBC
Строка подключения JDBC имеет вид:
jdbc:postgresql://<адрес_сервера_базы_данных>:5432/<имя_базы_данных>
Для Yandex Managed Service for PostgreSQL используйте строку с особым FQDN, который указывает на хост-мастер:
jdbc:postgresql://c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:6432/<имя_базы_данных>
Идентификатор кластера можно получить со списком кластеров в каталоге.
jdbc:mysql://<адрес_сервера_базы_данных>:3306/<имя_базы_данных>
Для Yandex Managed Service for MySQL® используйте строку с особым FQDN, который указывает на хост-мастер:
jdbc:mysql://c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:3306/<имя_базы_данных>
Идентификатор кластера можно получить со списком кластеров в каталоге.
Установка JDBC-драйвера
Чтобы Sqoop мог подключиться к базе данных через строку подключения JDBC, установите JDBC-драйвер:
Драйвер для Yandex Managed Service for PostgreSQL предустановлен в Yandex Data Processing, дополнительных действий не требуется.
Подключитесь по SSH к хосту подкластера Yandex Data Processing для хранения данных и выполните команду:
MYSQL_VER="8.0.25" && \
wget "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-${MYSQL_VER}.tar.gz" \
--output-document 'mysql-connector-java.tar.gz' && \
sudo tar -xf mysql-connector-java.tar.gz -C /var/lib/sqoop/ && \
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/var/lib/sqoop/mysql-connector-java-${MYSQL_VER}.jar
Примечание
Чтобы установить другую версию драйвера, измените в команде значение переменной MYSQL_VER
.
Импорт с помощью Sqoop
В Object Storage
Этот тип импорта доступен, если в кластере Yandex Data Processing активирован компонент Sqoop
.
Чтобы импортировать данные в бакет Object Storage:
-
При создании или изменении кластера Yandex Data Processing укажите имя бакета для импорта в Object Storage. Убедитесь, что сервисный аккаунт Yandex Data Processing имеет права на запись в этот бакет.
-
Сформируйте строки подключения для JDBC.
-
Подключитесь по SSH к хосту подкластера Yandex Data Processing для хранения данных.
-
Установите драйверы для работы Sqoop, если они еще не установлены.
-
Выполните команду:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \ --connect <строка_подключения_JDBC> \ --username <имя_пользователя_базы_данных> \ --P \ --table '<имя_таблицы_базы_данных>' \ --target-dir 's3a://<имя_бакета_для_импорта>/<директория_назначения>' \ --split-by '<столбец_таблицы>'
Где
--split-by
— столбец таблицы, используемый для разделения.Важно
Не указывайте имя существующей директории бакета.
В директорию HDFS
Этот тип импорта доступен, если в кластере Yandex Data Processing включены сервисы:
HBase
;HDFS
;Sqoop
;Yarn
;Zookeeper
.
Чтобы импортировать данные в директорию HDFS:
-
Сформируйте строки подключения для JDB.
-
Подключитесь по SSH к хосту подкластера Yandex Data Processing для хранения данных.
-
Установите драйверы для работы Sqoop, если они еще не установлены.
-
Выполните команду:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \ --connect <строка_подключения_JDBC> \ --username <имя_пользователя_базы_данных> \ --table '<имя_таблицы_базы_данных>' \ --target-dir '<директория_HDFS>' \ --P \ --split-by '<столбец_таблицы>'
Где
--split-by
— столбец таблицы, используемый для разделения.Важно
Не указывайте имя существующей директории HDFS.
В Apache Hive
Этот тип импорта доступен, если в кластере Yandex Data Processing включены сервисы:
HDFS
;Hive
;Mapreduce
;Sqoop
;Yarn
.
Чтобы импортировать данные в таблицу Hive:
-
При создании или изменении кластера Yandex Data Processing добавьте в свойства кластера ключ
hive:hive.execution.engine
со значениемmr
. -
Сформируйте строки подключения для JDBC.
-
Подключитесь по SSH к хосту подкластера Yandex Data Processing для хранения данных.
-
Установите драйверы для работы Sqoop, если они еще не установлены.
-
Создайте базу данных Hive:
hive -e "CREATE DATABASE <имя_базы_данных_Hive>;"
-
Выполните команду:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \ --connect <строка_подключения_JDBC> \ --username <имя_пользователя_исходной_базы_данных> \ --P \ --table '<имя_таблицы_в_исходной_базе_данных>' \ --hive-import \ --create-hive-table \ --hive-database '<имя_базы_данных_Hive>' \ --hive-table '<имя_таблицы_Hive>' \ --split-by '<столбец_таблицы>'
Где
--split-by
— столбец таблицы, используемый для разделения.Важно
Не указывайте имя существующей таблицы Hive.
В Apache HBase
Этот тип импорта доступен, если в кластере Yandex Data Processing включены сервисы:
HBase
;HDFS
;Sqoop
;Yarn
;Zookeeper
.
Чтобы импортировать данные в Apache HBase:
-
Сформируйте строки подключения для JDBC.
-
Подключитесь по SSH к хосту подкластера Yandex Data Processing для хранения данных.
-
Установите драйверы для работы Sqoop, если они еще не установлены.
-
Выполните команду:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \ --connect <строка_подключения_JDBC> \ --username <имя_пользователя_исходной_базы_данных> \ --P \ --table '<имя_таблицы_в_исходной_базе_данных>' \ --hbase-create-table \ --column-family '<семейство_столбцов_HBase>' \ --hbase-table '<имя_таблицы_HBase>' \ --split-by '<столбец_таблицы>'
Где
--split-by
— столбец таблицы, используемый для разделения.Важно
Не указывайте имя существующей таблицы HBase.