Questo tutorial illustra diversi modi per creare e inviare un job Spark Scala a un cluster Managed Service for Apache Spark, tra cui:
- Scrivere e compilare un'app "Hello World" Spark Scala su una macchina locale dalla riga di comando utilizzando il REPL Scala (Read-Evaluate-Print-Loop o interprete interattivo) o lo strumento di build SBT
- Creare un pacchetto di classi Scala compilate in un file JAR con un manifest
- Inviare il file JAR Scala a un job Spark in esecuzione sul cluster Managed Service for Apache Spark
- Esaminare l'output del job Scala dalla Google Cloud console
Questo tutorial mostra anche come:
Scrivere ed eseguire un job mapreduce "WordCount" Spark Scala direttamente su un cluster Managed Service for Apache Spark utilizzando
spark-shellREPLEseguire esempi Apache Spark e Hadoop preinstallati su un cluster
Configura un progetto Google Cloud Platform
Se non l'hai già fatto:
Scrivi e compila il codice Scala in locale
Come semplice esercizio per questo tutorial, scrivi un'app "Hello World" Scala utilizzando lo Scala REPL o l'interfaccia a riga di comando SBT in locale sulla tua macchina di sviluppo.
Utilizza Scala
- Scarica i file binari Scala dalla pagina di installazione di Scala
Decomprimi il file, imposta la variabile di ambiente
SCALA_HOMEe aggiungila al percorso, come mostrato nelle istruzioni di installazione di Scala. Ad esempio:export SCALA_HOME=/usr/local/share/scala export PATH=$PATH:$SCALA_HOME/
Avvia Scala REPL
$ scala Welcome to Scala version ... Type in expressions to have them evaluated. Type :help for more information. scala>
Copia e incolla il codice
HelloWorldin Scala REPLobject HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") } }
Salva
HelloWorld.scalaed esci da REPLscala> :save HelloWorld.scala scala> :q
Compila con
scalac$ scalac HelloWorld.scala
Elenca i file
.classcompilati$ ls HelloWorld*.class HelloWorld$.class HelloWorld.class
Utilizza SBT
Crea un progetto "HelloWorld", come mostrato di seguito
$ mkdir hello $ cd hello $ echo \ 'object HelloWorld {def main(args: Array[String]) = println("Hello, world!")}' > \ HelloWorld.scalaCrea un file di configurazione
sbt.buildper impostareartifactName(il nome del file JAR che genererai di seguito) su "HelloWorld.jar" (vedi Modifica degli artefatti predefiniti)echo \ 'artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) => "HelloWorld.jar" }' > \ build.sbtAvvia SBT ed esegui il codice
$ 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 ...
Crea un pacchetto di codice in un file JAR con un manifest che specifica il punto di ingresso della classe principale (
HelloWorld), quindi esci> package ... Packaging .../hello/target/scala-.../HelloWorld.jar ... ... Done packaging. [success] Total time: ... > exit
Crea un file JAR
Crea un file JAR
con SBT o utilizzando il comando
jar.
Crea un file JAR con SBT
Il comando package SBT crea un file JAR (vedi Utilizzare SBT).
Crea un file JAR manualmente
- Cambia directory (
cd) nella directory che contiene i fileHelloWorld*.classcompilati, quindi esegui il comando seguente per creare un pacchetto dei file di classe in un file JAR con un manifest che specifica il punto di ingresso della classe principale (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%)
Copia il file JAR in Cloud Storage
- Utilizza Google Cloud CLI per copiare il file JAR in un bucket Cloud Storage nel tuo progetto
$ gcloud storage 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
Invia il file JAR a un job Managed Service for Apache Spark
Utilizza la Google Cloud console per inviare il file JAR al job Managed Service for Apache Spark. Compila i campi nella pagina Invia un job come segue:
- Cluster: seleziona il nome del cluster dall'elenco dei cluster
- Tipo di prestazione: Spark
Classe principale o file JAR: specifica il percorso dell'URI Cloud Storage del tuo file JAR HelloWorld (
gs://your-bucket-name/HelloWorld.jar).Se il file JAR non include un manifest che specifica il punto di ingresso del codice ("Main-Class: HelloWorld"), il campo "Classe principale o file JAR" deve indicare il nome della classe principale ("HelloWorld") e devi compilare il campo "File JAR" con il percorso dell'URI del file JAR (
gs://your-bucket-name/HelloWorld.jar).
Fai clic su Invia per avviare il job. Una volta avviato, il job viene aggiunto all'elenco dei job.
Fai clic sull'ID job per aprire la pagina Job, dove puoi visualizzare l'output del driver del job.
Scrivi ed esegui il codice Spark Scala utilizzando spark-shell REPL del cluster
Potresti voler sviluppare app Scala direttamente sul cluster Managed Service for Apache Spark. Hadoop e Spark sono preinstallati sui cluster Managed Service for Apache Spark e sono configurati con il connettore Cloud Storage, che consente al codice di leggere e scrivere dati direttamente da e in Cloud Storage.
Questo esempio mostra come connetterti tramite SSH al nodo master del cluster Managed Service for Apache Spark del tuo progetto, quindi utilizzare il spark-shell REPL per creare ed eseguire un'applicazione mapreduce di conteggio delle parole Scala.
Connettiti tramite SSH al nodo master del cluster Managed Service for Apache Spark
Vai alla pagina Cluster di Managed Service for Apache Spark del tuo progetto nella Google Cloud console, quindi fai clic sul nome del cluster.
Nella pagina dei dettagli del cluster, seleziona la scheda Istanze VM, quindi fai clic sulla selezione SSH visualizzata a destra della riga del nome del cluster.
Si apre una finestra del browser nella directory home del nodo master
Avvia
spark-shell$ 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>
Crea un RDD (Resilient Distributed Dataset) da uno snippet di testo di Shakespeare che si trova in Cloud Storage pubblico
scala> val text_file = sc.textFile("gs://pub/shakespeare/rose.txt")Esegui un mapreduce di conteggio delle parole sul testo, quindi visualizza il risultato
wordcountsscala> 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))Salva i conteggi in
<bucket-name>/wordcounts-outin Cloud Storage, quindi esci dascala-shellscala> wordCounts.saveAsTextFile("gs://<bucket-name>/wordcounts-out/") scala> exitUtilizza gcloud CLI per elencare i file di output e visualizzare i contenuti dei file
$ gcloud storage 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
Controlla i contenuti di
gs://<bucket-name>/wordcounts-out/part-00000$ gcloud storage 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)
Esecuzione del codice di esempio preinstallato
Il nodo master di Managed Service for Apache Spark contiene file JAR eseguibili con esempi standard di Apache Hadoop e Spark.
| Tipo di file JAR | Master node /usr/lib/ location |
Origine GitHub | Documenti Apache |
|---|---|---|---|
| Hadoop | hadoop-mapreduce/hadoop-mapreduce-examples.jar |
link di origine | Tutorial MapReduce |
| Spark | spark/lib/spark-examples.jar |
link di origine | Esempi di Spark |
Invio di esempi al cluster dalla riga di comando
Gli esempi possono essere inviati dalla macchina di sviluppo locale utilizzando lo strumento a riga di comando gcloud
di Google Cloud CLI (vedi
Utilizzo della Google Cloud console
per inviare job dalla Google Cloud console).
Esempio di conteggio delle parole Hadoop
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
Esempio di conteggio delle parole Spark
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
Arresta il cluster
Per evitare addebiti continui, arresta il cluster ed elimina le risorse Cloud Storage (bucket e file Cloud Storage) utilizzate per questo tutorial.
Per arrestare un cluster:
gcloud dataproc clusters delete cluster-name \ --region=region
Per eliminare il file JAR Cloud Storage:
gcloud storage rm gs://bucket-name/HelloWorld.jar
Puoi eliminare un bucket e tutte le relative cartelle e file con il comando seguente:
gcloud storage rm gs://bucket-name/ --recursive
Passaggi successivi
Leggi Gestire le dipendenze Java per le applicazioni Apache Spark su Managed Service for Apache Spark.