In dieser Anleitung werden verschiedene Möglichkeiten zum Erstellen und Senden eines Spark-Scala-Jobs an einen Dataproc-Cluster erläutert:
- Spark Scala-Anwendung und „Hello World“-Anwendung auf der lokalen Maschine über die Befehlszeile mit Scala REPL (Read-Evaluate-Print-Loop oder interaktiver Interpreter) oder dem SBT-Build-Tool schreiben und kompilieren
- Kompilierte Scala-Klassen in eine JAR-Datei mit einem Manifest kompilieren
- Scala-JAR-Datei an einen Spark-Job senden, der in Ihrem Dataproc-Cluster ausgeführt wird
- Scala-Jobausgabe in der Google Cloud Console prüfen
In dieser Anleitung lernen Sie außerdem Folgendes:
Spark-Scala-Job schreiben und ausführen, u. h. MapReduce-Job direkt in einem Dataproc-Cluster mit dem REPL
spark-shell
ausführenVorinstallierte Apache Spark- und Hadoop-Beispiele auf einem Cluster ausführen
Google Cloud Platform-Projekt einrichten
Führen Sie ggf. die folgenden Aufgaben aus:
Scala-Code lokal schreiben und kompilieren
Als einfache Übung für diese Anleitung schreiben Sie eine „Hello World“-Scala-App über die Scala REPL oder die SBT-Befehlszeile lokal auf Ihrem Entwicklungscomputer.
Scala
- Laden Sie die Scala-Binärdateien von der Seite Scala-Installation herunter.
Entpacken Sie die Datei, legen Sie die Umgebungsvariable
SCALA_HOME
fest und fügen Sie die Umgebungsvariable dem Pfad hinzu. Folgen Sie dazu der Anleitung für die Scala-Installation. Beispiel:export SCALA_HOME=/usr/local/share/scala export PATH=$PATH:$SCALA_HOME/
Starten Sie die Scala-REPL
$ scala Welcome to Scala version ... Type in expressions to have them evaluated. Type :help for more information. scala>
HelloWorld
-Code kopieren und in die Scala-REPL einfügenobject HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") } }
HelloWorld.scala
speichern und REPL verlassenscala> :save HelloWorld.scala scala> :q
Mit
scalac
kompilieren$ scalac HelloWorld.scala
Liste der kompilierten
.class
-Dateien auflisten$ ls HelloWorld*.class HelloWorld$.class HelloWorld.class
SBT verwenden
Erstellen Sie ein "HelloWorld"-Projekt (siehe unten)
$ mkdir hello $ cd hello $ echo \ 'object HelloWorld {def main(args: Array[String]) = println("Hello, world!")}' > \ HelloWorld.scala
Erstellen Sie eine
sbt.build
-Konfigurationsdatei, umartifactName
(den Namen der unten generierten JAR-Datei) auf "HelloWorld.jar" festzulegen (siehe Standardartefakte ändern).echo \ 'artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) => "HelloWorld.jar" }' > \ build.sbt
Starten Sie SBT und führen Sie den Code aus
$ sbt [info] Set current project to hello ... > run ... Compiling 1 Scala source to .../hello/target/scala-.../classes... ... Running HelloWorld Hello, world! [success] Total time: 3 s ...
Verpacken Sie den Code in eine JAR-Datei mit einem Manifest, das den Haupteinstiegspunkt für die Klasse angibt (
HelloWorld
), und beenden Sie ihn dann> package ... Packaging .../hello/target/scala-.../HelloWorld.jar ... ... Done packaging. [success] Total time: ... > exit
JAR-Datei erstellen
Erstelle eine JAR-Datei mit SBT
oder mit dem Befehl jar.
JAR-Datei mit SBT erstellen
Mit dem SBT-Befehl package wird eine JAR-Datei erstellt (siehe SBT verwenden).
JAR-Datei manuell erstellen
- Ändern Sie das Verzeichnis (
cd
) in das Verzeichnis, das die kompiliertenHelloWorld*.class
-Dateien enthält. Führen Sie dann den folgenden Befehl aus, um die Klassendateien mit einem Manifest zu verpacken, das den Haupteinstiegspunkt für die Klasse angibt (HelloWorld
).$ jar cvfe HelloWorld.jar HelloWorld HelloWorld*.class added manifest adding: HelloWorld$.class(in = 637) (out= 403)(deflated 36%) adding: HelloWorld.class(in = 586) (out= 482)(deflated 17%)
JAR-Datei in Cloud Storage kopieren
- Verwenden Sie den
gsutil
-Befehl, um die JAR-Datei in einen Cloud Storage-Bucket in Ihrem Projekt zu kopieren.
$ gsutil cp HelloWorld.jar gs://<bucket-name>/ Copying file://HelloWorld.jar [Content-Type=application/java-archive]... Uploading gs://bucket-name/HelloWorld.jar: 1.46 KiB/1.46 KiB
JAR-Datei an einen Dataproc Spark-Job senden
Verwenden Sie die Google Cloud Console, um die JAR-Datei an Ihren Dataproc Spark-Job zu senden. Füllen Sie die Felder auf der Seite Job senden so aus:
- Cluster: Wählen Sie den Namen des Clusters aus der Clusterliste aus
- Jobtyp: Spark
Hauptklasse oder JAR-Datei: Geben Sie den Cloud Storage-URI-Pfad zu Ihrer HelloWorld-JAR-Datei (
gs://your-bucket-name/HelloWorld.jar
) an.Wenn Ihre JAR-Datei kein Manifest enthält, das den Einstiegspunkt zu Ihrem Code angibt (&Hauptklasse: HelloWorld & Quot;), sollte &&t
Klicken Sie auf Senden, um den Job zu starten. Nach dem Start wird der Job zur Jobliste hinzugefügt.
Klicken Sie auf die Job-ID, um die Seite Jobs zu öffnen, auf der Sie die Treiberausgabe des Jobs ansehen können.
Spark Scala-Code mit der REPL spark-shell
des Clusters schreiben und ausführen
Sie sollten Scala-Anwendungen direkt in Ihrem Dataproc-Cluster entwickeln. Hadoop und Spark sind auf Dataproc-Clustern vorinstalliert. Sie werden mit dem Cloud Storage-Connector konfiguriert. Damit kann der Code Daten direkt aus Cloud Storage lesen und in Cloud Storage schreiben.
In diesem Beispiel wird gezeigt, wie Sie eine SSH-Verbindung zum Master-Knoten des Dataproc-Clusters Ihres Projekts herstellen und dann das REPL-Tool spark-shell verwenden, um eine Scala-WordCount-Anwendung zur Zahl der Anwendung zu erstellen und auszuführen.
Stellen Sie eine SSH-Verbindung zum Master-Knoten des Dataproc-Clusters her
Gehen Sie in der Google Cloud Console zur Seite „Cluster Cluster und klicken Sie auf den Namen Ihres Clusters.
Wählen Sie auf der Clusterdetailseite den Tab VM-Instanzen aus und klicken Sie dann auf die SSH-Auswahl, die rechts neben der Namenszeile des Clusters angezeigt wird.
Im Stammverzeichnis des Master-Knotens wird ein Browserfenster angezeigt.
spark-shell
starten$ spark-shell ... Using Scala version ... Type in expressions to have them evaluated. Type :help for more information. ... Spark context available as sc. ... SQL context available as sqlContext. scala>
Erstellen Sie ein RDD (Resilient Distributed Dataset) aus einem Shakespeare-Text-Snippet, das sich im öffentlichen Cloud Storage befindet.
scala> val text_file = sc.textFile("gs://pub/shakespeare/rose.txt")
Führe für den Text eine Mapcount-Reduzierung aus und zeig dann das
wordcounts
-Ergebnis anscala> val wordCounts = text_file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b) scala> wordCounts.collect ... Array((call,1), (What's,1), (sweet.,1), (we,1), (as,1), (name?,1), (any,1), (other,1), (rose,1), (smell,1), (name,1), (a,2), (would,1), (in,1), (which,1), (That,1), (By,1))
Speichern Sie die Anzahl in
<bucket-name>/wordcounts-out
in Cloud Storage und beenden Sie dannscala-shell
scala> wordCounts.saveAsTextFile("gs://<bucket-name>/wordcounts-out/") scala> exit
Verwenden Sie
gsutil
, um die Ausgabedateien aufzulisten und die Dateiinhalte anzuzeigen$ gsutil ls gs://bucket-name/wordcounts-out/ gs://spark-scala-demo-bucket/wordcounts-out/ gs://spark-scala-demo-bucket/wordcounts-out/_SUCCESS gs://spark-scala-demo-bucket/wordcounts-out/part-00000 gs://spark-scala-demo-bucket/wordcounts-out/part-00001
gs://<bucket-name>/wordcounts-out/part-00000
-Inhalt prüfen$ gsutil cat gs://bucket-name/wordcounts-out/part-00000 (call,1) (What's,1) (sweet.,1) (we,1) (as,1) (name?,1) (any,1) (other,1)
Vorinstallierten Beispielcode ausführen
Der Dataproc-Masterknoten enthält auszuführende JAR-Dateien mit Apache Apache Standard- und Spark-Standardbeispielen.
JAR-Typ | Master node /usr/lib/ location |
GitHub-Quelle | Apache-Dokumente |
---|---|---|---|
Hadoop | hadoop-mapreduce/hadoop-mapreduce-examples.jar |
Quelllink | MapReduce-Anleitung |
Spark | spark/lib/spark-examples.jar |
Quelllink | Spark-Beispiele |
Beispiele über die Befehlszeile an Cluster senden
Beispiele können von Ihrem lokalen Entwicklungscomputer mit dem Befehlszeilentool gcloud
von Google Cloud CLI gesendet werden (siehe Google Cloud Console verwenden, um Jobs aus der Google Cloud Console einzureichen.
Beispiel für Hadoop WordCount
gcloud dataproc jobs submit hadoop --cluster=cluster-name \ --region=region \ --jars=file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \ --class=org.apache.hadoop.examples.WordCount \ -- URI of input file URI of output file
Beispiel für Spark WordCount
gcloud dataproc jobs submit spark --cluster=cluster-name \ --region=region \ --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \ --class=org.apache.spark.examples.JavaWordCount \ -- URI of input file
Cluster herunterfahren
Um laufende Gebühren zu vermeiden, fahren Sie den Cluster herunter und löschen Sie die für diese Anleitung verwendeten Cloud Storage-Ressourcen (Cloud Storage-Bucket und -Dateien).
So fahren Sie den Cluster herunter:
gcloud dataproc clusters delete cluster-name \ --region=region
So löschen Sie die Cloud Storage-JAR-Datei:
gsutil rm gs://bucket-name/HelloWorld.jar
Mit dem folgenden Befehl können Sie einen Bucket sowie alle zugehörigen Ordner und Dateien löschen:
gsutil rm -r gs://bucket-name/