Pengoptimalan konfigurasi kluster untuk Apache Spark

Artikel ini membahas cara mengoptimalkan konfigurasi kluster Apache Spark Anda untuk performa terbaik di Microsoft Azure HDInsight.

Gambaran Umum

Bergantung pada beban kerja Spark, Anda dapat menentukan bahwa konfigurasi Spark non-default akan menghasilkan eksekusi pekerjaan Spark dioptimalkan. Lakukan pengujian tolok ukur dengan beban kerja sampel untuk memvalidasi konfigurasi kluster non-default.

Berikut adalah beberapa parameter umum yang dapat Anda sesuaikan:

Parameter Deskripsi
--num-executors Set jumlah eksekutor yang sesuai.
--executor-cores Set jumlah inti untuk setiap eksekutor. Biasanya Anda harus memiliki eksekutor berukuran sedang, karena proses lain mengonsumsi beberapa memori yang tersedia.
--executor-memory Set ukuran memori untuk setiap eksekutor, yang mengontrol ukuran heap pada YARN. Tinggalkan beberapa memori untuk overhead eksekusi.

Pilih ukuran eksekutor yang benar

Saat memutuskan konfigurasi eksekutor Anda, pertimbangkan overhead pengumpulan sampah (garbage collection, GC) Java.

  • Faktor-faktor untuk mengurangi ukuran eksekutor:

    1. Kurangi ukuran tumpukan di bawah 32 GB untuk menjaga overhead GC < 10%.
    2. Kurangi jumlah inti untuk menjaga overhead GC < 10%.
  • Faktor untuk meningkatkan ukuran eksekutor:

    1. Kurangi overhead komunikasi antar eksekutor.
    2. Kurangi jumlah koneksi terbuka antar pelaksana (N2) pada kluster yang lebih besar (>100 pelaksana).
    3. Tingkatkan ukuran heap untuk mengakomodasi tugas intensif memori.
    4. Opsional: Kurangi overhead memori per-eksekutor.
    5. Opsional: Tingkatkan penggunaan dan konkurensi dengan oversubscribing CPU.

Sebagai aturan umum, saat memilih ukuran eksekutor:

  1. Mulai dengan 30 GB per eksekutor dan distribusikan inti mesin yang tersedia.
  2. Tingkatkan jumlah core pelaksana untuk kluster yang lebih besar (> 100 pelaksana).
  3. Ubah ukuran berdasarkan uji coba dan faktor-faktor sebelumnya seperti overhead GC.

Saat menjalankan kueri bersamaan, pertimbangkan:

  1. Mulai dengan 30 GB per eksekutor dan semua inti mesin.
  2. Buat beberapa aplikasi Spark paralel dengan oversubscribing CPU (sekitar 30% peningkatan latensi).
  3. Distribusikan kueri di seluruh aplikasi paralel.
  4. Ubah ukuran berdasarkan uji coba dan faktor-faktor sebelumnya seperti overhead GC.

Untuk informasi selengkapnya tentang menggunakan Ambari untuk mengonfigurasi eksekutor, lihat Pengaturan Apache Spark - Eksekutor Spark.

Pantau kinerja kueri untuk outlier atau masalah performa lainnya, dengan melihat tampilan garis waktu. Juga grafik SQL, statistik pekerjaan, dan sebagainya. Untuk informasi tentang penelusuran kesalahan (debugging) pekerjaan Spark menggunakan YARN dan server Spark History, lihat Debug pekerjaan Apache Spark yang berjalan di Microsoft Azure HDInsight. Untuk tips menggunakan Server Garis Waktu YARN, lihat Akses log aplikasi Apache Hadoop YARN.

Tugas menjadi lebih lambat pada beberapa eksekutor atau node

Terkadang satu atau beberapa eksekutor lebih lambat dari yang lain, dan tugas membutuhkan waktu lebih lama untuk dijalankan. Kelambatan ini sering terjadi pada kluster yang lebih besar (> 30 node). Dalam hal ini, bagi pekerjaan menjadi jumlah tugas yang lebih besar sehingga penjadwal dapat mengimbangi tugas yang lambat. Misalnya, miliki setidaknya dua kali lebih banyak tugas dari jumlah inti eksekutor dalam aplikasi. Anda juga dapat mengaktifkan eksekusi spekulatif tugas dengan conf: spark.speculation = true.

Langkah berikutnya