Облачная платформаAdvanced

Подключение MRS Hive к Cluster

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

В сценариях аналитики больших данных Hive превосходит в пакетной обработке массивных наборов данных, тогда как Elasticsearch обеспечивает поиск и аналитику в реальном времени. Интеграция этих систем является ключом к преодолению разрыва между масштабной пакетной обработкой и поиском с низкой задержкой, эффективно разрушая силосы данных. С помощью коннектора ES-Hadoop (Elasticsearch for Apache Hadoop) можно интегрировать MRS Hive с CSS Elasticsearch, позволяя Hive напрямую читать и записывать данные Elasticsearch в виде внешних таблиц. Такой подход сохраняет привычные рабочие процессы экосистемы Hadoop, обеспечивая задержку поиска уровня секунды.

Решение

ES-Hadoop — это библиотека коннектора, интегрирующая Elasticsearch с экосистемой Hadoop, позволяющая MapReduce, Hive и Spark напрямую читать из индексов Elasticsearch и записывать в них.

В сценарии интеграции MRS Hive‑Elasticsearch ES-Hadoop выступает в качестве слоя трансляции запросов: при выполнении SQL‑запросов в Hive ES‑Hadoop преобразует план выполнения Hive в запросы Elasticsearch, отправляемые по протоколу REST.

Рисунок 1 Подключение MRS Hive к Elasticsearch cluster


Для получения дополнительной информации о ES-Hadoop и Hive см. официальный документ Apache Hive integration.

Предварительные условия

  • Убедитесь, что кластеры CSS и MRS находятся в одном регионе, AZ, VPC и подсети, чтобы они были соединены друг с другом.
  • Скачайте пакет установки ES-Hadoop и распакуйте его, чтобы получить файл elasticsearch-hadoop-x.x.x.jar. Сохраните версию ES-Hadoop согласованной с версией кластера CSS. Например, используйте ES-Hadoop 7.6.2 с Elasticsearch 7.6.2.

    Адрес загрузки: https://www.elastic.co/downloads/hadoop

  • Скачайте пакет зависимости HttpClient commons-httpclient-x.x.jar. Рекомендуется версия 3.1 или новее.

    Адрес загрузки: https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient

  • Получите приватный сетевой адрес кластера CSS.

