Использование CLI для установки Impala в Kubernetes

Требования

Для развертывания Impala в Kubernetes с помощью CLI необходимы:

  • Кластер Kubernetes (версии 1.32 или более поздней) с настроенным доступом через kubectl.

  • CLI-утилита, извлеченная из offline-пакета.

  • Извлеченные и загруженные в ваш репозиторий образы:

    • hub.arenadata.io/adc-enterprise/impala-operator:<version>

    • hub.arenadata.io/adh-enterprise/impala-docker:<version>

    Эти артефакты присутствуют в offline-пакете, который можно запросить у службы поддержки Arenadata.

  • Функционирующий ADH-кластер (версии 4.2.0 или более поздней) со следующими сервисами:

    • Core configuration

    • ADPG

    • Zookeeper

    • HDFS

    • YARN

    • Hive

    Сервис Impala будет запущен вне кластера ADH — в подах Kubernetes (pod) и будет взаимодействовать с сервисами ADH по сети.

Настройки безопасности описаны ниже.

  • Ranger

  • Kerberos + SSL

Если вы планируете интегрировать Impala с Ranger, вам необходим установленный и функционирующий кластер ADPS версии 2.0.0 или более поздней. Также вам необходимо создать сервис для Impala в Ranger.

На данном шаге описывается создание сервиса с помощью REST API Ranger. Вы также можете создать сервис в веб-интерфейсе Ranger.

  1. Создайте конфигурацию сервиса в JSON-файле:

    {
      "isEnabled": true,
      "type": "hive",
      "name": "impala_k8s", (1)
      "displayName": "impala_k8s",
      "description": "Service for Kubernetes Impala",
      "configs": {
        "username": "impala", (2)
        "password": "bigdata",  (3)
        "ranger.plugin.audit.filters": "[ {'accessResult': 'DENIED', 'isAudited': true}, {'actions':['METADATA OPERATION'], 'isAudited': false}, {'users':['hive','hue'],'actions':['SHOW_ROLES'],'isAudited':false} ]",
        "jdbc.driverClassName": "org.apache.hive.jdbc.HiveDriver",
        "jdbc.url": "jdbc:impala://10.92.41.149:21050" (4)
      }
    }
    1 Наименование сервиса Impala в Ranger. Данное имя должно быть уникальным.
    2 Имя пользователя для сервиса.
    3 Пароль для сервиса.
    4 JDBC-строка подключения к Impala, предоставляемая балансировщиком нагрузки.
  2. Загрузите конфигурацию сервиса в Ranger:

    $ curl -u admin:<admin_pwd> -H "Content-Type: application/json" -X POST -d @ranger-impala-k8s.json http://<ranger-admin>:6080/service/public/v2/api/service
  1. Активируйте SSL для кластера ADH и ADPS, если планируете использовать SSL и Ranger.

  2. Для доступа к веб-интерфейсу Impala и JDBC-соединений сгенерируйте сертификаты для Ingress и балансировщика нагрузки:

    $ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout impala-cloud.ru-central1.internal.key -out impala-cloud.ru-central1.internal.crt -subj "/CN=impala-cloud.ru-central1.internal"
    $ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout impala-jdbc.ru-central1.internal.key -out impala-jdbc.ru-central1.internal.crt -subj "/CN=impala-jdbc.ru-central1.internal"
  3. Извлеките и загрузите образ оператора Kerberos в ваш репозиторий.

  4. Инициализируйте оператор Kerberos:

    $ ./adc operators init --kerberos -o operator-kerberos-init.yaml

    Данная команда создаст файл operator-kerberos-init.yaml с шаблоном конфигурации.

  5. Отредактируйте конфигурационный файл:

    kerberos:
    image: hub.arenadata.io/adc-enterprise/kerberos-operator:<tag> (1)
    
      # Number of replicas
      # replicas: 1
    
      resources:
        limits:
          cpu: 500m
          memory: 256Mi
    
      # Operator service account.
      serviceAccount: (2)
        create: true
        name: kerberos-operator
    
      # Namespace to run the operator.
      # Operator's ServiceAccount, deployment and RBAC components will be installed in it.
      namespace: (3)
        create: true
        name: kerberos-operator
    
      # Create namespaces to run the payload.
      createPayloadNamespaces: true
    
      # List of namespaces to run the payload in.
      payloadNamespaces: (4)
        - impala
    
      ## Image pull secret for a private registry.
      ## Either set 'name' to reference an existing Secret,
      ## or set 'credentials' and the CLI will create a dockerconfigjson Secret.
      #imagePullSecret:
      #  name: my-pull-secret
      #  credentials:
      #    registry: registry.example.com
      #    username: user
      #    password: pass
      kdc: (5)
        realm: RU-CENTRAL1.INTERNAL
        labelSelector:
          env: prod
        realms:
          RU-CENTRAL1.INTERNAL: |-
            kdc = tsn-freeipa.ru-central1.internal
            admin_server = tsn-freeipa.ru-central1.internal
        domainRealm:
          ru-central1.internal: RU-CENTRAL1.INTERNAL
        libdefaults:
          debug: "false"
          default_realm: RU-CENTRAL1.INTERNAL
          dns_lookup_kdc: "false"
          dns_lookup_realm: 'false'
          udp_preference_limit: '1'
    
      ldapSecret: (6)
        addr: ldaps://tsn-freeipa.ru-central1.internal:636
        adminPW: AdhCloud!
        adminDN: uid=admin,cn=users,cn=accounts,dc=ru-central1,dc=internal
        baseDN: cn=services,cn=accounts,dc=ru-central1,dc=internal
        ca: (7)
        provider: freeipa
    1 URL образа оператора Kerberos в вашем репозитории.
    2 Настройки сервисного аккаунта.
    3 Настройки пространства имен.
    4 Список пространств имен, доступных оператору Kerberos.
    5 Настройки KDC.
    6 Настройки LDAP. Если вы не используете SSL, замените протокол на ldap и порт на 389.
    7 CA-сертификат, необходимый, если LDAP защищен SSL.
  6. Примените конфигурацию и разверните оператор Kerberos:

    $ ./adc operators apply kerberos-operator -f operator-kerberos-init.yaml

