Episode ini mengupas sejarah Apache Spark, evolusinya dari Hadoop MapReduce yang disk-bound menuju in-memory computation, serta keunggulan unified API batch dan stream. Kalian juga memahami perbandingan Spark dengan MapReduce, Flink, dan Beam.

Episode 0 sudah memastikan environment kalian siap. Sekarang saatnya memahami mengapa Spark ada. Episode 1 ini menjawab tiga pertanyaan besar: dari mana Spark berasal, apa keunggulannya, dan mengapa kalian — sebagai engineer yang bekerja dengan data skala besar — membutuhkannya.
Banyak orang mulai memakai Spark karena tutorial, padahal memahami latar belakangnya jauh lebih berharga. Dengan tahu masalah yang diselesaikan, kalian akan lebih mudah memutuskan kapan memakai Spark, kapan memilih Flink, dan bagaimana memposisikannya dalam arsitektur data. Mari kita mulai dari awal cerita.
Cerita Spark dimulai dari Hadoop MapReduce, paradigma pemrosesan data terdistribusi yang dipopulerkan oleh Google dan diimplementasikan open-source oleh Apache Hadoop sekitar tahun 2006. Ide besarnya revolusioner: tulis fungsi map dan reduce, dan framework akan membagi data ke banyak mesin, menjalankan komputasi secara paralel, lalu menggabungkan hasil.
Namun MapReduce memiliki kelemahan struktural. Setiap tahap (stage) menulis hasil antara (intermediate result) ke disk sebelum tahap berikutnya dimulai. Untuk pekerjaan yang kompleks dengan banyak tahap, ini berarti pembacaan dan penulisan disk yang berulang — sangat lambat untuk workload iteratif seperti machine learning.
Pada tahun 2009, para peneliti di UC Berkeley AMPLab memulai proyek yang kemudian menjadi Apache Spark. Visinya: memproses data secara in-memory — menyimpan data di RAM antar tahap, bukan menulis ke disk — sehingga workload iteratif dan interaktif bisa berjalan puluhan hingga ratusan kali lebih cepat.
Proyek ini di-research secara terbuka, menjadi project top-level Apache pada 2014, dan sejak itu menjadi salah satu project big data paling aktif di dunia. Pada tahun 2016, komunitas memperkenalkan Spark SQL, Structured Streaming, dan MLlib yang menyatu dalam satu API — inilah yang membedakan Spark dari pendahulunya.
Konteks penting lainnya: ekosistem Hadoop membutuhkan banyak komponen terpisah. Untuk batch butuh MapReduce, untuk SQL butuh Hive, untuk streaming butuh Storm, untuk machine learning butuh Mahout. Spark menawarkan satu engine untuk semuanya: batch, SQL, streaming, graph, dan machine learning dalam satu runtime yang sama.
Hadoop era: MapReduce + Hive + Storm + Mahout (banyak komponen)
Spark era: Spark Core + Spark SQL + Structured Streaming + MLlib (satu runtime)Perbedaan fundamental dengan MapReduce: Spark menyimpan data mentah dan hasil antara di memory dengan pola lazy evaluation dan DAG scheduler. Hasil tidak ditulis ke disk kecuali diminta. Untuk workload iteratif seperti melatih model machine learning yang membaca dataset berulang kali, ini menghasilkan percepatan dramatis.
Spark memakai model micro-batch untuk streaming: data yang datang dibagi menjadi batch-batch kecil lalu diproses dengan API yang persis sama dengan batch processing. Artinya kalian menulis satu skill set dan memakainya untuk ETL harian maupun pipeline real-time. Ini kontras dengan framework lain yang memaksa kalian mempelajari dua paradigma berbeda.
Spark menyediakan API tinggi tingkat (high-level) yang ringkas di Scala, Java, Python, dan R. Contohnya, membaca CSV, filter, dan agregasi cukup dalam beberapa baris:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("contoh").getOrCreate()
df = spark.read.csv("data/transaksi.csv", header=True)
ringkasan = df.groupBy("kategori").sum("jumlah")
ringkasan.show()df.groupBy("kategori").sum("jumlah") mengagregasi data melintasi seluruh cluster dengan satu baris — sesuatu yang membutuhkan puluhan baris MapReduce. Ke-23 episode series ini akan membangun kebiasaan memakai API tinggi tingkat ini.
Satu prinsip yang perlu kalian pegang sejak awal: semakin tinggi tingkat abstraksi yang kalian pakai, semakin banyak optimasi otomatis yang dilakukan Spark. Mulai dari DataFrame dan Spark SQL, lalu turun ke RDD hanya saat benar-benar membutuhkan kontrol rendah — inilah pola yang disarankan hampir semua praktisi data engineering.
Flink unggul di true streaming — memproses event satu per satu (record-at-a-time) dengan latensi milidetik dan state management yang sangat matang. Spark memakai micro-batch yang menambah latensi puluhan milidetik namun lebih sederhana. Aturan praktis: jika kalian butuh exactly-once yang sangat ketat dan latensi paling rendah untuk streaming murni, Flink adalah kandidat kuat; untuk workload campuran batch dan stream, Spark lebih praktis.
Beam adalah abstraksi (SDK + runner), bukan engine. Kalian menulis pipeline sekali dan menjalankannya di berbagai runner: Dataflow, Flink, atau Spark. Berbeda dengan itu, Spark adalah engine lengkap. Beam berguna jika organisasi ingin portabilitas lintas engine; Spark menawarkan kedalaman fitur di engine-nya sendiri.
Spark dipakai di berbagai skenario industri:
Contoh nyata: sebuah perusahaan fintech menjalankan ETL transaksi ke data lake setiap malam memakai Spark batch, sementara tim produk menganalisis klik pengguna secara real-time lewat Structured Streaming. Keduanya memakai engine dan API yang sama — inilah nilai dari unified engine yang ditawarkan Spark.
sumber data → ingestion → Spark (batch + stream) → warehouse/lakehouse → BI & MLInfo
Keputusan memilih engine bukan satu arah. Banyak perusahaan memakai Spark untuk batch dan ETL, lalu menambahkan Flink khusus untuk streaming dengan latensi paling rendah. Memahami keunggulan relatif ini membuat kalian menjadi engineer yang lebih matang.
Episode 1 memberi kalian konteks: Spark lahir di UC Berkeley AMPLab sekitar 2009 untuk mengatasi kelemahan MapReduce yang disk-bound, menjadi project top-level Apache pada 2014, dan kini menjadi engine terdistribusi paling populer dengan keunggulan in-memory computation dan unified API.
Inti yang harus dibawa pulang:
Di episode 2 selanjutnya kita akan membahas konsep dasar dan arsitektur Spark — peran Driver, Executors, dan Cluster Manager, core abstraction RDD/DataFrame/Dataset, model eksekusi DAG stages dan tasks, serta storage model seperti partitioning dan shuffle. Ini adalah fondasi arsitektural yang akan menemani seluruh series.