Подключение MRS Hive к Elasticsearch Cluster

  1. Проверьте сетевую связность между MRS и CSS.
    1. Получите частный сетевой адрес целевого кластера Elasticsearch.
    2. Запустите команду cURL на каждом узле кластера MRS, чтобы убедиться, что он может подключиться к кластеру CSS Elasticsearch.
      • Для кластера с отключённым режимом безопасности:
        curl -X GET http://<host>:<port>
      • Для кластера в режиме безопасности, использующего HTTP:
        curl -X GET http://<host>:<port> -u <user>:<password>
      • Для кластера в режиме безопасности, использующего HTTPS:
        curl -X GET https://<host>:<port> -u <user>:<password> -ik
      Table 1 Variables

      Variable

      Description

      host

      IP-адрес каждого узла в кластере. Если кластер содержит несколько узлов, будет несколько IP-адресов. Вы можете использовать любой из них.

      port

      Номер порта для доступа к узлу кластера. Обычно номер порта — 9200.

      user

      Имя пользователя для доступа к кластеру.

      пароль

      Пароль пользователя.

      If the password contains special characters, enclose the username and password in single quotation marks, for example, curl -u "user:password!" "http://<host>:<port>".

  2. Загрузите пакет ES-Hadoop и пакет зависимостей в HDFS. Убедитесь, что все вычислительные узлы Hive могут получить доступ к драйверу ES-Hadoop.
    1. Загрузите загруженный elasticsearch-hadoop-x.x.x.jar и commons-httpclient-x.x.jar в клиент MRS.
    2. Создайте каталог HDFS на машине клиента MRS и сохраните файлы JAR в этом каталоге.
      hadoop fs -mkdir /tmp/hadoop-es
      hadoop fs -put elasticsearch-hadoop-x.x.x.jar /tmp/hadoop-es
      hadoop fs -put commons-httpclient-x.x.jar /tmp/hadoop-es
  3. (Необязательно) Преобразуйте и распределите сертификат безопасности. При подключении к кластеру Elasticsearch в режиме безопасности, использующему HTTPS, убедитесь, что среда Java доверяет самоподписанному сертификату Elasticsearch.
    1. Получите сертификат безопасности CloudSearchService.cer.
      1. Войдите в консоль управления CSS.
      2. В левой панели навигации выберите Clusters > Elasticsearch.
      3. В списке кластеров нажмите имя целевого кластера. Отобразится страница информации о кластере.
      4. Нажмите вкладку Overview. В области Network Information нажмите Download Certificate под HTTPS Access.
    2. Преобразуйте сертификат безопасности. Загрузите загруженный сертификат безопасности в клиент и используйте keytool для преобразования сертификата .cer в сертификат .jks, который может быть прочитан Java.
      • В Linux выполните следующую команду для преобразования сертификата:
        keytool -import -alias newname -keystore ./truststore.jks -file ./CloudSearchService.cer
      • В Windows выполните следующую команду для преобразования сертификата:
        keytool -import -alias newname -keystore .\truststore.jks -file .\CloudSearchService.cer

      В предыдущей команде newname указывает пользовательское имя сертификата.

      После выполнения этой команды вам будет предложено задать пароль сертификата и подтвердить пароль. Надёжно сохраните пароль. Он будет использоваться для доступа к кластеру.

    3. Распределите сертификат безопасности. Выполните команду scp для распределения файла сертификата .jks в тот же каталог на всех узлах кластера MRS, например, /tmp. Убедитесь, что у пользователя omm есть разрешение на чтение этого файла. Вы можете выполнить следующую команду для установки разрешения:
      chown -R omm truststore.jks
  4. Инициализируйте сеанс Hive. Загрузите драйвер ES-Hadoop в текущий процесс Hive.
    1. Войдите в клиент Hive из клиента MRS.
    2. В клиенте Hive введите beeline или hive, чтобы перейти на страницу выполнения и выполнить следующие команды:
      add jar hdfs:///tmp/hadoop-es/commons-httpclient-3.1.jar;
      add jar hdfs:///tmp/hadoop-es/elasticsearch-hadoop-x.x.x.jar;

      Эта команда действительна только для текущего сеанса.

  5. Создайте внешнюю таблицу Hive и свяжите её с индексом Elasticsearch, сопоставив структуру таблицы Hive с полями индекса Elasticsearch.

    • Для кластера с отключённым режимом безопасности:
      CREATE EXTERNAL table IF NOT EXISTS student(
      id BIGINT,
      name STRING,
      addr STRING
      )
      STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
      TBLPROPERTIES(
      'es.nodes' = 'xxx.xxx.xxx.xxx:9200',
      'es.port' = '9200',
      'es.net.ssl' = 'false',
      'es.nodes.wan.only' = 'false',
      'es.nodes.discovery'='true',
      'es.input.use.sliced.partitions'='false',
      'es.resource' = 'student/_doc'
      );
    • Для кластера в режиме безопасности, использующего HTTP:
      CREATE EXTERNAL table IF NOT EXISTS student(
      id BIGINT,
      name STRING,
      addr STRING
      )
      STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
      TBLPROPERTIES(
      'es.nodes' = 'xxx.xxx.xxx.xxx:9200',
      'es.port' = '9200',
      'es.net.ssl' = 'false',
      'es.nodes.wan.only' = 'false',
      'es.nodes.discovery'='true',
      'es.input.use.sliced.partitions'='false',
      'es.nodes.client.only'='true',
      'es.resource' = 'student/_doc',
      'es.net.http.auth.user' = 'username',
      'es.net.http.auth.pass' = 'password'
      );
    • Для кластера в режиме безопасности, использующего HTTPS:
      CREATE EXTERNAL table IF NOT EXISTS student(
      id BIGINT,
      name STRING,
      addr STRING
      )
      STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
      TBLPROPERTIES(
      'es.nodes' = 'https://xxx.xxx.xxx.xxx:9200',
      'es.port' = '9200',
      'es.net.ssl' = 'true',
      'es.net.ssl.truststore.location' = 'certFilePath',
      'es.net.ssl.truststore.pass' = 'certPassword',
      'es.nodes.wan.only' = 'false',
      'es.nodes.discovery'='true',
      'es.nodes.client.only'='true',
      'es.input.use.sliced.partitions'='false',
      'es.resource' = 'student/_doc',
      'es.net.http.auth.user' = 'username',
      'es.net.http.auth.pass' = 'password'
      );
    Таблица 2 ES-Hadoop parameters

    Параметр

    Значение по умолчанию

    Описание

    es.nodes

    localhost

    Адрес для доступа к кластеру Elasticsearch.

    es.port

    9200

    Номер порта для доступа к кластеру. Обычно это 9200.

    es.nodes.wan.only

    false

    Нужно ли выполнять обнаружение узлов.

    es.nodes.discovery

    true

    Нужно ли отключать обнаружение узлов. Сохраните настройку по умолчанию.

    es.input.use.sliced.partitions

    true

    Нужно ли использовать срезы.

    Значение может быть:

    • true
    • false

    Когда этот параметр установлен в true, фаза предварительной выборки может занимать гораздо больше времени, чем фактический запрос. Рекомендуется установить его в false для повышения эффективности запроса.

    es.resource

    NA

    Целевой индекс и тип.

    es.net.http.auth.user

    NA

    Имя пользователя для доступа к кластеру. Установите этот параметр только если включён режим безопасности.

    es.net.http.auth.pass

    NA

    Пароль пользователя. Установите этот параметр только если включён режим безопасности.

    es.net.ssl

    false

    Указывает, включён ли SSL.

    Значение может быть:

    • true: SSL включён, и требуется сертификат безопасности.
    • false: SSL отключён.

    es.net.ssl.truststore.location

    NA

    Путь к файлу сертификата .jks, например, file:///tmp/truststore.jks.

    es.nodes.client.only

    false

    Указывает, имеет ли кластер Elasticsearch выделенные клиентские узлы.

    Значение может быть:

    • true: Кластер имеет выделенные клиентские узлы.
    • false: Кластер не имеет выделенных клиентских узлов.

    es.net.ssl.truststore.pass

    NA

    Пароль к файлу сертификата .jks.

    Для получения подробной информации о параметрах конфигурации ES-Hadoop см. official configuration description.

  6. Проверьте результат.
    1. Вставьте данные в клиент Hive.
      INSERT INTO TABLE student VALUES (1, "Lucy", "address1"), (2, "Lily", "address2");
    2. Выполните запрос данных в клиенте Hive.
      select * from student;

      Результат запроса выглядит следующим образом:

      +-------------+---------------+---------------+
      | student.id | student.name | student.addr |
      +-------------+---------------+---------------+
      | 1 | Lucy | address1 |
      | 2 | Lily | address2 |
      +-------------+---------------+---------------+
      2 rows selected (0.116 seconds)
    3. В консоли Kibana выполните поиск вышеуказанных данных и проверьте их постоянство.
      1. В списке кластеров Elasticsearch найдите целевой кластер и нажмите Kibana в столбце Operation, чтобы войти в консоль Kibana.
      2. В левой панели навигации Kibana выберите Dev Tools.

        Левая часть консоли представляет собой поле ввода команд, а треугольный значок в её правом верхнем углу является кнопкой выполнения. Правая часть отображает результат выполнения.

      3. Выполните следующую команду запроса и проверьте результат.
        GET /student/_search

        Рисунок 2 результат запроса Kibana