Шаг 1. Установка оператора Impala

  1. Инициализируйте оператор Impala:

    $ ./adc operators init --impala -o operator-impala-init.yaml

    Данная команда создаст файл operator-impala-init.yaml с шаблоном конфигурации.

  2. Отредактируйте конфигурационный файл:

    operator-impala-init.yaml
    impala:
      image: hub.arenadata.io/adc-enterprise/impala-operator:<tag> (1)
    
      # Number of replicas
      # replicas: 1
    
      resources:
        limits:
          cpu: 500m
          memory: 256Mi
    
      # Operator service account.
      serviceAccount: (2)
        create: true
        name: "impala"
    
      # Namespace to run the operator.
      # Operator's ServiceAccount, deployment and RBAC components will be installed in it.
      namespace: (3)
        create: true
        name: impala-operator
    
      # Create namespaces to run the payload.
      createPayloadNamespaces: true
    
      # List of namespaces to run the payload in.
      payloadNamespaces: (4)
        - impala
    
      ## Image pull secret for a private registry.
      ## Either set 'name' to reference an existing Secret,
      ## or set 'credentials' and the CLI will create a dockerconfigjson Secret.
      #imagePullSecret:
      #  name: my-pull-secret
      #  credentials:
      #    registry: registry.example.com
      #    username: user
      #    password: pass
    1 URL образа оператора Impala в вашем репозитории.
    2 Настройки сервисного аккаунта.
    3 Настройки пространства имен.
    4 Список пространств имен, доступных оператору Impala.
  3. Примените конфигурацию и разверните оператор Impala:

    $ ./adc operators apply impala-operator -f operator-impala-init.yaml

    Ожидаемый вывод содержит сообщение с подтверждением успеха:

    time="20260518125157UTC" level="info" msg="operator impala-operator applied to namespace impala-operator"
  4. Проверьте работоспособность подов оператора Impala:

    $ kubectl get pods -n impala-operator

    Ожидаемый вывод должен быть похож на следующий:

    NAME                               READY   STATUS    RESTARTS      AGE
    impala-operator-impala-operator-6bf8788587-7s22r   1/1     Running   0          150m

