Интеграция с Apache Hive
Использование интеграции OpenLineage с Apache Hive.
Требования
- Apache Hive 3.1.3 (версия 4.0 пока не поддерживается)
- OpenLineage 1.34.0 или выше, рекомендуется 1.40.1+
- Запуск брокера сообщений
- (Опционально) http2kafka
Ограничения
-
Hive CLI не поддерживается. Требуется HiveServer2.
-
В версии OpenLineage 1.40.1 только следующие запросы обрабатываются как содержащие данные о lineage:
-
CREATE TABLE .. AS SELECT ... INSERT INTO ... SELECT ...
Другие типы запросов игнорируются интеграцией OpenLineage, включая:
CREATE TABLE ...,ALTER TABLE ...,TRUNCATE TABLE ...,DROP TABLE ....INSERT INTO ... VALUES ...,UPDATE,DELETE,MERGE.LOAD DATA,EXPORT,IMPORT.-
SELECTданных напрямую в клиент JDBC. -
Hive отправляет события при запуске пользовательской сессии, но не при ее завершении. Поэтому все сессии Hive в Data.Rentgen имеют статус
STARTED. -
В настоящее время нет возможности передавать теги заданий, смотри
Отображение сущностей
- Пользователь Hive + IP пользователя → Задача (Job) Data.Rentgen
- Сессия Hive → Запуск (Run) Data.Rentgen
- Запрос Hive → Операция (Operation) Data.Rentgen
Установка
Скачайте следующие JAR-файлы и поместите их в директорию /path/to/jars/ на машине с HiveServer2:
-
KafkaTransport:
-
HttpTransport (requires HTTP2Kafka):
Настройка
Измените конфигурационный файл hive-site.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Set Hive to stop complaining on unknown properties -->
<property>
<name>hive.conf.validation</name>
<value>false</value>
</property>
<!-- Set path to downloaded jars -->
<property>
<name>hive.aux.jars.path</name>
<value>/path/to/jars/</value>
</property>
<!-- Enable OpenLineage integration based on Hive hooks -->
<property>
<name>hive.server2.session.hook</name>
<value>io.openlineage.hive.hooks.HiveOpenLineageHook</value>
</property>
<property>
<name>hive.exec.post.hooks</name>
<value>io.openlineage.hive.hooks.HiveOpenLineageHook</value>
</property>
<property>
<name>hive.exec.failure.hooks</name>
<value>io.openlineage.hive.hooks.HiveOpenLineageHook</value>
</property>
<!-- Setup OpenLineage Kafka transport -->
<property>
<name>hive.openlineage.transport.type</name>
<value>kafka</value>
</property>
<property>
<name>hive.openlineage.transport.topicName</name>
<value>input.runs</value>
</property>
<property>
<name>hive.openlineage.transport.properties.bootstrap.servers</name>
<!-- Address should be accessible from HiveServer2 -->
<value>localhost:9093</value>
</property>
<property>
<name>hive.openlineage.transport.properties.security.protocol</name>
<value>SASL_PLAINTEXT</value>
</property>
<property>
<name>hive.openlineage.transport.properties.sasl.mechanism</name>
<value>SCRAM-SHA-256</value>
</property>
<property>
<name>hive.openlineage.transport.properties.sasl.jaas.config</name>
<value>org.apache.kafka.common.security.scram.ScramLoginModule required username="data_rentgen" password="changeme";</value>
</property>
<property>
<name>hive.openlineage.transport.properties.key.serializer</name>
<value>org.apache.kafka.common.serialization.StringSerializer</value>
</property>
<property>
<name>hive.openlineage.transport.properties.value.serializer</name>
<value>org.apache.kafka.common.serialization.StringSerializer</value>
</property>
<property>
<name>hive.openlineage.transport.properties.compression.type</name>
<value>zstd</value>
</property>
<property>
<name>hive.openlineage.transport.properties.acks</name>
<value>all</value>
</property>
<!-- Set default namespace for jobs -->
<property>
<name>hive.openlineage.namespace</name>
<value>hive://my.hive.host:10000</value>
</property>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Set Hive to stop complaining on unknown properties -->
<property>
<name>hive.conf.validation</name>
<value>false</value>
</property>
<!-- Set path to downloaded jars -->
<property>
<name>hive.aux.jars.path</name>
<value>/path/to/jars/</value>
</property>
<!-- Enable OpenLineage integration based on Hive hooks -->
<property>
<name>hive.server2.session.hook</name>
<value>io.openlineage.hive.hooks.HiveOpenLineageHook</value>
</property>
<property>
<name>hive.exec.post.hooks</name>
<value>io.openlineage.hive.hooks.HiveOpenLineageHook</value>
</property>
<property>
<name>hive.exec.failure.hooks</name>
<value>io.openlineage.hive.hooks.HiveOpenLineageHook</value>
</property>
<!-- Setup OpenLineage HttpTransport -->
<property>
<name>hive.openlineage.transport.type</name>
<value>http</value>
</property>
<property>
<name>hive.openlineage.transport.url</name>
<!-- http2kafka url, should be accessible from HiveServer2 -->
<value>http://localhost:8002</value>
</property>
<property>
<name>hive.openlineage.transport.endpoint</name>
<value>/v1/openlineage</value>
</property>
<property>
<name>hive.openlineage.transport.compression</name>
<value>gzip</value>
</property>
<property>
<name>hive.openlineage.transport.auth.type</name>
<value>api_key</value>
</property>
<property>
<name>hive.openlineage.transport.auth.apiKey</name>
<!-- Create a PersonalToken, and pass it here -->
<value>personal_token_AAAAAAAAAAAA.BBBBBBBBBBBBBBBBBBBBBBB.CCCCCCCCCCCCCCCCCCCCC</value>
</property>
<!-- Set default namespace for jobs -->
<property>
<name>hive.openlineage.namespace</name>
<value>hive://my.hive.host:10000</value>
</property>
</configuration>
Сбор и отправка данных о lineage
Подключитесь к интерфейсу JDBC вашего экземпляра HiveServer2, например, с помощью beeline или DBeaver.
После выполнения запроса интеграция отправит события о lineage в DataRentgen.
Note
По умолчанию задача (Job) создается с именем {username}@{clientIp}. Вы можете переопределить это имя, выполнив следующую команду:
SET hive.openlineage.job.name=my_session_name;
Просмотр результатов
Просмотрите страницы пользовательского интерфейса Jobs, чтобы увидеть, какая информация была извлечена OpenLineage и DataRentgen.







