Questo tutorial illustra diversi modi per creare e inviare un job Spark Scala a un Cluster Dataproc, con istruzioni su come:
- scrivere e compilare una finestra "Hello World" di Spark Scala su una macchina locale dalla riga di comando la REPL IN Scala (Read-Valuta-Print-Loop o interprete interattivo) oppure lo strumento di creazione SBT
- ha compilato le classi Scala in un file jar con un file manifest
- invia il jar Scala a un job Spark eseguito sul cluster Dataproc
- esamina l'output del job Scala dalla console Google Cloud
Questo tutorial illustra anche come:
scrivere ed eseguire un "WordCount" in Spark Scala un job MapReduce direttamente su Dataproc mediante il REPL
spark-shell
Esecuzione di esempi di Apache Spark e Hadoop preinstallati su un cluster
Configura un progetto Google Cloud Platform
Se non l'hai ancora fatto:
Scrivere e compilare il codice Scala localmente
Come semplice esercizio per questo tutorial, scrivi un'app Scala "Hello World" utilizzando la REPL Scala o l'interfaccia a riga di comando SBT localmente sulla tua macchina di sviluppo.
Utilizzare Scala
- Scarica i binari di Scala dalla pagina Installazione di Scala
Decomprimi il file, imposta la variabile di ambiente
SCALA_HOME
e aggiungila al tuo percorso, come mostrato in Installazione con Scala istruzioni. 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
HelloWorld
in Scala REPLobject HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") } }
Salva
HelloWorld.scala
ed esci dalla REPLscala> :save HelloWorld.scala scala> :q
Compila con
scalac
$ scalac HelloWorld.scala
Elenca i file
.class
compilati$ ls HelloWorld*.class HelloWorld$.class HelloWorld.class
Usa 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.scala
Crea un file di configurazione
sbt.build
per impostareartifactName
(il nome del file jar che genererai di seguito) su "HelloWorld.jar" (vedi Modificare gli elementi predefiniti)echo \ 'artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) => "HelloWorld.jar" }' > \ build.sbt
Avvia 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 ...
Impacchetta il codice in un file jar con un manifest che specifica l'entry point della classe principale (
HelloWorld
), quindi esci> package ... Packaging .../hello/target/scala-.../HelloWorld.jar ... ... Done packaging. [success] Total time: ... > exit
Crea un barattolo
Crea un file jar con SBT
o utilizzando il comando jar.
Creare un file JAR con SBT
Il comando package di SBT crea un file JAR (vedi Utilizzare SBT).
Creare un file jar manualmente
- Cambia la directory (
cd
) nella directory che contiene il fileHelloWorld*.class
compilato ed esegui questo comando per pacchettizzare i file di classe in un jar con file manifest che specifica il punto di ingresso principale della classe (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
- Usa Google Cloud CLI per copiare il jar in un ambiente Cloud Storage bucket 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 Spark Dataproc
Utilizza la console Google Cloud per inviare il file jar al job Spark Dataproc. Compila i campi in la pagina Invia un job, come segue:
- Cluster: seleziona il nome del cluster dall'elenco dei cluster
- Tipo di job: Spark
Classe principale o jar: specifica il percorso dell'URI Cloud Storage del tuo jar HelloWorld (
gs://your-bucket-name/HelloWorld.jar
).Se il file JAR non include un manifest che specifica il punto di contatto del codice ("Main-Class: HelloWorld"), il campo "Classe o file JAR principale" deve indicare il nome della classe principale ("HelloWorld") e devi compilare il campo "File JAR" con il percorso 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 ai job dall'elenco di lettura.
Fai clic sull'ID job per aprire la pagina Job, dove puoi visualizzare l'output del driver del job.
Scrivere ed eseguire codice Spark Scala utilizzando la REPL spark-shell
del cluster
Ti consigliamo di sviluppare app Scala direttamente nel tuo cluster Dataproc. Hadoop e Spark sono preinstallati sui cluster Dataproc e sono configurati con il connettore Cloud Storage, che consente al codice di leggere e scrivere dati direttamente da e verso Cloud Storage.
Questo esempio mostra come connetterti tramite SSH al nodo principale del cluster Dataproc del tuo progetto, quindi utilizzare il REPL spark-shell per creare ed eseguire un'applicazione mapreduce Scala per il conteggio delle parole.
Esegui SSH sul nodo principale del cluster Dataproc
Vai alla pagina Cluster di Dataproc del tuo progetto nella console Google Cloud, quindi fai clic sul nome del cluster.
Nella pagina dei dettagli del cluster, seleziona la scheda Istanze VM, quindi fai clic sul pulsante Selezione SSH visualizzata a destra alla riga del nome del cluster.
Si apre una finestra del browser nella home directory sul 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 (Set di dati distribuito resiliente) da uno snippet di testo Shakespeare situato in Cloud Storage pubblico
scala> val text_file = sc.textFile("gs://pub/shakespeare/rose.txt")
Esegui un job MapReduce di conteggio delle parole sul testo, quindi visualizza il risultato
wordcounts
scala> 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-out
in Cloud Storage, quindi esci dascala-shell
scala> wordCounts.saveAsTextFile("gs://<bucket-name>/wordcounts-out/") scala> exit
Utilizza 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
Controllare 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 di un codice di esempio preinstallato
Il nodo master di Dataproc contiene file jar eseguibili con Apache Hadoop e Spark standard esempi.
Tipo di barattolo | Master node /usr/lib/ location |
Origine GitHub | Documentazione 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
Google Cloud CLI (consulta
Utilizzare la console Google Cloud
per inviare job dalla console Google Cloud).
Esempio di WordCount di 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 WordCount di 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 (Cloud Storage bucket di archiviazione e file) usati per questo tutorial.
Per arrestare un cluster:
gcloud dataproc clusters delete cluster-name \ --region=region
Per eliminare il file jar di Cloud Storage:
gcloud storage rm gs://bucket-name/HelloWorld.jar
Puoi eliminare un bucket e tutte le relative cartelle e file con il seguente comando:
gcloud storage rm gs://bucket-name/ --recursive
Passaggi successivi
Consulta Gestione delle dipendenze Java per le applicazioni Apache Spark su Dataproc.
Consulta i suggerimenti per l'ottimizzazione dei job di Spark