GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So installieren Sie Spark auf RHEL 8

Apache Spark ist ein verteiltes Computersystem. Es besteht aus einem Master und einem oder mehreren Slaves, wobei der Master die Arbeit unter den Slaves verteilt und so die Möglichkeit gibt, unsere vielen Computer für die Arbeit an einer Aufgabe zu verwenden. Man könnte vermuten, dass dies in der Tat ein mächtiges Werkzeug ist, bei dem Aufgaben große Berechnungen erfordern, aber in kleinere Teile von Schritten aufgeteilt werden können, die zur Bearbeitung an die Slaves weitergegeben werden können. Sobald unser Cluster betriebsbereit ist, können wir Programme schreiben, die darauf in Python, Java und Scala ausgeführt werden.

In diesem Tutorial arbeiten wir auf einem einzelnen Computer, auf dem Red Hat Enterprise Linux 8 ausgeführt wird, und installieren den Spark-Master und -Slave auf demselben Computer, aber denken Sie daran, dass die Schritte, die das Slave-Setup beschreiben, auf eine beliebige Anzahl von Computern angewendet werden können. Dadurch entsteht ein echter Cluster, der hohe Arbeitslasten verarbeiten kann. Wir fügen auch die erforderlichen Unit-Dateien für die Verwaltung hinzu und führen ein einfaches Beispiel für den mit dem verteilten Paket gelieferten Cluster aus, um sicherzustellen, dass unser System betriebsbereit ist.

In diesem Tutorial lernen Sie:

  • So installieren Sie Spark-Master und -Slave
  • So fügen Sie systemd Unit-Dateien hinzu
  • So überprüfen Sie eine erfolgreiche Master-Slave-Verbindung
  • So führen Sie einen einfachen Beispieljob auf dem Cluster aus

Spark-Shell mit PySpark.

Softwareanforderungen und verwendete Konventionen

Softwareanforderungen und Linux-Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder verwendete Softwareversion
System Red Hat Enterprise Linux 8
Software Apache Spark 2.4.0
Andere Privilegierter Zugriff auf Ihr Linux-System als root oder über sudo Befehl.
Konventionen # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder durch Verwendung von sudo Befehl
$ – erfordert, dass bestimmte Linux-Befehle als normaler, nicht privilegierter Benutzer ausgeführt werden

Schritt-für-Schritt-Anleitung zur Installation von Spark auf Redhat 8

