All Products
Search
Document Center

E-MapReduce:ESS (Hanya tersedia untuk pengguna yang sudah ada)

Last Updated:Jun 21, 2026

Layanan EMR Remote Shuffle Service (ESS) merupakan ekstensi untuk E-MapReduce (EMR) yang mengoptimalkan operasi shuffle pada Mesin komputasi.

Latar Belakang

Mekanisme shuffle tradisional menghadirkan beberapa tantangan:

  • Pada skenario dengan volume data besar, operasi shuffle write dapat menyebabkan spill ke disk, yang mengakibatkan amplifikasi tulis.

  • Operasi shuffle read menghasilkan volume tinggi paket jaringan kecil, yang dapat menyebabkan error koneksi terputus.

  • Operasi shuffle read melibatkan banyak permintaan I/O kecil dan pembacaan acak, sehingga memberikan beban berat pada disk dan CPU.

  • Ketika jumlah mapper (M) dan reducer (N) mencapai ribuan, jumlah total koneksi jaringan (M × N) dapat mencegah pekerjaan selesai.

  • NodeManager dan Spark Shuffle Service berjalan dalam proses yang sama. Ketika volume data shuffle sangat besar, NodeManager dapat restart, yang berdampak pada stabilitas penjadwalan YARN.

ESS memberikan keunggulan berikut:

  • Menggunakan mekanisme shuffle bergaya dorong (push-style) alih-alih bergaya tarik (pull-style), sehingga mengurangi tekanan memori pada mapper.

  • Mendukung agregasi I/O, yang mengurangi jumlah koneksi shuffle read dari M × N menjadi N serta menggantikan pembacaan acak dengan pembacaan sekuensial.

  • Mendukung mekanisme dua replika untuk mengurangi kemungkinan kegagalan fetch.

  • Mendukung arsitektur pemisahan komputasi dan penyimpanan, memungkinkan Anda men-deploy Shuffle Service di lingkungan perangkat keras terpisah yang tidak terikat dengan kluster komputasi.

  • Menghilangkan ketergantungan pada disk lokal saat menjalankan Spark di Kubernetes.

Gambar berikut menunjukkan arsitektur ESS.ESS

Batasan

Dokumen ini hanya berlaku untuk versi EMR sebelum EMR-3.39.1, seri versi EMR-4.x, dan versi sebelum EMR-5.5.0. Untuk EMR-3.39.1 atau versi lebih baru serta EMR-5.5.0 atau versi lebih baru, lihat RSS.

Membuat kluster

Sebagai contoh, pada EMR-4.5.0, Anda dapat membuat kluster dengan ESS melalui dua cara:

  • Buat kluster E-MapReduce Shuffle Service. Pada halaman Konfigurasi Perangkat Lunak, untuk Jenis Kluster, pilih Shuffle Service. Layanan yang diperlukan adalah ESS (1.0.0).

  • Buat kluster E-MapReduce Hadoop. Pada halaman Software Configuration, di bagian Cluster Type, pilih jenis seperti Hadoop, Kafka, atau Druid. Kemudian, konfigurasikan Cloud Native Options (misalnya, pada ECS) dan Product Version (misalnya, EMR-4.5.0). Halaman tersebut kemudian akan menampilkan layanan wajib yang sesuai (seperti HDFS, YARN, dan Spark) dan layanan opsional (seperti ESS, HBase, dan Flink) beserta versinya.

Untuk informasi selengkapnya tentang cara membuat kluster, lihat Create a cluster.

Menggunakan ESS

Untuk menggunakan ESS dengan Spark, tambahkan parameter berikut ke pengiriman pekerjaan Spark Anda. Untuk informasi selengkapnya tentang cara mengonfigurasi parameter, lihat Edit jobs.

Untuk informasi selengkapnya tentang parameter Spark, lihat Spark Configuration.

Parameter

Deskripsi

spark.shuffle.manager

Nilainya harus org.apache.spark.shuffle.ess.EssShuffleManager.

spark.ess.master.address

Tentukan alamat dalam format <ess-master-ip>:<ess-master-port>.

Parameter tersebut adalah sebagai berikut:

  • <ess-master-ip>: Alamat IP publik node master.

  • <ess-master-port>: Nomor port. Nilai ini harus diatur ke 9097.

spark.shuffle.service.enabled

Atur nilainya ke false.

Anda harus menonaktifkan layanan shuffle eksternal bawaan untuk menggunakan EMR Remote Shuffle Service.

spark.shuffle.useOldFetchProtocol

Atur nilainya ke true.

Ini mengaktifkan kompatibilitas dengan protokol shuffle lama.

spark.sql.adaptive.enabled

Atur nilainya ke false.

EMR Remote Shuffle Service tidak mendukung Adaptive Execution.

spark.sql.adaptive.skewJoin.enabled

Parameter

Halaman konfigurasi layanan ESS mencantumkan semua parameter ESS.

Parameter

Deskripsi

Bawaan

ess.push.data.replicate

Mengaktifkan atau menonaktifkan fitur dua replika. Nilai yang valid:

  • true: Fitur dua replika diaktifkan.

  • false: Fitur dua replika dinonaktifkan.

Catatan

Kami menyarankan Anda mengaktifkan fitur ini di lingkungan produksi.

true

ess.worker.flush.queue.capacity

Jumlah buffer flush per direktori.

Catatan

Untuk meningkatkan kinerja, Anda dapat mengonfigurasi beberapa disk. Untuk throughput baca dan tulis optimal, kami menyarankan agar Anda menggunakan tidak lebih dari dua direktori per disk.

Memori heap yang dikonsumsi oleh buffer flush untuk setiap direktori adalah ess.worker.flush.buffer.size * ess.worker.flush.queue.capacity, yaitu 256 KB * 512 = 128 MB. Jumlah slot yang disediakan oleh setiap direktori adalah setengah dari nilai parameter ess.worker.flush.queue.capacity. Sebagai contoh, untuk total 28 direktori, konsumsi memori total adalah 128 MB * 28 = 3,5 GB, dan jumlah total slot adalah 512 * 28 / 2 = 7168.

512

ess.flush.timeout

Periode timeout untuk flushing data ke lapisan penyimpanan.

240s

ess.application.timeout

Timeout heartbeat aplikasi. Jika heartbeat tidak diterima dalam periode ini, ESS membersihkan sumber daya aplikasi tersebut.

240s

ess.worker.flush.buffer.size

Ukuran buffer flush. Saat buffer melebihi ukuran ini, ESS melakukan flushing data ke disk.

256k

ess.metrics.system.enable

Mengaktifkan atau menonaktifkan Pemantauan. Nilai yang valid:

  • true: Mengaktifkan Pemantauan.

  • false: Menonaktifkan Pemantauan.

false

ess_worker_offheap_memory

Ukuran memori off-heap untuk node core.

4g

ess_worker_memory

Ukuran memori heap untuk node core.

4g

ess_master_memory

Ukuran memori heap untuk node master.

4g