Установка 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>
-
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
-
Создайте файл 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: 101 Список пространств имен (namespace), в которых оператор управляет ресурсами. 2 Адрес приватного OCI-хранилища, из которого будут загружены образы. 3 Имя репозитория в приватном хранилище. 4 Укажите учетные данные для доступа к вашему приватному Docker-реестру. -
Установите оператор 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:
-
Проверьте установку оператора 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/.
Для этого:
-
Создайте конфигурационные файлы (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/. -
Создайте секреты 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
-
Создайте файл 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-реестру. -
Установите кластер 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
-
Проверьте установку с помощью следующих команд:
$ 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 в поде используйте команду:
|
Шаг 4. Предоставление доступа к Impala через JDBC
Для внешнего доступа к Impala по JDBC необходимо настроить один из способов публикации сервиса, например, используя балансировщик нагрузки (load balancer) или Ingress-контроллер. Все настройки, связанные с публикацией сервиса, включая DNS, аннотации, параметры Ingress, правила балансировщика и прочие, должны быть указаны в соответствии с вашей инфраструктурой Kubernetes.
-
Получите внешний адрес балансировщика или 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). -
Подключитесь к кластеру Impala через JDBC, например, с помощью DBeaver. Строка подключения JDBC имеет следующий вид:
jdbc:impala://<external-ip>:21050/default
где
<external-ip>— внешний IP-адрес балансировщика или Ingress-контроллера. -
Установив подключение, выполните тестовую команду для проверки работоспособности кластера:
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.
-
Получите внешний адрес балансировщика или 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). -
Добавьте строку в файл /etc/hosts:
<external-ip> ka-impala-k8s-1.ru-central1.internalгде
<external-ip>— IP-адрес Ingress-контроллера или балансировщика из предыдущего шага. -
Откройте веб-интерфейс Impala в браузере, используя URL: http://ka-impala-k8s-1.ru-central1.internal.
Веб-интерфейс 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