Apache Spark läuft auf JVM (Java Virtual Machine), daher ist eine funktionierende Java 8-Installation erforderlich, damit die Anwendungen ausgeführt werden können. Abgesehen davon enthält das Paket mehrere Shells, eine davon ist pyspark , eine auf Python basierende Shell. Um damit arbeiten zu können, muss außerdem Python 2 installiert und eingerichtet sein.

  1. Um die URL des neuesten Spark-Pakets zu erhalten, müssen wir die Spark-Download-Site besuchen. Wir müssen den Mirror auswählen, der unserem Standort am nächsten liegt, und die von der Download-Site bereitgestellte URL kopieren. Dies bedeutet auch, dass sich Ihre URL möglicherweise von dem nachstehenden Beispiel unterscheidet. Wir installieren das Paket unter /opt/ , also geben wir das Verzeichnis als root ein :
    # cd /opt

    Und geben Sie die erhaltene URL an wget weiter um das Paket zu bekommen:

    # wget https://www-eu.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz
  2. Wir entpacken den Tarball:
    # tar -xvf spark-2.4.0-bin-hadoop2.7.tgz
  3. Und erstellen Sie einen Symlink, damit Sie sich unsere Pfade in den nächsten Schritten leichter merken können:
    # ln -s /opt/spark-2.4.0-bin-hadoop2.7 /opt/spark
  4. Wir erstellen einen nicht privilegierten Benutzer, der beide Anwendungen ausführt, Master und Slave:
    # useradd spark

    Und setzen Sie es als Eigentümer des gesamten /opt/spark Verzeichnis, rekursiv:

    # chown -R spark:spark /opt/spark*
  5. Wir erstellen einen systemd Unit-Datei /etc/systemd/system/spark-master.service für den Master-Dienst mit folgendem Inhalt:
    [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

    Und auch eine für den Slave-Dienst, der /etc/systemd/system/spark-slave.service.service sein wird mit folgendem Inhalt:

    [Unit]
    Description=Apache Spark Slave
    After=network.target
    
    [Service]
    Type=forking
    User=spark
    Group=spark
    ExecStart=/opt/spark/sbin/start-slave.sh spark://rhel8lab.linuxconfig.org:7077
    ExecStop=/opt/spark/sbin/stop-slave.sh
    
    [Install]
    WantedBy=multi-user.target

    Beachten Sie die hervorgehobene Spark-URL. Diese wird mit spark://<hostname-or-ip-address-of-the-master>:7077 erstellt , in diesem Fall hat der Laborcomputer, auf dem der Master ausgeführt wird, den Hostnamen rhel8lab.linuxconfig.org . Der Name Ihres Meisters wird anders sein. Alle Slaves müssen in der Lage sein, diesen Hostnamen aufzulösen und den Master auf dem angegebenen Port zu erreichen, der Port 7077 ist standardmäßig.

  6. Wenn die Dienstdateien vorhanden sind, müssen wir systemd fragen um sie erneut zu lesen:
    # systemctl daemon-reload
  7. Wir können unseren Spark-Master mit systemd starten :
    # systemctl start spark-master.service
  8. Um zu überprüfen, ob unser Master läuft und funktioniert, können wir systemd status verwenden:
    # systemctl status spark-master.service
      spark-master.service - Apache Spark Master
       Loaded: loaded (/etc/systemd/system/spark-master.service; disabled; vendor preset: disabled)
       Active: active (running) since Fri 2019-01-11 16:30:03 CET; 53min ago
      Process: 3308 ExecStop=/opt/spark/sbin/stop-master.sh (code=exited, status=0/SUCCESS)
      Process: 3339 ExecStart=/opt/spark/sbin/start-master.sh (code=exited, status=0/SUCCESS)
     Main PID: 3359 (java)
        Tasks: 27 (limit: 12544)
       Memory: 219.3M
       CGroup: /system.slice/spark-master.service
                 3359 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181.b13-9.el8.x86_64/jre/bin/java -cp /opt/spark/conf/:/opt/spark/jars/* -Xmx1g org.apache.spark.deploy.master.Master --host [...]
    
    Jan 11 16:30:00 rhel8lab.linuxconfig.org systemd[1]: Starting Apache Spark Master...
    Jan 11 16:30:00 rhel8lab.linuxconfig.org start-master.sh[3339]: starting org.apache.spark.deploy.master.Master, logging to /opt/spark/logs/spark-spark-org.apache.spark.deploy.master.Master-1[...]

    Die letzte Zeile gibt auch die Hauptlogdatei des Masters an, die sich in den logs befindet Verzeichnis unter dem Spark-Basisverzeichnis, /opt/spark in unserem Fall. Wenn wir uns diese Datei ansehen, sollten wir am Ende eine Zeile ähnlich dem folgenden Beispiel sehen:

    2019-01-11 14:45:28 INFO  Master:54 - I have been elected leader! New state: ALIVE

    Wir sollten auch eine Zeile finden, die uns sagt, wo die Master-Schnittstelle lauscht:

    2019-01-11 16:30:03 INFO  Utils:54 - Successfully started service 'MasterUI' on port 8080

    Wenn wir einen Browser auf den Port 8080 des Hostcomputers verweisen , sollten wir die Statusseite des Masters sehen, im Moment sind keine Worker angehängt.

    Spark-Master-Statusseite ohne angehängte Worker.

    Beachten Sie die URL-Zeile auf der Statusseite des Spark-Masters. Dies ist dieselbe URL, die wir für die Einheitendatei jedes Slaves verwenden müssen, die wir in step 5 erstellt haben .
    Wenn wir im Browser die Fehlermeldung „Verbindung abgelehnt“ erhalten, müssen wir wahrscheinlich den Port auf der Firewall öffnen:

    # firewall-cmd --zone=public --add-port=8080/tcp --permanent
    success
    # firewall-cmd --reload
    success
  9. Unser Meister läuft, wir werden einen Sklaven daran anhängen. Wir starten den Slave-Dienst:
    # systemctl start spark-slave.service
  10. Wir können überprüfen, ob unser Slave mit systemd läuft:
    # systemctl status spark-slave.service
      spark-slave.service - Apache Spark Slave
       Loaded: loaded (/etc/systemd/system/spark-slave.service; disabled; vendor preset: disabled)
       Active: active (running) since Fri 2019-01-11 16:31:41 CET; 1h 3min ago
      Process: 3515 ExecStop=/opt/spark/sbin/stop-slave.sh (code=exited, status=0/SUCCESS)
      Process: 3537 ExecStart=/opt/spark/sbin/start-slave.sh spark://rhel8lab.linuxconfig.org:7077 (code=exited, status=0/SUCCESS)
     Main PID: 3554 (java)
        Tasks: 26 (limit: 12544)
       Memory: 176.1M
       CGroup: /system.slice/spark-slave.service
                 3554 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181.b13-9.el8.x86_64/jre/bin/java -cp /opt/spark/conf/:/opt/spark/jars/* -Xmx1g org.apache.spark.deploy.worker.Worker [...]
    
    Jan 11 16:31:39 rhel8lab.linuxconfig.org systemd[1]: Starting Apache Spark Slave...
    Jan 11 16:31:39 rhel8lab.linuxconfig.org start-slave.sh[3537]: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark/logs/spark-spar[...]

    Diese Ausgabe liefert auch den Pfad zur Protokolldatei des Slaves (oder Workers), die sich im selben Verzeichnis befinden wird, mit „Worker“ im Namen. Wenn wir diese Datei überprüfen, sollten wir etwas Ähnliches wie die folgende Ausgabe sehen:

    2019-01-11 14:52:23 INFO  Worker:54 - Connecting to master rhel8lab.linuxconfig.org:7077...
    2019-01-11 14:52:23 INFO  ContextHandler:781 - Started o.s.j.s.ServletContextHandler@62059f4a{/metrics/json,null,AVAILABLE,@Spark}
    2019-01-11 14:52:23 INFO  TransportClientFactory:267 - Successfully created connection to rhel8lab.linuxconfig.org/10.0.2.15:7077 after 58 ms (0 ms spent in bootstraps)
    2019-01-11 14:52:24 INFO  Worker:54 - Successfully registered with master spark://rhel8lab.linuxconfig.org:7077

    Dies zeigt an, dass der Worker erfolgreich mit dem Master verbunden ist. In derselben Protokolldatei finden wir eine Zeile, die uns die URL mitteilt, die der Worker abhört:

    2019-01-11 14:52:23 INFO  WorkerWebUI:54 - Bound WorkerWebUI to 0.0.0.0, and started at http://rhel8lab.linuxconfig.org:8081

    Wir können unseren Browser auf die Statusseite des Workers verweisen, wo sein Master aufgelistet ist.

    Spark-Worker-Statusseite, verbunden mit Master.

    In der Logdatei des Masters sollte eine Bestätigungszeile erscheinen:

    2019-01-11 14:52:24 INFO  Master:54 - Registering worker 10.0.2.15:40815 with 2 cores, 1024.0 MB RAM

    Wenn wir jetzt die Statusseite des Masters neu laden, sollte der Worker dort auch erscheinen, mit einem Link zu seiner Statusseite.

    Spark-Master-Statusseite mit einem angehängten Worker.

    Diese Quellen bestätigen, dass unser Cluster angeschlossen und betriebsbereit ist.

  11. Um eine einfache Aufgabe auf dem Cluster auszuführen, führen wir eines der Beispiele aus, die mit dem heruntergeladenen Paket geliefert werden. Betrachten Sie die folgende einfache Textdatei /opt/spark/test.file :
    line1 word1 word2 word3
    line2 word1
    line3 word1 word2 word3 word4

    Wir führen die wordcount.py aus Beispiel darauf, das das Vorkommen jedes Wortes in der Datei zählt. Wir können den spark verwenden Benutzer, kein root Berechtigungen erforderlich.

    $ /opt/spark/bin/spark-submit /opt/spark/examples/src/main/python/wordcount.py /opt/spark/test.file
    2019-01-11 15:56:57 INFO  SparkContext:54 - Submitted application: PythonWordCount
    2019-01-11 15:56:57 INFO  SecurityManager:54 - Changing view acls to: spark
    2019-01-11 15:56:57 INFO  SecurityManager:54 - Changing modify acls to: spark
    [...]

    Während die Aufgabe ausgeführt wird, wird eine lange Ausgabe bereitgestellt. Gegen Ende der Ausgabe wird das Ergebnis angezeigt, der Cluster berechnet die benötigten Informationen:

    2019-01-11 15:57:05 INFO  DAGScheduler:54 - Job 0 finished: collect at /opt/spark/examples/src/main/python/wordcount.py:40, took 1.619928 s
    line3: 1
    line2: 1
    line1: 1
    word4: 1
    word1: 3
    word3: 2
    word2: 2
    [...]

    Damit haben wir unseren Apache Spark in Aktion gesehen. Zusätzliche Slave-Knoten können installiert und angeschlossen werden, um die Rechenleistung unseres Clusters zu skalieren.


Linux
  1. So installieren Sie Spark unter Ubuntu

  2. So installieren Sie phpMyAdmin auf RHEL 8 / CentOS 8

  3. So installieren Sie P7Zip auf RHEL 8 / CentOS 8

  4. So installieren Sie ntfs-3g auf RHEL 8 / CentOS 8

  5. wie man gcc 4.9.2 auf RHEL 7.4 installiert

So installieren Sie ActiveMQ auf RHEL 8

So installieren Sie Apache Bench auf RHEL 8

So installieren Sie Cassandra auf RHEL 8

So installieren Sie Composer auf RHEL 8

So installieren Sie gdb in RHEL 8

So installieren Sie Kafka auf RHEL 8