So installierst du Apache Spark unter Ubuntu 22.04

Apache Spark ist eine kostenlose, quelloffene und universell einsetzbare Datenverarbeitungs-Engine, die von Datenwissenschaftlern verwendet wird, um extrem schnelle Datenabfragen auf großen Datenmengen durchzuführen. Sie nutzt einen In-Memory-Datenspeicher, um Abfragen und Daten direkt im Hauptspeicher der Clusterknoten zu speichern. Es bietet High-Level-APIs in den Sprachen Java, Scala, Python und R. Außerdem unterstützt es eine Vielzahl von Tools auf höherer Ebene wie Spark SQL, MLlib, GraphX und Spark Streaming.

In diesem Beitrag erfährst du, wie du die Datenverarbeitungs-Engine Apache Spark auf Ubuntu 22.04 installierst.

Voraussetzungen

  • Ein Server, auf dem Ubuntu 22.04 läuft.
  • Ein Root-Passwort ist auf dem Server eingerichtet.

Java installieren

Apache Spark basiert auf Java. Daher muss Java auf deinem Server installiert sein. Wenn es nicht installiert ist, kannst du es mit dem folgenden Befehl installieren:

apt-get install default-jdk curl -y

Sobald Java installiert ist, überprüfe die Java-Installation mit folgendem Befehl:

java -version

Du erhältst die folgende Ausgabe:

openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1)
OpenJDK 64-Bit Server VM (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1, mixed mode, sharing)

Apache Spark installieren

Zum Zeitpunkt der Erstellung dieses Tutorials ist die neueste Version von Apache Spark Spark 3.2.1. Du kannst sie mit dem Befehl wget herunterladen:

wget https://dlcdn.apache.org/spark/spark-3.2.1/spark-3.2.1-bin-hadoop3.2.tgz

Sobald der Download abgeschlossen ist, extrahiere die heruntergeladene Datei mit dem folgenden Befehl:

tar xvf spark-3.2.1-bin-hadoop3.2.tgz

Als Nächstes entpackst du die heruntergeladene Datei in das Verzeichnis /opt:

mv spark-3.2.1-bin-hadoop3.2/ /opt/spark

Als Nächstes bearbeitest du die Datei .bashrc und definierst den Pfad des Apache Spark:

nano ~/.bashrc

Füge die folgenden Zeilen am Ende der Datei hinzu:

export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

Speichere und schließe die Datei und aktiviere dann die Umgebungsvariable Spark mit dem folgenden Befehl:

source ~/.bashrc

Als Nächstes erstellst du einen eigenen Benutzer, um Apache Spark auszuführen:

useradd spark

Ändere als Nächstes den Eigentümer von /opt/spark auf den Benutzer spark und die Gruppe spark:

chown -R spark:spark /opt/spark

Erstellen einer Systemd-Dienstdatei für Apache Spark

Als Nächstes musst du eine Servicedatei erstellen, um den Apache Spark-Dienst zu verwalten.

Erstelle zunächst mit dem folgenden Befehl eine Servicedatei für den Spark-Master:

nano /etc/systemd/system/spark-master.service

Füge die folgenden Zeilen hinzu:

[Unit]
Description=Apache Spark Master
After=network.target

[Service]
Type=forking
User=spark
Group=spark
ExecStart=/opt/spark/sbin/start-master.sh
ExecStop=/opt/spark/sbin/stop-master.sh

[Install]
WantedBy=multi-user.target

Speichere und schließe die Datei und erstelle dann eine Servicedatei für Spark-Slave:

nano /etc/systemd/system/spark-slave.service

Füge die folgenden Zeilen hinzu:

[Unit]

Description=Apache Spark Slave

After=network.target

[Service]
Type=forking
User=spark
Group=spark
ExecStart=/opt/spark/sbin/start-slave.sh spark://your-server-ip:7077
ExecStop=/opt/spark/sbin/stop-slave.sh

[Install]
WantedBy=multi-user.target

Speichere und schließe die Datei und lade den systemd-Daemon neu, um die Änderungen zu übernehmen:

systemctl daemon-reload

Starte und aktiviere als Nächstes den Spark-Master-Dienst mit dem folgenden Befehl:

systemctl start spark-master
systemctl enable spark-master

Du kannst den Status des Spark-Masters mit folgendem Befehl überprüfen:

systemctl status spark-master

Du erhältst die folgende Ausgabe:

