Mengoptimalkan aplikasi Apache Spark di HDInsight

Artikel ini menyediakan ringkasan strategi untuk mengoptimalkan aplikasi Apache Spark di Azure HDInsight.

Gambaran Umum

Anda mungkin menghadapi Skenario umum di bawah ini

  • Pekerjaan spark yang sama lebih lambat daripada sebelumnya di kluster HDInsight yang sama
  • Pekerjaan spark lebih lambat di kluster HDInsight daripada penyedia layanan lokal atau pihak ketiga lainnya
  • Pekerjaan spark lebih lambat dalam satu kluster HDI daripada kluster HDI lainnya

Performa pekerjaan Apache Spark Anda bergantung pada beberapa faktor. Faktor performa ini meliputi:

  • Cara data Anda disimpan
  • Cara kluster dikonfigurasi
  • Operasi yang digunakan saat memproses data.
  • Layanan yarn yang tidak sehat
  • Batasan memori karena eksekutor berukuran tidak tepat dan OutOfMemoryError
  • Terlalu banyak tugas atau terlalu sedikit tugas
  • Penyimpangan data yang menyebabkan beberapa tugas berat atau tugas lambat
  • Tugas lebih lambat dalam node yang buruk

Langkah 1: Periksa apakah layanan yarn Anda sehat

  1. Buka antarmuka pengguna Ambari:
  • Periksa apakah ada pemberitahuan ResourceManager atau NodeManager
  • Periksa status ResourceManager dan NodeManager di YARN > RINGKASAN: Semua NodeManager harus berstatus Dimulai dan hanya ResourceManager Aktif yang berstatus Dimulai
  1. Periksa apakah antarmuka pengguna Yarn dapat diakses melalui https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster

  2. Periksa apakah ada pengecualian atau kesalahan di aktivitas masuk ResourceManager /var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log

Lihat informasi selengkapnya di Masalah Umum Yarn

Langkah 2: Bandingkan sumber daya aplikasi baru Anda dengan sumber daya yarn yang tersedia

  1. Buka Antarmuka pengguna Ambari > YARN > RINGKASAN, periksa MEMORI KLUSTER di ServiceMetrics

  2. Periksa metrik antrean yarn secara rinci:

  • Buka antarmuka pengguna Yarn, periksa metrik penjadwal Yarn melalui https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster/scheduler
  • Atau, Anda dapat memeriksa metrik penjadwal yarn melalui Rest API Yarn. Contohnya:curl -u "xxxx" -sS -G "https://YOURCLUSTERNAME.azurehdinsight.net/ws/v1/cluster/scheduler" Untuk ESP, Anda harus menggunakan pengguna admin domain.
  1. Menghitung total sumber daya untuk aplikasi baru Anda
  • Semua sumber daya pelaksana: spark.executor.instances * (spark.executor.memory + spark.yarn.executor.memoryOverhead) and spark.executor.instances * spark.executor.cores. Lihat informasi selengkapnya dalam konfigurasi pelaksana spark
  • ApplicationMaster
    • Dalam mode kluster, gunakan spark.driver.memory dan spark.driver.cores
    • Dalam mode klien, gunakan spark.yarn.am.memory+spark.yarn.am.memoryOverhead dan spark.yarn.am.cores

Catatan

yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb

  1. Bandingkan total sumber daya aplikasi baru Anda dengan sumber daya yang tersedia dalam antrean yang Anda tentukan

Langkah 3: Lacak aplikasi spark Anda

  1. Memantau aplikasi spark Anda yang sedang berjalan melalui antarmuka pengguna Spark

  2. Memantau aplikasi spark Anda yang lengkap atau tidak lengkap melalui antarmuka pengguna Server Riwayat Spark

Kita perlu mengidentifikasi gejala di bawah ini melalui antarmuka pengguna Spark atau antarmuka pengguna Riwayat Spark:

  • Tahap mana yang lambat
  • Apakah total CPU v-core eksekutor sepenuhnya digunakan dalam Event-Timeline di tab Tahap
  • Jika menggunakan spark sql, apa rencana fisik di tab SQL
  • Apakah DAG terlalu panjang dalam satu tahap
  • Amati metrik tugas (ukuran input, ukuran tulis acak, Waktu GC) di tab Tahap

Lihat informasi selengkapnya dalam Memantau Aplikasi Spark Anda

Langkah 4: Optimalkan aplikasi spark Anda

Ada banyak optimasi yang dapat membantu Anda mengatasi tantangan ini, seperti penembolokan dan pemberian izin untuk penyimpangan data.

Di masing-masing artikel berikut, Anda dapat menemukan informasi tentang berbagai aspek optimasi Spark.

Mengoptimalkan partisi Spark SQL

  • spark.sql.shuffle.paritions bernilai 200 secara default. Kita dapat menyesuaikannya berdasarkan kebutuhan bisnis saat mengacak data untuk gabungan atau agregasi.
  • spark.sql.files.maxPartitionBytes bernilai 1G secara default dalam HDI. Jumlah maksimum byte untuk dikemas ke dalam partisi tunggal saat membaca file. Konfigurasi ini hanya efektif saat menggunakan sumber berbasis file seperti Parquet, JSON, dan ORC.
  • AQE di Spark 3.0. Lihat Eksekusi Kueri Adaptif

Langkah berikutnya