Шаг 2. Установка кластера Impala

  • Без мер защиты

  • Ranger

  • Kerberos + SSL

  1. Подготовьте файл hadoop_conf.yaml с настройками Hadoop:

    sites:
      core:
        fs.defaultFS: hdfs://adh
        hadoop.security.authentication: simple
      hdfs:
        dfs.client.failover.proxy.provider.adh: org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProvider
        dfs.ha.namenodes.adh: nn_tsn-k8s-1,nn_tsn-k8s-3
        dfs.namenode.rpc-address.adh.nn_tsn-k8s-1: tsn-k8s-1.ru-central1.internal:8020
        dfs.namenode.rpc-address.adh.nn_tsn-k8s-3: tsn-k8s-3.ru-central1.internal:8020
        dfs.nameservices: adh
      ozone:
        ozone.om.address.adh.om_tsn-k8s-1: tsn-k8s-1.ru-central1.internal:9862
        ozone.om.address.adh.om_tsn-k8s-2: tsn-k8s-2.ru-central1.internal:9862
        ozone.om.address.adh.om_tsn-k8s-3: tsn-k8s-3.ru-central1.internal:9862
        ozone.om.nodes.adh: om_tsn-k8s-1,om_tsn-k8s-1,om_tsn-k8s-1
        ozone.om.service.ids: adhom
      hive:
        hive.metastore.sasl.enabled: false
        hive.metastore.uris: thrift://tsn-k8s-1.ru-central1.internal:9083
        metastore.use.SSL: false
  2. Инициализируйте кластер Impala:

    $ ./adc cluster init --product impala --hadoop-file hadoop_conf.yaml --output cluster-impala-init.yaml

    Данная команда создаст файл cluster-impala-init.yaml с шаблоном конфигурации.

  3. Отредактируйте конфигурационный файл:

    product: impala
    namespace: impala (1)
    image: (2)
      registry: hub.arenadata.io
      repository: adh-enterprise/impala-docker
      tag: 4.5.0_arenadata1-adh-4.2.0-x86_64
      pullPolicy: Always
    
      ## Image pull secret for a private registry.
      ## Either set 'name' to reference an existing Secret,
      ## or set 'credentials' and the CLI will create a dockerconfigjson Secret.
      #imagePullSecret:
      #  name: my-pull-secret
      #  credentials:
      #    registry: registry.example.com
      #    username: user
      #    password: pass
    impala:
      catalog:
        replicas: 1
    
        ## Component arguments. Key-value pairs passed to the component configuration.
        #args:
        #  redirect_stdout_stderr: "false"
      coordinator:
        replicas: 1
    
        ## Component arguments. Key-value pairs passed to the component configuration.
        #args:
        #  redirect_stdout_stderr: "false"
      executor:
        replicas: 2
    
        ## Component arguments. Key-value pairs passed to the component configuration.
        #args:
        #  redirect_stdout_stderr: "false"
      statestore:
        replicas: 1
    
        ## Component arguments. Key-value pairs passed to the component configuration.
        #args:
        #  redirect_stdout_stderr: "false"
    hadoop: (3)
      core:
        fs.defaultFS: hdfs://adh
        hadoop.security.authentication: simple
      hdfs:
        dfs.client.failover.proxy.provider.adh: org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProvider
        dfs.ha.namenodes.adh: nn_tsn-k8s-1,nn_tsn-k8s-3
        dfs.namenode.rpc-address.adh.nn_tsn-k8s-1: tsn-k8s-1.ru-central1.internal:8020
        dfs.namenode.rpc-address.adh.nn_tsn-k8s-3: tsn-k8s-3.ru-central1.internal:8020
        dfs.nameservices: adh
      hive:
        hive.metastore.sasl.enabled: "false"
        hive.metastore.uris: thrift://tsn-k8s-1.ru-central1.internal:9083
        metastore.use.SSL: "false"
      ozone:
        ozone.om.address.adh.om_tsn-k8s-1: tsn-k8s-1.ru-central1.internal:9862
        ozone.om.address.adh.om_tsn-k8s-2: tsn-k8s-2.ru-central1.internal:9862
        ozone.om.address.adh.om_tsn-k8s-3: tsn-k8s-3.ru-central1.internal:9862
        ozone.om.nodes.adh: om_tsn-k8s-1,om_tsn-k8s-2,om_tsn-k8s-3
        ozone.om.service.ids: adhom
    1 Пространство имен, используемое кластером Impala.
    2 Настройки для загрузки образа кластера Impala.
    3 Настройки Hadoop, взятые из ранее созданного файла hadoop_conf.yaml.
  1. Подготовьте файл hadoop_conf.yaml с настройками Hadoop:

    sites:
      core:
        fs.defaultFS: hdfs://adh
        hadoop.security.authentication: simple
      hdfs:
        dfs.client.failover.proxy.provider.adh: org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProvider
        dfs.ha.namenodes.adh: nn_tsn-k8s-1,nn_tsn-k8s-3
        dfs.namenode.rpc-address.adh.nn_tsn-k8s-1: tsn-k8s-1.ru-central1.internal:8020
        dfs.namenode.rpc-address.adh.nn_tsn-k8s-3: tsn-k8s-3.ru-central1.internal:8020
        dfs.nameservices: adh
      ozone:
        ozone.om.address.adh.om_tsn-k8s-1: tsn-k8s-1.ru-central1.internal:9862
        ozone.om.address.adh.om_tsn-k8s-2: tsn-k8s-2.ru-central1.internal:9862
        ozone.om.address.adh.om_tsn-k8s-3: tsn-k8s-3.ru-central1.internal:9862
        ozone.om.nodes.adh: om_tsn-k8s-1,om_tsn-k8s-1,om_tsn-k8s-1
        ozone.om.service.ids: adhom
      hive:
        hive.metastore.sasl.enabled: false
        hive.metastore.uris: thrift://tsn-k8s-1.ru-central1.internal:9083
        metastore.use.SSL: false
  2. Инициализируйте кластер Impala:

    $ ./adc cluster init --product impala --hadoop-file hadoop_conf.yaml --output cluster-impala-init.yaml

    Данная операция создаст файл cluster-impala-init.yaml с шаблоном конфигурации.

  3. Отредактируйте конфигурационный файл:

    product: impala
    namespace: impala (1)
    image: (2)
      registry: hub.arenadata.io
      repository: adh-enterprise/impala-docker
      tag: 4.5.0_arenadata1-adh-4.2.0-x86_64
      pullPolicy: Always
    
      ## Image pull secret for a private registry.
      ## Either set 'name' to reference an existing Secret,
      ## or set 'credentials' and the CLI will create a dockerconfigjson Secret.
      #imagePullSecret:
      #  name: my-pull-secret
      #  credentials:
      #    registry: registry.example.com
      #    username: user
      #    password: pass
    impala:
      catalog:
        replicas: 1
    
        ## Component arguments. Key-value pairs passed to the component configuration.
        #args:
        #  redirect_stdout_stderr: "false"
      coordinator:
        replicas: 1
    
        ## Component arguments. Key-value pairs passed to the component configuration.
        #args:
        #  redirect_stdout_stderr: "false"
      executor:
        replicas: 2
    
        ## Component arguments. Key-value pairs passed to the component configuration.
        #args:
        #  redirect_stdout_stderr: "false"
      statestore:
        replicas: 1
    
        ## Component arguments. Key-value pairs passed to the component configuration.
        #args:
        #  redirect_stdout_stderr: "false"
    hadoop: (3)
      core:
        fs.defaultFS: hdfs://adh
        hadoop.security.authentication: simple
      hdfs:
        dfs.client.failover.proxy.provider.adh: org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProvider
        dfs.ha.namenodes.adh: nn_tsn-k8s-1,nn_tsn-k8s-3
        dfs.namenode.rpc-address.adh.nn_tsn-k8s-1: tsn-k8s-1.ru-central1.internal:8020
        dfs.namenode.rpc-address.adh.nn_tsn-k8s-3: tsn-k8s-3.ru-central1.internal:8020
        dfs.nameservices: adh
      hive:
        hive.metastore.sasl.enabled: "false"
        hive.metastore.uris: thrift://tsn-k8s-1.ru-central1.internal:9083
        metastore.use.SSL: "false"
      ozone:
        ozone.om.address.adh.om_tsn-k8s-1: tsn-k8s-1.ru-central1.internal:9862
        ozone.om.address.adh.om_tsn-k8s-2: tsn-k8s-2.ru-central1.internal:9862
        ozone.om.address.adh.om_tsn-k8s-3: tsn-k8s-3.ru-central1.internal:9862
        ozone.om.nodes.adh: om_tsn-k8s-1,om_tsn-k8s-2,om_tsn-k8s-3
        ozone.om.service.ids: adhom
    
    ## Ranger plugin configuration.
    ## Uncomment and fill the lines below. cluster apply derives the rest.
    ranger: (4)
      security:
        ranger.plugin.impala.policy.rest.url: "<ranger-admin>:6080"
        ranger.plugin.impala.service.name: "impala_k8s"
        ranger.plugin.impala.use.rangerGroups: "True"
        ranger.plugin.impala.use.only.rangerGroups: "True"
    
      # fill xasecure.audit.destination.solr.zookeepers below with Zookeepers endpoints to resolve solr service, e.g. adps-adc.ru-central1.internal:2181/Arenadata.Hadoop-2.solr.server
      audit:
        xasecure.audit.destination.solr.zookeepers: "tsn-adps2-1.ru-central1.internal:2181/Arenadata.Hadoop-3.solr.server"
    
      # Local Ranger files consumed by the CLI during 'cluster apply'.
      # Paths are relative to the config file. The CLI reads these files
      # and writes them into the generated configs Secret.
      files: (5)
        jceksStorePath: ranger-impala.jceks
    1 Пространство имен, используемое кластером Impala.
    2 Настройки для загрузки образа кластера Impala.
    3 Настройки Hadoop, взятые из ранее созданного файла hadoop_conf.yaml.
    4 Настройки Ranger.
    5 JCEKS-файл, если Ranger используется вместе с SSL.
  1. Подготовьте файл hadoop_conf.yaml с настройками Hadoop:

    sites:
      core:
        fs.defaultFS: hdfs://adh
        hadoop.security.authentication: kerberos
      hdfs:
        dfs.client.failover.proxy.provider.adh: org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProvider
        dfs.ha.namenodes.adh: nn_tsn-k8s-1,nn_tsn-k8s-3
        dfs.namenode.rpc-address.adh.nn_tsn-k8s-1: tsn-k8s-1.ru-central1.internal:8020
        dfs.namenode.rpc-address.adh.nn_tsn-k8s-3: tsn-k8s-3.ru-central1.internal:8020
        dfs.nameservices: adh
        dfs.namenode.kerberos.principal: nn/_HOST@RU.CENTRAL1.INTERNAL
        dfs.journalnode.kerberos.principal: jn/_HOST@RU.CENTRAL1.INTERNAL
        dfs.datanode.kerberos.principal: dn/_HOST@RU.CENTRAL1.INTERNAL
      ozone:
        ozone.om.address.adh.om_tsn-k8s-1: tsn-k8s-1.ru-central1.internal:9862
        ozone.om.address.adh.om_tsn-k8s-2: tsn-k8s-2.ru-central1.internal:9862
        ozone.om.address.adh.om_tsn-k8s-3: tsn-k8s-3.ru-central1.internal:9862
        ozone.om.nodes.adh: om_tsn-k8s-1,om_tsn-k8s-1,om_tsn-k8s-1
        ozone.om.kerberos.principal: om/_HOST@RU-CENTRAL1.INTERNAL
        ozone.om.service.ids: adhom
      hive:
        hive.metastore.sasl.enabled: true
        hive.metastore.uris: thrift://tsn-k8s-1.ru-central1.internal:9083
        hive.metastore.kerberos.principal: hive/_HOST@RU-CENTRAL1.INTERNAL
        metastore.use.SSL: true
  2. Инициализируйте кластер Impala:

    $ ./adc cluster init --product impala --hadoop-file hadoop_conf.yaml --output cluster-impala-init.yaml

    Данная операция создаст файл cluster-impala-init.yaml с шаблоном конфигурации.

  3. Отредактируйте конфигурационный файл:

    product: impala
    namespace: impala (1)
    image: (2)
      registry: hub.arenadata.io
      repository: adh-enterprise/impala-docker
      tag: 4.5.0_arenadata1-adh-4.2.0-x86_64
      pullPolicy: Always
    
      ## Image pull secret for a private registry.
      ## Either set 'name' to reference an existing Secret,
      ## or set 'credentials' and the CLI will create a dockerconfigjson Secret.
      #imagePullSecret:
      #  name: my-pull-secret
      #  credentials:
      #    registry: registry.example.com
      #    username: user
      #    password: pass
    impala:
      catalog:
        replicas: 1
    
        ## Component arguments. Key-value pairs passed to the component configuration.
        #args:
        #  redirect_stdout_stderr: "false"
      coordinator:
        replicas: 1
    
        ## Component arguments. Key-value pairs passed to the component configuration.
        #args:
        #  redirect_stdout_stderr: "false"
      executor:
        replicas: 2
    
        ## Component arguments. Key-value pairs passed to the component configuration.
        #args:
        #  redirect_stdout_stderr: "false"
      statestore:
        replicas: 1
    
        ## Component arguments. Key-value pairs passed to the component configuration.
        #args:
        #  redirect_stdout_stderr: "false"
    hadoop: (3)
      core:
        fs.defaultFS: hdfs://adh
        hadoop.security.authentication: kerberos
      hdfs:
        dfs.client.failover.proxy.provider.adh: org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProvider
        dfs.ha.namenodes.adh: nn_tsn-k8s-1,nn_tsn-k8s-3
        dfs.namenode.rpc-address.adh.nn_tsn-k8s-1: tsn-k8s-1.ru-central1.internal:8020
        dfs.namenode.rpc-address.adh.nn_tsn-k8s-3: tsn-k8s-3.ru-central1.internal:8020
        dfs.nameservices: adh
        dfs.namenode.kerberos.principal: nn/_HOST@RU-CENTRAL1.INTERNAL
        dfs.journalnode.kerberos.principal: jn/_HOST@RU-CENTRAL1.INTERNAL
        dfs.datanode.kerberos.principal: dn/_HOST@RU-CENTRAL1.INTERNAL
      ozone:
        ozone.om.address.adh.om_tsn-k8s-1: tsn-k8s-1.ru-central1.internal:9862
        ozone.om.address.adh.om_tsn-k8s-2: tsn-k8s-2.ru-central1.internal:9862
        ozone.om.address.adh.om_tsn-k8s-3: tsn-k8s-3.ru-central1.internal:9862
        ozone.om.nodes.adh: om_tsn-k8s-1,om_tsn-k8s-1,om_tsn-k8s-1
        ozone.om.kerberos.principal: om/_HOST@RU-CENTRAL1.INTERNAL
        ozone.om.service.ids: adhom
      hive:
        hive.metastore.sasl.enabled: "true"
        hive.metastore.uris: thrift://tsn-k8s-1.ru-central1.internal:9083
        metastore.truststore.password: bigdata
        metastore.truststore.path: /etc/ssl/truststore.jks
        hive.metastore.kerberos.principal: hive/_HOST@RU-CENTRAL1.INTERNAL
        metastore.use.SSL: "true"
    
    ## Kerberos configuration for authentication.
    ## Set 'keytab.create: true' to let the operator create the keytab Secret,
    ## or set 'keytab.secretName' to reference an existing keytab Secret.
    kerberos: (4)
      realm: RU-CENTRAL1.INTERNAL
      service: impala
      hostname: impala-jdbc.ru-central1.internal
      keytab:
        create: true
        secretName: kerberos-secret
        labelSelector:
          env: prod
        additionalPrincipals:
          - HTTP/impala-cloud.ru-central1.internal
          - impala/impala-cloud.ru-central1.internal
          - impala/impala-jdbc.ru-central1.internal
        rotation:
          interval: 24h
          checkInterval: 1h
    
    ## Java KeyStore/TrustStore certificate configuration.
    ## Either reference an existing Secret via secretName,
    ## or set files: to have the CLI create the Secret from local files.
    ssl: (5)
      secretName: ssl-secret
      trustStoreKey: truststore.jks
    
      # Local file paths consumed by the CLI during 'cluster apply'.
      # Paths are relative to the config file. The CLI reads these files
      # and creates or updates the Secret named by ssl.secretName.
      files:
        trustStorePath: /etc/ssl/truststore.jks
    
    # TLS certificate configuration.
    # Either reference an existing Secret via secretName,
    # or set files: to have the CLI create the Secret from local files.
    tls: (6)
      secretName: tls-secret
      certificateKey: tls.crt
      privateKey: tls.key
    
      # Local file paths consumed by the CLI during 'cluster apply'.
      # Paths are relative to the config file. The CLI reads these files
      # and creates or updates the Secret named by tls.secretName.
      files: (7)
        certificatePath: impala-jdbc.ru-central1.internal.crt
        privateKeyPath: impala-jdbc.ru-central1.internal.key
    1 Пространство имен, используемое кластером Impala.
    2 Настройки для загрузки образа кластера Impala.
    3 Настройки Hadoop, взятые из ранее созданного файла hadoop_conf.yaml.
    4 Настройки Kerberos.
    5 Настройки SSL.
    6 Настройки TLS.
    7 Дополнительные файлы сертификата и ключа для JDBC-подключения к Impala.
  1. Примените конфигурацию и разверните кластер Impala:

    $ ./adc cluster apply impala --file cluster-impala-init.yaml

    Ожидаемый вывод содержит сообщение с подтверждением успеха:

    time="20260518133858UTC" level="info" msg="cluster impala applied to namespace impala"
  2. Проверьте работоспособность подов кластера Impala:

    $ kubectl get pods -n impala

    Ожидаемый вывод должен быть похож на следующий:

    NAME                   READY   STATUS    RESTARTS   AGE
    impala-catalog-0       1/1     Running   0          70m
    impala-coordinator-0   1/1     Running   0          70m
    impala-executor-0      1/1     Running   0          70m
    impala-statestore-0    1/1     Running   0          70m

