Skip to content

Интеграция с Apache Hive

Использование интеграции OpenLineage с Apache Hive.

Требования

Ограничения

  • 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:

Настройка

Измените конфигурационный файл hive-site.xml:

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>
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 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.

Страница списка заданий (Job)

список заданий (Job)

Страница деталей задания (Job)

детали задания (Job)

Страница деталей запуска (Run)

детали запуска (run)

Страница деталей операции

детали операции

Lineage на уровне набора данных (dataset)

dataset lineage

Lineage на уровне задания (Job)

Job lineage

Линидж на уровне запуска (Run)

run lineage

lineage на уровне операции

lineage операции