En aquest tema, explorarem com executar aplicacions Apache Spark en un entorn Kubernetes. Kubernetes és una plataforma de codi obert per a l'automatització de la gestió, escalat i desplegament d'aplicacions en contenidors. Integrar Spark amb Kubernetes permet aprofitar les capacitats de gestió de contenidors de Kubernetes per a una millor escalabilitat i gestió de recursos.

Objectius del Tema

  • Entendre els avantatges d'executar Spark en Kubernetes.
  • Configurar un entorn Kubernetes per executar aplicacions Spark.
  • Desplegar una aplicació Spark en un clúster Kubernetes.
  • Monitoritzar i gestionar aplicacions Spark en Kubernetes.

Avantatges d'Executar Spark en Kubernetes

  • Escalabilitat Automàtica: Kubernetes pot escalar automàticament els recursos segons la càrrega de treball.
  • Gestió de Recursos: Kubernetes proporciona eines avançades per gestionar els recursos de manera eficient.
  • Aïllament de Contenidors: Els contenidors proporcionen un aïllament millor, reduint els conflictes entre aplicacions.
  • Desplegament Senzill: Kubernetes facilita el desplegament i la gestió de les aplicacions Spark.

Configuració de l'Entorn Kubernetes

Requisits Previs

  • Un clúster Kubernetes operatiu.
  • kubectl configurat per interactuar amb el clúster Kubernetes.
  • Docker instal·lat per crear imatges de contenidors.

Passos per Configurar l'Entorn

  1. Instal·lar Minikube (Opcional per a Desenvolupament Local)

    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    sudo install minikube-linux-amd64 /usr/local/bin/minikube
    minikube start
    
  2. Configurar kubectl

    kubectl config use-context minikube
    
  3. Descarregar i Configurar Spark

    wget https://archive.apache.org/dist/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2.tgz
    tar -xzf spark-3.1.2-bin-hadoop3.2.tgz
    cd spark-3.1.2-bin-hadoop3.2
    
  4. Construir la Imatge Docker de Spark

    ./bin/docker-image-tool.sh -r <your-docker-repo> -t v3.1.2 build
    ./bin/docker-image-tool.sh -r <your-docker-repo> -t v3.1.2 push
    

Desplegar una Aplicació Spark en Kubernetes

Crear un Fitxer de Configuració YAML

Crea un fitxer spark-pi.yaml amb el següent contingut:

apiVersion: v1
kind: Service
metadata:
  name: spark-master
spec:
  ports:
    - port: 7077
      name: spark
    - port: 8080
      name: webui
  selector:
    app: spark
    component: master
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spark-master
spec:
  replicas: 1
  selector:
    matchLabels:
      app: spark
      component: master
  template:
    metadata:
      labels:
        app: spark
        component: master
    spec:
      containers:
        - name: spark-master
          image: <your-docker-repo>/spark:v3.1.2
          command: ["/bin/bash", "-c", "/opt/spark/bin/spark-class org.apache.spark.deploy.master.Master"]
          ports:
            - containerPort: 7077
            - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: spark-worker
spec:
  ports:
    - port: 8081
      name: webui
  selector:
    app: spark
    component: worker
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spark-worker
spec:
  replicas: 2
  selector:
    matchLabels:
      app: spark
      component: worker
  template:
    metadata:
      labels:
        app: spark
        component: worker
    spec:
      containers:
        - name: spark-worker
          image: <your-docker-repo>/spark:v3.1.2
          command: ["/bin/bash", "-c", "/opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077"]
          ports:
            - containerPort: 8081

Desplegar el Fitxer YAML

kubectl apply -f spark-pi.yaml

Executar una Aplicació Spark

kubectl run spark-pi --rm -it --labels="app=spark" --image=<your-docker-repo>/spark:v3.1.2 -- spark-submit --master spark://spark-master:7077 --class org.apache.spark.examples.SparkPi /opt/spark/examples/jars/spark-examples_2.12-3.1.2.jar 1000

Monitorització i Gestió

Accedir a la Interfície Web de Spark

minikube service spark-master

Monitoritzar els Logs

kubectl logs <pod-name>

Exercici Pràctic

Desplegar una Aplicació Spark Personalitzada

  1. Crear una Aplicació Spark Personalitzada: Escriu una aplicació Spark en Scala o Python.
  2. Construir la Imatge Docker: Utilitza el docker-image-tool.sh per construir i pujar la imatge.
  3. Crear un Fitxer YAML: Defineix els serveis i desplegaments necessaris.
  4. Desplegar l'Aplicació: Utilitza kubectl apply -f <your-yaml-file> per desplegar l'aplicació.
  5. Executar l'Aplicació: Utilitza kubectl run per executar l'aplicació Spark.

Solució

apiVersion: v1
kind: Service
metadata:
  name: spark-master
spec:
  ports:
    - port: 7077
      name: spark
    - port: 8080
      name: webui
  selector:
    app: spark
    component: master
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spark-master
spec:
  replicas: 1
  selector:
    matchLabels:
      app: spark
      component: master
  template:
    metadata:
      labels:
        app: spark
        component: master
    spec:
      containers:
        - name: spark-master
          image: <your-docker-repo>/spark:v3.1.2
          command: ["/bin/bash", "-c", "/opt/spark/bin/spark-class org.apache.spark.deploy.master.Master"]
          ports:
            - containerPort: 7077
            - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: spark-worker
spec:
  ports:
    - port: 8081
      name: webui
  selector:
    app: spark
    component: worker
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spark-worker
spec:
  replicas: 2
  selector:
    matchLabels:
      app: spark
      component: worker
  template:
    metadata:
      labels:
        app: spark
        component: worker
    spec:
      containers:
        - name: spark-worker
          image: <your-docker-repo>/spark:v3.1.2
          command: ["/bin/bash", "-c", "/opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077"]
          ports:
            - containerPort: 8081

Conclusió

En aquest tema, hem après com configurar un entorn Kubernetes per executar aplicacions Spark, desplegar una aplicació Spark en un clúster Kubernetes i monitoritzar-la. Kubernetes proporciona una plataforma robusta per gestionar aplicacions Spark, oferint escalabilitat, gestió de recursos i aïllament de contenidors. Amb aquests coneixements, estàs preparat per aprofitar les capacitats de Kubernetes per executar aplicacions Spark de manera eficient.

© Copyright 2024. Tots els drets reservats