Шаг 3. Предоставление доступа к Impala через JDBC

Для внешнего доступа к Impala по JDBC необходимо настроить один из способов публикации сервиса, например, используя балансировщик нагрузки (load balancer) или Ingress-контроллер.

Все настройки, связанные с публикацией сервиса, включая DNS, аннотации, параметры Ingress, правила балансировщика и прочие, должны быть указаны в соответствии с вашей инфраструктурой Kubernetes.

  1. Получите внешний адрес балансировщика или Ingress-контроллера. Например:

    impala-lb                    LoadBalancer   10.96.231.158   10.92.42.144   21050:32154/TCP,26000:30753/TCP,24000:32645/TCP   25h
  2. Добавьте следующую строку в файл /etc/hosts:

    <lb_ip> impala-jdbc.ru-central1.internal

    где <lb_ip> — внешний IP-адрес балансировщика нагрузки. В данном примере это 10.92.42.144.

  3. Подключитесь к кластеру Impala через JDBC, например, с помощью DBeaver. Строка подключения JDBC имеет следующий вид:

    jdbc:impala://impala-jdbc.ru-central1.internal:21050/default

    При использовании Kerberos и SSL добавьте в строку следующие параметры:

    AuthMech=1;KrbServiceName=impala;KrbHostFQDN=impala-jdbc.ru-central1.internal;SSL=1;SSLTrustStore=<path>truststore.jks;SSLTrustStorePwd=<password>;httpPath=cliservice

    где:

    • KrbServiceName=impala — сервисное имя Kerberos.

    • KrbHostFQDN=impala-jdbc.ru-central1.internal — имя хоста, указанное в values-файле кластера Impala (impala_cluster_values.yaml).

    • SSLTrustStore=<path>/truststore.jks — путь к truststore-файлу с сертификатами для использования DBeaver.

    • SSLTrustStorePwd=<password> — пароль для доступа к truststore-файлу.

  4. Установив подключение, выполните тестовую команду для проверки работоспособности кластера:

    SHOW DATABASES;

    Ожидаемый вывод:

    name            |comment                                     |
    ----------------+--------------------------------------------+
    _impala_builtins|System database for Impala builtin functions|
    default         |Default Hive database                       |

