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
-
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
-
Configurar
kubectl
kubectl config use-context minikube
-
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
-
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
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
Monitoritzar els Logs
Exercici Pràctic
Desplegar una Aplicació Spark Personalitzada
- Crear una Aplicació Spark Personalitzada: Escriu una aplicació Spark en Scala o Python.
- Construir la Imatge Docker: Utilitza el
docker-image-tool.sh
per construir i pujar la imatge. - Crear un Fitxer YAML: Defineix els serveis i desplegaments necessaris.
- Desplegar l'Aplicació: Utilitza
kubectl apply -f <your-yaml-file>
per desplegar l'aplicació. - 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.
Curs d'Apache Spark
Mòdul 1: Introducció a Apache Spark
Mòdul 2: Conceptes Bàsics de Spark
Mòdul 3: Processament de Dades amb Spark
Mòdul 4: Programació Avançada amb Spark
Mòdul 5: Optimització i Millora del Rendiment
- Comprendre les Tasques de Spark
- Emmagatzematge en Memòria i Persistència
- Gestió de Memòria
- Optimització d'Aplicacions Spark
Mòdul 6: Spark al Núvol
Mòdul 7: Aplicacions del Món Real i Estudis de Cas
- Processament de Dades en Temps Real
- Anàlisi de Big Data
- Pipelines d'Aprenentatge Automàtic
- Estudis de Cas