Tutorial ini menggambarkan berbagai cara untuk membuat dan mengirimkan tugas Spark Scala ke cluster Dataproc, termasuk cara:
- menulis dan mengompilasi aplikasi "Hello World" Spark Scala di mesin lokal dari command line menggunakan Scala REPL (Read-Evaluate-Print-Loop atau penafsir interaktif) atau alat build SBT
- memaketkan class Scala yang dikompilasi ke dalam file jar dengan manifes
- mengirimkan jar Scala ke tugas Spark yang berjalan di cluster Dataproc
- memeriksa output tugas Scala dari konsol Google Cloud
Tutorial ini juga menunjukkan cara:
menulis dan menjalankan tugas mapreduce "WordCount" Spark Scala secara langsung di cluster Dataproc menggunakan REPL
spark-shell
menjalankan contoh Apache Spark dan Hadoop yang telah diinstal sebelumnya di cluster
Siapkan project Google Cloud Platform
Jika Anda belum melakukannya:
Menulis dan mengompilasi kode Scala secara lokal
Sebagai latihan sederhana untuk tutorial ini, tulis aplikasi Scala "Hello World" menggunakan Scala REPL atau antarmuka command line SBT secara lokal di mesin pengembangan Anda.
Menggunakan Scala
- Download biner Scala dari halaman Scala Install
Ekstrak file, tetapkan variabel lingkungan
SCALA_HOME
, dan tambahkan ke jalur Anda, seperti yang ditunjukkan dalam petunjuk Penginstalan Scala. Contoh:export SCALA_HOME=/usr/local/share/scala export PATH=$PATH:$SCALA_HOME/
Meluncurkan Scala REPL
$ scala Welcome to Scala version ... Type in expressions to have them evaluated. Type :help for more information. scala>
Salin dan tempel kode
HelloWorld
ke Scala REPLobject HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") } }
Menyimpan
HelloWorld.scala
dan keluar dari REPLscala> :save HelloWorld.scala scala> :q
Mengompilasi dengan
scalac
$ scalac HelloWorld.scala
Mencantumkan file
.class
yang dikompilasi$ ls HelloWorld*.class HelloWorld$.class HelloWorld.class
Menggunakan SBT
Buat project "HelloWorld", seperti yang ditunjukkan di bawah
$ mkdir hello $ cd hello $ echo \ 'object HelloWorld {def main(args: Array[String]) = println("Hello, world!")}' > \ HelloWorld.scala
Buat file konfigurasi
sbt.build
untuk menetapkanartifactName
(nama file jar yang akan Anda buat, di bawah) ke "HelloWorld.jar" (lihat Mengubah artefak default)echo \ 'artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) => "HelloWorld.jar" }' > \ build.sbt
Meluncurkan SBT dan menjalankan kode
$ 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 ...
Paketkan kode ke dalam file jar dengan manifes yang menentukan titik entri class utama (
HelloWorld
), lalu keluar> package ... Packaging .../hello/target/scala-.../HelloWorld.jar ... ... Done packaging. [success] Total time: ... > exit
Membuat jar
Buat file jar
dengan SBT
atau menggunakan perintah
jar.
Membuat jar dengan SBT
Perintah package SBT akan membuat file jar (lihat Menggunakan SBT).
Membuat jar secara manual
- Ubah direktori (
cd
) menjadi direktori yang berisi fileHelloWorld*.class
yang dikompilasi, lalu jalankan perintah berikut untuk memaketkan file class ke dalam jar dengan manifes yang menentukan titik entri class utama (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%)
Menyalin jar ke Cloud Storage
- Gunakan Google Cloud CLI untuk menyalin jar ke bucket Cloud Storage di project Anda
$ 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
Mengirimkan jar ke tugas Spark Dataproc
Gunakan konsol Google Cloud untuk mengirimkan file jar ke tugas Spark Dataproc. Isi kolom di halaman Kirim tugas sebagai berikut:
- Cluster: Pilih nama cluster Anda dari daftar cluster
- Jenis tugas: Spark
Class atau jar utama: Tentukan jalur URI Cloud Storage ke jar HelloWorld Anda (
gs://your-bucket-name/HelloWorld.jar
).Jika jar Anda tidak menyertakan manifes yang menentukan titik entri ke kode Anda ("Main-Class: HelloWorld"), kolom "Main class or jar" harus menyatakan nama class Utama Anda ("HelloWorld"), dan Anda harus mengisi kolom "Jar files" dengan jalur URI ke file jar (
gs://your-bucket-name/HelloWorld.jar
).
Klik Kirim untuk memulai tugas. Setelah dimulai, tugas akan ditambahkan ke daftar Tugas.
Klik ID Tugas untuk membuka halaman Tugas, tempat Anda dapat melihat output driver tugas.
Menulis dan menjalankan kode Spark Scala menggunakan REPL spark-shell
cluster
Anda mungkin ingin mengembangkan aplikasi Scala langsung di cluster Dataproc. Hadoop dan Spark sudah diprainstal di cluster Dataproc, dan dikonfigurasi dengan konektor Cloud Storage, yang memungkinkan kode Anda membaca dan menulis data langsung dari dan ke Cloud Storage.
Contoh ini menunjukkan cara melakukan SSH ke node master cluster Dataproc project, lalu menggunakan REPL spark-shell untuk membuat dan menjalankan aplikasi mapreduce wordcount Scala.
Mengakses node master cluster Dataproc melalui SSH
Buka halaman Cluster Dataproc project Anda di konsol Google Cloud, lalu klik nama cluster Anda.
Di halaman detail cluster, pilih tab VM Instances, lalu klik pilihan SSH yang muncul di sebelah kanan baris nama cluster Anda.
Jendela browser akan terbuka di direktori beranda Anda di node master
Meluncurkan
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>
Membuat RDD (Resilient Distributed Dataset) dari cuplikan teks Shakespeare yang terletak di Cloud Storage publik
scala> val text_file = sc.textFile("gs://pub/shakespeare/rose.txt")
Jalankan wordcount mapreduce pada teks, lalu tampilkan hasil
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))
Simpan jumlah di
<bucket-name>/wordcounts-out
di Cloud Storage, lalu keluar dariscala-shell
scala> wordCounts.saveAsTextFile("gs://<bucket-name>/wordcounts-out/") scala> exit
Menggunakan gcloud CLI untuk mencantumkan file output dan menampilkan konten 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
Memeriksa konten
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)
Menjalankan Kode Contoh yang Diinstal Sebelumnya
Node master Dataproc berisi file jar yang dapat dijalankan dengan contoh Apache Hadoop dan Spark standar.
Jenis Jar | Master node /usr/lib/ location |
Sumber GitHub | Dokumen Apache |
---|---|---|---|
Hadoop | hadoop-mapreduce/hadoop-mapreduce-examples.jar |
link sumber | Tutorial MapReduce |
Spark | spark/lib/spark-examples.jar |
link sumber | Contoh Spark |
Mengirim contoh ke cluster dari command line
Contoh dapat dikirim dari komputer pengembangan lokal Anda menggunakan alat command line gcloud
Google Cloud CLI (lihat Menggunakan konsol Google Cloud untuk mengirim tugas dari konsol Google Cloud).
Contoh WordCount 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
Contoh WordCount 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
Menonaktifkan cluster
Untuk menghindari tagihan yang berkelanjutan, matikan cluster dan hapus resource Cloud Storage (bucket dan file Cloud Storage) yang digunakan untuk tutorial ini.
Untuk menonaktifkan cluster:
gcloud dataproc clusters delete cluster-name \ --region=region
Untuk menghapus file jar Cloud Storage:
gcloud storage rm gs://bucket-name/HelloWorld.jar
Anda dapat menghapus bucket beserta semua folder dan filenya dengan perintah berikut:
gcloud storage rm gs://bucket-name/ --recursive