Шаг 4. Предоставление доступа к веб-интерфейсу Impala

Для доступа к веб-интерфейсу Impala необходимо настроить один из способов публикации сервиса, например, используя балансировщик нагрузки (load balancer) или Ingress-контроллер. Все настройки, связанные с публикацией сервиса, включая DNS, аннотации, параметры Ingress, правила балансировщика и прочие, должны быть указаны в соответствии с вашей инфраструктурой Kubernetes.

  1. Получите внешний адрес балансировщика или Ingress-контроллера. Например:

    NAME             CLASS   HOSTS                               ADDRESS       PORTS   AGE
    impala-ingress   nginx   impala-cloud.ru-central1.internal   10.92.41.95   80      8m45s
  2. Добавьте следующую строку в файл /etc/hosts:

    <ingress_ip> impala-cloud.ru-central1.internal

    где <ingress_ip> — внешний IP-адрес контроллера Ingress. В данном примере это 10.92.41.95.

  3. Откройте веб-интерфейс Impala в браузере, используя URL http://impala-cloud.ru-central1.internal (измените протокол на https, если используете Kerberos и SSL).

    Веб-интерфейс Impala
    Веб-интерфейс Impala
    Веб-интерфейс Impala
    Веб-интерфейс Impala

Удаление инстансов

ВАЖНО

Удалять оператор следует только после удаления всех управляемых им ресурсов.

Чтобы удалить кластер Impala, запустите следующую команду:

$ ./adc cluster destroy impala -f cluster-impala-init.yaml

Чтобы удалить оператор Impala, запустите следующую команду:

$ ./adc operators destroy impala-operator -f operator-impala-init.yaml

Чтобы удалить оператор Kerberos, запустите следующую команду:

$ ./adc operators destroy kerberos-operator -f operator-kerberos-init.yaml
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней