Episode ini mempraktikkan cara menjalankan Apache Spark: instalasi standalone di local, masuk ke spark-shell dan pyspark, mengirim job dengan spark-submit dalam deployment mode client maupun cluster, serta membaca Spark UI untuk memantau eksekusi job.

Episode 2 memberi kalian peta arsitektur Spark. Sekarang saatnya menjalankan Spark secara nyata. Episode 3 ini berfokus pada praktik: instalasi standalone, berinteraksi lewat spark-shell dan pyspark, mengirim job dengan spark-submit, serta memantau eksekusi melalui Spark UI.
Kemampuan ini adalah gerbang menuju semua episode berikutnya. Setelah episode ini, kalian bisa menjalankan contoh kode apa pun di series ini dengan percaya diri dan memahami apa yang terjadi di belakang layar.
Cara paling cepat adalah mengunduh pre-built binary dari situs resmi Apache Spark. Untuk series ini kita memakai versi 4.0. Pilih paket yang sudah menyertakan Hadoop, lalu ekstrak:
wget https://archive.apache.org/dist/spark/spark-4.0.0/spark-4.0.0-bin-hadoop3.tgz
tar -xzf spark-4.0.0-bin-hadoop3.tgz
sudo mv spark-4.0.0-bin-hadoop3 /opt/sparkAgar perintah Spark bisa dipanggil dari mana saja, atur SPARK_HOME dan PATH. Tambahkan ke ~/.bashrc:
export SPARK_HOME=/opt/spark
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))Setelah source ~/.bashrc, verifikasi dengan spark-shell --version. Spark juga menyediakan skrip untuk menjalankan cluster standalone: start-master.sh dan start-worker.sh dari direktori sbin. Skrip ini kita pakai di episode 14 untuk deployment.
Tip
Gunakan versi binary yang menyertakan Hadoop (bin-hadoop3) meskipun kalian tidak memakai HDFS, karena format-format penyimpanan dan ekosistem terkait sudah tersedia lebih lengkap.
spark-shell memberi lingkungan interaktif di Scala. Di dalamnya, variabel sc (SparkContext) dan spark (SparkSession) sudah tersedia secara otomatis:
spark-shell --master local[*]
scala> val data = sc.parallelize(1 to 10)
scala> data.reduce(_ + _)Perintah sc.parallelize(1 to 10) — maaf, sintaks di atas memakai form interaktif; detail transformasi akan kita bedah di episode 4. Yang penting: shell adalah tempat eksperimen tercepat karena tidak perlu mengompilasi program penuh.
Untuk kalian yang memilih Python, pyspark menyediakan antarmuka yang sama:
pyspark --master local[4]Setelah masuk, variabel spark sudah aktif. Coba:
df = spark.range(100).filter("id % 2 == 0")
print(df.count())Memakai --master local[4] memberi Spark 4 core sehingga kalian bisa melihat paralelisme nyata. Output 50 menunjukkan filter bekerja dengan benar.
Untuk notebook, tambahkan dependency findspark atau cukup install pyspark di environment yang sama dengan Jupyter. Variabel spark bisa dibuat manual dengan SparkSession.builder seperti di episode 0 — pola yang paling portabel antar environment.
Untuk menjalankan aplikasi Spark yang disimpan dalam file, gunakan spark-submit. Buat file hitung.py:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("hitung").getOrCreate()
df = spark.range(10).filter("id >= 3")
print("Hasil:", df.count())
spark.stop()Lalu kirim job:
spark-submit --master local[2] hitung.pyPada client mode, driver berjalan di mesin tempat spark-submit dijalankan — mudah untuk debugging karena log muncul di terminal. Pada cluster mode, driver berjalan di dalam cluster manager (misalnya di node worker), sehingga mesin pengirim bisa ditutup setelah submit.
spark-submit --master yarn --deploy-mode cluster hitung.pyAturan praktis: gunakan client mode saat development, cluster mode saat produksi agar driver tidak bergantung pada laptop atau CI runner.
Saat aplikasi berjalan, Spark menyediakan Spark UI di port 4040 — kalian bisa membukanya di browser saat job aktif. UI menampilkan:
open http://localhost:4040Pada halaman Stages, perhatikan kolom seperti Duration, Shuffle Read/Write, dan Tasks. Jika salah satu stage memakan waktu jauh lebih lama dari yang lain, kemungkinan ada skew — sebagian task mengerjakan data terlalu berat. Jika Shuffle Read sangat besar, pertimbangkan strategi join yang lebih baik. Keduanya akan kita pelajari di episode 9.
Spark UI hanya tersedia saat aplikasi berjalan. Untuk melihat riwayat aplikasi yang sudah selesai, aktifkan event logging dan jalankan History Server:
spark.eventLog.enabled=true
spark.eventLog.dir=file:/tmp/spark-events/opt/spark/sbin/start-history-server.shDengan History Server, kalian bisa meninjau ulang UI aplikasi yang sudah selesai — sangat berguna untuk debugging dan audit. Detail lengkap observability akan dibahas di episode 13.
Episode 3 mempraktikkan fondasi operasional: kalian menginstal Spark standalone, bereksperimen di spark-shell dan pyspark, mengirim aplikasi dengan spark-submit dalam mode client dan cluster, serta membaca Spark UI dan History Server untuk memantau eksekusi.
Inti yang harus dibawa pulang:
SPARK_HOME serta PATH dengan benar.spark-shell dan pyspark adalah playground cepat untuk eksperimen.spark-submit memakai --deploy-mode client saat dev dan cluster saat produksi.Di episode 4 selanjutnya kita akan membahas RDD dan functional transformations — cara membuat RDD, operasi map, filter, flatMap, reduceByKey, groupByKey, konsep lazy evaluation dan lineage, serta kapan RDD masih relevan untuk low-level processing.