Установка Impala в Kubernetes

В данной статье описан процесс развертывания ADH-сервиса Impala в Kubernetes.

Требования

Для развертывания Impala в Kubernetes необходимо:

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

  • Helm (версия 3.8.0 или выше) — пакетный менеджер для Kubernetes для быстрого деплоя OCI-образов в Kubernetes.

  • Артефакты Impala, включая Docker-образы и Helm-чарты (chart), предварительно загруженные в ваш приватный OCI-реестр. Эти артефакты доступны в offline-пакетах, которые можно запросить у службы поддержки Arenadata. Для деплоя Impala в Kubernetes необходимо извлечь следующие образы:

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

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

    Также необходимо извлечь следующие Helm-чарты и загрузить их в ваш приватный реестр:

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

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

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

    • Core configuration

    • ADPG

    • Zookeeper

    • HDFS

    • YARN

    • Hive

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

Процедура развертывания

Ниже приведены шаги по установке и настройке компонентов Impala. Настройка внешнего доступа, Ingress-контроллеров, балансировщиков нагрузки, DNS и облачных аннотаций должна быть выполнена с учетом особенностей вашей Kubernetes-инфраструктуры.

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

  1. Создайте файл impala_operator_values.yaml:

    # Default values for impala-operator.
    # This is a YAML-formatted file.
    # Declare variables to be passed into your templates.
    
    # This will set the replicaset count more information can be found here: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/
    replicas: 1
    payloadNamespaces: (1)
      # Managed namespaces for Impala payload resources.
      names:
        - impala
      # Explicit opt-in for cluster-wide RBAC when payloadNamespaces.names is empty.
      # When false, the operator starts without payload RBAC until namespaces are specified.
      allowClusterRole: false
      deleteProtection: false
      avoidCreation: false
    
    # This sets the container image more information can be found here: https://kubernetes.io/docs/concepts/containers/images/
    image:
      registry: "<registry>" (2)
      repository: "<image>" (3)
      tag: "<tag>"
      pullPolicy: Always
      # This is for the secrets for pulling an image from a private repository more information can be found here: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
      pullSecret: (4)
        name: ""
        ## List of secrets to create for image pulling in all product namespaces
        credentials: {}
    #      registry: private-docker-registry
    #      username: user
    #      password: pass
    
    # This is to override the chart name.
    nameOverride: ""
    fullnameOverride: ""
    
    # This section builds out the service account more information can be found here: https://kubernetes.io/docs/concepts/security/service-accounts/
    serviceAccount:
      automount: true
      # Annotations to add to the service account
      annotations: {}
      # The name of the service account to use.
      # If not set and create is true, a name is generated using the fullname template
      name: ""
    
    # This is for setting Kubernetes Annotations to a Pod.
    # For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
    podAnnotations: {}
    # This is for setting Kubernetes Labels to a Pod.
    # For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
    podLabels: {}
    
    podSecurityContext: {}
      # fsGroup: 2000
    
    securityContext:
      readOnlyRootFilesystem: true
      privileged: false
      allowPrivilegeEscalation: false
      runAsNonRoot: true
      runAsUser: 65532
      capabilities:
        drop:
          - ALL
      seccompProfile:
        type: RuntimeDefault
    
    
    # This is for setting up a service more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/
    service:
      # This sets the service type more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
      type: ClusterIP
      # This sets the ports more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/#field-spec-ports
      port: 8443
    
    resources: {}
      # We usually recommend not to specify default resources and to leave this as a conscious
      # choice for the user. This also increases chances charts run on environments with little
      # resources, such as Minikube. If you do want to specify resources, uncomment the following
      # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
      # limits:
      #   cpu: 100m
      #   memory: 128Mi
      # requests:
      #   cpu: 100m
      #   memory: 128Mi
    
    nodeSelector: {}
    
    tolerations: []
    
    affinity: {}
    
    terminationGracePeriodSeconds: 10
    1 Список пространств имен (namespace), в которых оператор управляет ресурсами.
    2 Адрес приватного OCI-хранилища, из которого будут загружены образы.
    3 Имя репозитория в приватном хранилище.
    4 Укажите учетные данные для доступа к вашему приватному Docker-реестру.
  2. Установите оператор Impala:

    $ helm upgrade --install impala-operator oci://<registry-address>/adc-enterprise/charts/impala-operator:<version> --version <version> -f impala_operator_values.yaml --namespace impala-operator --create-namespace

    где <registry-address> — это адрес вашего OCI-хранилища с загруженными Helm-чартами для Impala.

    Пример вывода:

    Release "impala-operator" does not exist. Installing it now.
    Pulled: hub.arenadata.io/adc-enterprise/charts/impala-operator:<version>
    Digest: sha256:b44ae368dbeef7d7ef71b365e7b829b96ac41641febfd98516737ad7d39c3490
    NAME: impala-operator
    LAST DEPLOYED: Tue Apr 28 14:11:23 2026
    NAMESPACE: impala-operator
    STATUS: deployed
    REVISION: 1
    DESCRIPTION: Install complete
    TEST SUITE: None
    NOTES:
  3. Проверьте установку оператора Impala с помощью команды:

    $ kubectl get pods -n impala-operator

    Вывод:

    NAME                               READY   STATUS    RESTARTS      AGE
    impala-operator-7d86645656-xzw7q   1/1     Running   1 (46h ago)   46h

