Elnur - stock.adobe.com

Wie man ML-Workloads mit Apache Spark auf Kubernetes ausführt

IT-Mitarbeiter, die Machine Learning Workloads verwalten möchten, setzen zunehmend auf Apache Spark. Die notwendigen Schritte, um einen Spark-Cluster auf Kubernetes einzurichten.

Die dynamische Kopplung von Spark auf Kubernetes kann eine Vielzahl von Vorteilen bringen. Um Spark auf Kubernetes zum Laufen zu bringen, brauchen IT-Teams nur einige einfach zu erlernende Befehle.

Apache Spark muss nicht zwangsläufig auf Kubernetes laufen. Aber in vielen Anwendungsfällen kann die Kombination der beiden die Bereitstellung von Spark vereinfachen und gleichzeitig die Arbeitslasten für maschinelles Lernen (ML) in einer verteilten Umgebung effizient ausführen.

Was ist Apache Spark?

Apache Spark ist eine Open-Source-Datenverarbeitungsplattform, die für Machine Learning Workloads entwickelt wurde. Zu den wichtigsten Merkmalen von Spark gehören:

  • Die Fähigkeit, große Datenmengen schnell zu verarbeiten, insbesondere wenn die Daten im Arbeitsspeicher gespeichert sind.
  • Unterstützung für die Echtzeitverarbeitung von Datenströmen.
  • Hochgradig anpassbare Arbeitsabläufe für die Datenverarbeitung.
  • Mehrere Bereitstellungsmodelle, das heißt Spark kann auf Wunsch über einem Hadoop-Cluster laufen oder allein betrieben werden.

Dank dieser Funktionen, insbesondere der schnellen Datenverarbeitung, hat sich Spark zum de facto Open Source Tool für den Betrieb von Machine Learning Workloads entwickelt, die eine umfangreiche Datenverarbeitung erfordern.

Die Vorteile der Ausführung von Spark auf Kubernetes

Kubernetes ist für die Ausführung von Spark nicht erforderlich. Die Entscheidung, Spark auf Kubernetes auszuführen, kann jedoch mehrere Vorteile bieten:

  • Die Möglichkeit, Spark-Anwendungen problemlos zwischen verschiedenen Kubernetes-Clustern zu verschieben, was ein Vorteil ist, wenn Sie nicht an eine bestimmte Infrastrukturplattform gebunden sein möchten.
  • Unterstützung für die Segmentierung von Spark-Anwendungen untereinander, wobei sie dennoch alle in einem einzigen Kubernetes-Cluster untergebracht sind.
  • Ein einheitlicher Ansatz für die Bereitstellung und Verwaltung von Anwendungen, da Sie alles über Kubernetes verwalten können.
  • Die Möglichkeit, Kubernetes ResourceQuotas zu verwenden, um die Spark zugewiesenen Ressourcen zu verwalten.

Apache Spark hat ab Spark 2.3 native Unterstützung für Kubernetes erhalten. Native Unterstützung bedeutet, dass Sie Spark-Anwendungen wie jede andere Kubernetes-Anwendung mit Container-Images und Pods bereitstellen und verwalten können. Sie benötigen keine speziellen Tools oder Erweiterungen, um Spark mit Kubernetes kompatibel zu machen.

Schritte für die Bereitstellung von Spark auf Kubernetes

Um Spark auf Kubernetes bereitzustellen, erstellen Sie zunächst ein Deployment für einen Spark Master:

kind: Deployment

apiVersion: apps/v1

metadata:

  name: spark-master

spec:

  template:

     metadata:

       labels:

         component: spark-master

     spec:

       containers:

         - name: spark-master

                     image: apache/spark:v3.3.0

           command: ["/spark-master"]

             ports:

           - containerPort: 6000

           - containerPort: 8080

Speichern Sie diese Datei als spark-master.yml.

Als nächstes erstellen Sie einen Service:

kind: Service

apiVersion: v1

metadata:

  name: spark-master

spec:

  ports:

     - name: ui

     port: 8080

     targetPort: 8080

     - name: spark

     port: 6000

     targetPort: 6000

  selector:

     component: spark-master

Speichern Sie Ihre Service-Konfiguration als spark-master-service.yml.

Erstellen Sie dann die Bereitstellung und den Dienst in Ihren Kubernetes-Clustern, indem Sie Folgendes ausführen:

kubectl create -f ./kubernetes/spark-master.yml

kubectl create -f ./kubernetes/spark-master-service.yml

Jetzt haben Sie einen Spark-Master laufen. Nun können Sie einen Spark Worker erstellen, um Ihren Cluster zu vervollständigen:

kind: Deployment

apiVersion: apps/v1

metadata:

  name: worker

  template:

     metadata:

     labels:

     component: spark-worker

     spec:

       containers:

         - name: worker

               image: apache/spark:v3.3.0

           command: ["/worker"]

           ports:

           - containerPort: 8081

Speichern Sie diese Datei unter dem Namen spark-worker.yml und verteilen Sie sie mit folgendem Befehl:

kubectl create -f ./kubernetes/spark-worker.yml

Jetzt ist ein einfacher Spark-Cluster auf Kubernetes eingerichtet und läuft. Sie können damit beginnen, Spark-Arbeitslasten an Ihren Master-Container zu übermitteln.

Auf dem Weg zu einer Produktionsumgebung können Sie zusätzliche Worker einsetzen, um das Cluster zu vergrößern. Vielleicht möchten Sie das Cluster auch für externe Ressourcen öffnen, indem Sie einen Service einrichten, der eine öffentliche IP-Adresse bereitstellt, oder eine Ingress-Regel erstellen. Weitere Einzelheiten finden Sie in der Spark-Dokumentation.

Erfahren Sie mehr über Softwareentwicklung