? spark-master.service - Apache Spark Master
     Loaded: loaded (/etc/systemd/system/spark-master.service; disabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-05-05 11:48:15 UTC; 2s ago
    Process: 19924 ExecStart=/opt/spark/sbin/start-master.sh (code=exited, status=0/SUCCESS)
   Main PID: 19934 (java)
      Tasks: 32 (limit: 4630)
     Memory: 162.8M
        CPU: 6.264s
     CGroup: /system.slice/spark-master.service
             ??19934 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -cp "/opt/spark/conf/:/opt/spark/jars/*" -Xmx1g org.apache.spark.deploy.mast>

May 05 11:48:12 ubuntu2204 systemd[1]: Starting Apache Spark Master...
May 05 11:48:12 ubuntu2204 start-master.sh[19929]: starting org.apache.spark.deploy.master.Master, logging to /opt/spark/logs/spark-spark-org>
May 05 11:48:15 ubuntu2204 systemd[1]: Started Apache Spark Master.

Sobald du fertig bist, kannst du mit dem nächsten Schritt fortfahren.

Zugriff auf Apache Spark

Zu diesem Zeitpunkt ist Apache Spark gestartet und lauscht auf Port 8080. Du kannst dies mit dem folgenden Befehl überprüfen:

ss -antpl | grep java

Du erhältst die folgende Ausgabe:

LISTEN 0      4096   [::ffff:69.28.88.159]:7077            *:*    users:(("java",pid=19934,fd=256))                                                 
LISTEN 0      1                          *:8080            *:*    users:(("java",pid=19934,fd=258))  

Öffne nun deinen Webbrowser und rufe die Spark-Weboberfläche über die URL http://your-server-ip:8080 auf. Auf der folgenden Seite solltest du das Dashboard von Apache Spark sehen:

Starte nun den Spark-Slave-Dienst und aktiviere ihn so, dass er beim Neustart des Systems gestartet wird:

systemctl start spark-slave
systemctl enable spark-slave

Du kannst den Status des Spark-Slave-Dienstes mit dem folgenden Befehl überprüfen:

systemctl status spark-slave

Du erhältst die folgende Ausgabe:

? spark-slave.service - Apache Spark Slave
     Loaded: loaded (/etc/systemd/system/spark-slave.service; disabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-05-05 11:49:32 UTC; 4s ago
    Process: 20006 ExecStart=/opt/spark/sbin/start-slave.sh spark://69.28.88.159:7077 (code=exited, status=0/SUCCESS)
   Main PID: 20017 (java)
      Tasks: 35 (limit: 4630)
     Memory: 185.9M
        CPU: 7.513s
     CGroup: /system.slice/spark-slave.service
             ??20017 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -cp "/opt/spark/conf/:/opt/spark/jars/*" -Xmx1g org.apache.spark.deploy.work>

May 05 11:49:29 ubuntu2204 systemd[1]: Starting Apache Spark Slave...
May 05 11:49:29 ubuntu2204 start-slave.sh[20006]: This script is deprecated, use start-worker.sh
May 05 11:49:29 ubuntu2204 start-slave.sh[20012]: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark/logs/spark-spark-org.>
May 05 11:49:32 ubuntu2204 systemd[1]: Started Apache Spark Slave.

Gehe nun zurück zur Spark-Weboberfläche und aktualisiere die Webseite. Auf der folgenden Seite solltest du den hinzugefügten Worker sehen:

Klicke jetzt auf den Worker. Auf der folgenden Seite solltest du die Worker-Informationen sehen:

Zugriff auf die Spark-Shell

Apache Spark bietet auch ein Spark-Shell-Dienstprogramm, mit dem du über die Kommandozeile auf Spark zugreifen kannst. Du kannst es mit dem folgenden Befehl aufrufen:

spark-shell

Du erhältst die folgende Ausgabe:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.spark.unsafe.Platform (file:/opt/spark/jars/spark-unsafe_2.12-3.2.1.jar) to constructor java.nio.DirectByteBuffer(long,int)
WARNING: Please consider reporting this to the maintainers of org.apache.spark.unsafe.Platform
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
22/05/05 11:50:46 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Spark context Web UI available at http://ubuntu2204:4040
Spark context available as 'sc' (master = local[*], app id = local-1651751448361).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 3.2.1
      /_/
         
Using Scala version 2.12.15 (OpenJDK 64-Bit Server VM, Java 11.0.15)
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

Um die Spark-Shell zu verlassen, führe den folgenden Befehl aus:

scala> :quit

Wenn du ein Python-Entwickler bist, kannst du mit pyspark auf Spark zugreifen:

pyspark

Du erhältst die folgende Ausgabe:

Python 3.10.4 (main, Apr  2 2022, 09:04:19) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.spark.unsafe.Platform (file:/opt/spark/jars/spark-unsafe_2.12-3.2.1.jar) to constructor java.nio.DirectByteBuffer(long,int)
WARNING: Please consider reporting this to the maintainers of org.apache.spark.unsafe.Platform
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
22/05/05 11:53:17 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 3.2.1
      /_/

Using Python version 3.10.4 (main, Apr  2 2022 09:04:19)
Spark context Web UI available at http://ubuntu2204:4040
Spark context available as 'sc' (master = local[*], app id = local-1651751598729).
SparkSession available as 'spark'.
>>> 

Drücke die Tastenkombination STRG + D, um die Spark-Shell zu verlassen.

Fazit

Glückwunsch! Du hast Apache Spark erfolgreich auf Ubuntu 22.04 installiert. Jetzt kannst du Apache Spark in der Hadoop-Umgebung verwenden. Weitere Informationen findest du auf der Apache Spark-Dokumentationsseite.

Das könnte dich auch interessieren …