Шаг 2. Создание секретов Kubernetes для конфигураций ADH

Для того чтобы сервис Impala, развернутый в Kubernetes, мог взаимодействовать с вашим ADH-кластером, необходимо передать конфигурационные параметры ADH в каждый под Kubernetes. Один из способов сделать это — с помощью секретов (secret) Kubernetes. В этом случае конфигурационные файлы ADH будут доступны в каждом поде в директории /opt/impala/conf/.

Для этого:

  1. Создайте конфигурационные файлы (core-site.xml, hdfs-site.xml, hive-site.xml), используя следующие примеры в качестве шаблона. Параметры конфигурации в этих файлах необходимо заменить значениями из вашего ADH-кластера.

    core-site.xml

     

    <?xml version="1.0"?>
    <configuration>
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://adh</value> (1)
            </property>
            <property>
                    <name>hadoop.security.authentication</name>
                    <value>simple</value>
            </property>
    </configuration>
    1 Замените значением из файла /etc/hadoop/conf/core-site.xml вашего ADH-кластера.
    hdfs-site.xml

     
    Замените все параметры в файле значениями из /etc/hadoop/conf/hdfs-site.xml вашего ADH-кластера.

    <?xml version="1.0"?>
    <configuration>
            <property>
                    <name>dfs.nameservices</name>
                    <value>adh</value>
            </property>
            <property>
                    <name>dfs.ha.namenodes.adh</name>
                    <value>nn_ka-adh-1,nn_ka-adh-2</value>
            </property>
            <property>
                    <name>dfs.namenode.rpc-address.adh.nn_ka-adh-1</name>
                    <value>ka-adh-1.ru-central1.internal:8020</value>
            </property>
            <property>
                    <name>dfs.namenode.rpc-address.adh.nn_ka-adh-2</name>
                    <value>ka-adh-2.ru-central1.internal:8020</value>
            </property>
            <property>
                    <name>dfs.client.failover.proxy.provider.adh</name>
                   <value>org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProvider</value>
            </property>
    </configuration>
    hive-site.xml

     

    <?xml version="1.0"?>
    <configuration>
        <property>
                <name>hive.metastore.uris</name>
                <value>thrift://ka-adh-2.ru-central1.internal:9083</value> (1)
        </property>
        <property>
                <name>metastore.use.SSL</name>
                <value>False</value>
        </property>
        <property>
                <name>hive.metastore.sasl.enabled</name>
                <value>False</value>
        </property>
    </configuration>
    1 Замените значением из файла /etc/hive/conf/hive-site.xml вашего ADH-кластера.
    РЕКОМЕНДАЦИЯ
    Файлы конфигурации вашего ADH-кластера находятся на хостах кластера в директориях /etc/hadoop/conf/ и /etc/hive/conf/.
  2. Создайте секреты Kubernetes:

    $ kubectl -n impala create secret generic hadoop-conf --from-file=core-site.xml --from-file=hdfs-site.xml --from-file=hive-site.xml

    Проверьте создание секретов:

    $ kubectl get secrets -n impala

    Вывод:

    NAME                                   TYPE                        DATA   AGE
    hadoop-conf                            Opaque                      3      23h

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

  1. Создайте файл impala_cluster_values.yaml:

    image:
      registry: "<registry>" (1)
      repository: "<image>" (2)
      tag: "<tag>"
      pullPolicy: Always
      pullSecret: (3)
        name: ""
        ## List of secrets to create for image pulling in all product namespaces
        credentials: {}
    #      registry: private-docker-registry
    #      username: user
    #      password: pass
    
    useRanger: false
    clusterDomain: cluster.local
    configsSecretName: "hadoop-conf"
    
    securityContext: {}
      # capabilities:
      #   drop:
      #   - ALL
      # readOnlyRootFilesystem: true
      # runAsNonRoot: true
      # runAsUser: 1000
    
    catalog:
    
    coordinator:
    
    executor:
      replicas: 2
    
    statestore:
    1 Адрес приватного OCI-хранилища, из которого будут загружены образы.
    2 Имя репозитория в приватном хранилище.
    3 Укажите учетные данные для доступа к вашему приватному Docker-реестру.
  2. Установите кластер Impala:

    $ helm upgrade --install impala-cluster oci://<registry-address>/adc-enterprise/charts/impala-cluster:<version> --version <version> -f impala_cluster_values.yaml --namespace impala --create-namespace

    где <registry-address> — адрес хранилища c Helm-чартами Impala.

    Пример вывода:

    Release "impala-cluster" does not exist. Installing it now.
    Pulled: hub.arenadata.io/adc-enterprise/charts/impala-cluster:<version>
    Digest: sha256:05ed88d95cb7c981f763a3a79b7ed48bc5457603b511a6776173d629b8f9a1eb
    NAME: impala-cluster
    LAST DEPLOYED: Wed Apr 29 12:59:09 2026
    NAMESPACE: impala
    STATUS: deployed
    REVISION: 1
    DESCRIPTION: Install complete
    TEST SUITE: None
  3. Проверьте установку с помощью следующих команд:

    $ kubectl get clusters.impala.arenadata.io -n impala
    $ kubectl get pods -n impala

    Вывод:

    konstantin@ka-impala-k8s-1:~$ kubectl get clusters.impala.arenadata.io -n impala
    NAME             AGE
    impala-cluster   25h
    konstantin@ka-impala-k8s-1:~$ kubectl get pods -n impala
    NAME                           READY   STATUS    RESTARTS   AGE
    impala-cluster-catalog-0       1/1     Running   0          23h
    impala-cluster-coordinator-0   1/1     Running   0          23h
    impala-cluster-executor-0      1/1     Running   0          23h
    impala-cluster-executor-1      1/1     Running   0          23h
    impala-cluster-statestore-0    1/1     Running   0          23h

    Убедитесь, что все поды кластера находятся в состоянии Running.

Для просмотра логов Impala в поде используйте команду:

$ kubectl logs <pod-name> -n impala

Шаг 4. Предоставление доступа к 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

    Скопируйте внешний IP-адрес для дальнейших шагов (в данном примере это 10.92.42.144).

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

    jdbc:impala://<external-ip>:21050/default

    где <external-ip> — внешний IP-адрес балансировщика или Ingress-контроллера.

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

    SHOW DATABASES;

    Вывод:

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

Шаг 5. Предоставление доступа к веб-интерфейсу 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

    Скопируйте внешний IP-адрес для дальнейших шагов (в данном примере это 10.92.41.95).

  2. Добавьте строку в файл /etc/hosts:

    <external-ip> ka-impala-k8s-1.ru-central1.internal

    где <external-ip> — IP-адрес Ingress-контроллера или балансировщика из предыдущего шага.

  3. Откройте веб-интерфейс Impala в браузере, используя URL: http://ka-impala-k8s-1.ru-central1.internal.

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

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

ВАЖНО

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

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

$ helm uninstall impala-cluster --namespace impala

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

$ helm uninstall impala-operator --namespace impala-operator

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

$ kubectl delete crd clusters.impala.arenadata.io
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней