MapReduce memiliki keterbatasan dataflow yang linear, dimana proses adalah membaca data, melakukan fungsi Map, Reduce results kemudian menulisnya ke disk. Hal tersebut membuat perhitungan kompleks sulit dilakukan dalam waktu yang relatif pendek, meskipun menggunakan cluster server yang banyak.
Apache Spark adalah respon dari keterbatasan diatas. Berikut keypoint dari Apache Spark:
- General puropose cluster-computing framework.
- Menggunakan konsep reselient distributed data multisets.
- Extension dari shared disk dari setiap cluster, Apache Spark menggunakan shared memory untuk mengurangi operasi write/read terhadap disk.
Modul yang didukung Apache Spark:
- Spark SQL, didesain untuk bekerja dengan structured data, menggunakan sintaks SQL. Data disimpan dalam bentuk dataframe, programmer dapat menggunakan dataframe API untuk mengakses data.
- Spark Streaming, berguna untuk streaming data ingestion. Menggunakan small batches.
- MLLib, Spark machine learning library, mendukung algoritma seperti classification, regression, deccission trees, recommendation dan lainnya. Dalam benchmark, logistic regression berjalan 100x lebih cepat dibandingkan menggunakan Hadoop MapReduce.
- GraphX, modul untuk melakukan komputasi iterasi graph.
Apache Spark nendukung language yang umum seperti: Java, Scala, Python, R, SQL.
Untuk menjalankan Apache Spark, dibutuhkan:
- Cluster Manager, dapat menggunakan Yarn Hadoop atau Kubernetes.
- Storage System, mendukung Hadoop HDFS, Apache HBASE dan Apache Cassandra.
Berikut perbandingan antara Hadoop dan Spark
| Hadoop | Spark |
|---|---|
| Slow disk storage | Fast memory storage |
| High latency | Low latency |
| Slow, reliable batch processing | Stream processing |
| 100x lebih cepat menggunakan memory 10x lebih cepat menggunakan disk |