Tutorial ini mengilustrasikan berbagai cara untuk membuat dan mengirimkan tugas Spark Scala ke cluster Managed Service untuk Apache Spark, termasuk cara:
- menulis dan mengompilasi aplikasi Spark Scala "Hello World" di mesin lokal dari command line menggunakan the Scala REPL (Read-Evaluate-Print-Loop atau interpreter interaktif) atau the SBT alat build
- mengemas class Scala yang dikompilasi ke dalam file jar dengan manifes
- mengirimkan jar Scala ke tugas Spark yang berjalan di cluster Managed Service untuk Apache Spark
- memeriksa output tugas Scala dari Google Cloud konsol
Tutorial ini juga menunjukkan cara:
menulis dan menjalankan tugas mapreduce Spark Scala "WordCount" langsung di cluster Managed Service untuk Apache Spark menggunakan
spark-shellREPLmenjalankan contoh Apache Spark dan Hadoop yang telah diinstal sebelumnya di cluster
Menyiapkan Google Cloud project
Jika Anda belum melakukannya:
Menulis dan mengompilasi kode Scala secara lokal
Sebagai latihan dasar 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 Penginstalan Scala
Buka paket 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/
Luncurkan Scala REPL
$ scala Welcome to Scala version ... Type in expressions to have them evaluated. Type :help for more information. scala>
Salin dan tempel kode
HelloWorldke Scala REPLobject HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") } }
Simpan
HelloWorld.scaladan keluar dari REPLscala> :save HelloWorld.scala scala> :q
Kompilasi dengan
scalac$ scalac HelloWorld.scala
Cantumkan file
.classyang 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.scalaBuat file konfigurasi
sbt.builduntuk 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.sbtLuncurkan SBT dan jalankan 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 ...
Kemasi 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 paket SBT membuat file jar (lihat Menggunakan SBT).
Membuat jar
secara manual
- Ubah direktori (
cd) ke direktori yang berisi fileHelloWorld*.classyang dikompilasi, lalu jalankan perintah berikut untuk mengemas 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 Managed Service untuk Apache Spark
Gunakan Google Cloud konsol untuk mengirimkan file jar ke tugas Managed Service untuk Apache Spark. Isi kolom di halaman Kirim tugas sebagai berikut:
- Cluster: Pilih nama cluster Anda dari daftar cluster
- Jenis pekerjaan: 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 "Class atau jar utama" harus menyatakan nama Class Utama Anda ("HelloWorld"), dan Anda harus mengisi kolom "File jar" dengan jalur URI ke file jar Anda (
gs://your-bucket-name/HelloWorld.jar).
Klik Kirim untuk memulai tugas. Setelah dimulai, tugas akan ditambahkan ke daftar Tugas.
Klik ID pekerjaan untuk membuka halaman Tugas, tempat Anda dapat melihat output driver pekerjaan.
Menulis dan menjalankan kode Spark Scala menggunakan spark-shell REPL cluster
Anda mungkin ingin mengembangkan aplikasi Scala langsung di cluster Managed Service untuk Apache Spark. Hadoop dan Spark telah diinstal sebelumnya di cluster Managed Service untuk Apache Spark, dan dikonfigurasi dengan konektor Cloud Storage, yang memungkinkan kode Anda membaca dan menulis data langsung dari dan ke Cloud Storage.
Contoh ini menunjukkan cara menggunakan SSH untuk terhubung ke node master cluster Managed Service untuk Apache Spark, lalu menggunakan spark-shell REPL untuk membuat dan menjalankan aplikasi mapreduce wordcount Scala.
Gunakan SSH untuk terhubung ke node master cluster
Buka halaman Clusters di Google Cloud konsol, 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
Luncurkan
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>
Buat RDD (Resilient Distributed Dataset) dari cuplikan teks Shakespeare yang berada di Cloud Storage publik
scala> val text_file = sc.textFile("gs://pub/shakespeare/rose.txt")Jalankan mapreduce wordcount pada teks, lalu tampilkan hasil
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))Simpan jumlah di
<bucket-name>/wordcounts-outdi Cloud Storage, lalu keluar dariscala-shellscala> wordCounts.saveAsTextFile("gs://<bucket-name>/wordcounts-out/") scala> exitGunakan 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
Periksa 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 Telah Diinstal Sebelumnya
Node master cluster 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 |
Mengirimkan contoh ke cluster Anda dari command line
Contoh dapat dikirimkan dari mesin pengembangan lokal Anda menggunakan alat command line Google Cloud CLI gcloud (lihat
Menggunakan Google Cloud konsol
untuk mengirimkan tugas dari Google Cloud konsol).
Contoh 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
Contoh 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
Mematikan cluster
Untuk menghindari biaya berkelanjutan, matikan cluster Anda dan hapus resource Cloud Storage (bucket dan file Cloud Storage) yang digunakan untuk tutorial ini.
Untuk mematikan 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 dan semua folder serta filenya dengan perintah berikut:
gcloud storage rm gs://bucket-name/ --recursive