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 benang Anda sehat
- 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
Periksa apakah antarmuka pengguna Yarn dapat diakses melalui
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster
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
Buka Antarmuka pengguna Ambari > YARN > RINGKASAN, periksa MEMORI KLUSTER di ServiceMetrics
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.
- 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
danspark.driver.cores
- Dalam mode klien, gunakan
spark.yarn.am.memory+spark.yarn.am.memoryOverhead
danspark.yarn.am.cores
- Dalam mode kluster, gunakan
Catatan
yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb
- Bandingkan total sumber daya aplikasi baru Anda dengan sumber daya yang tersedia dalam antrean yang Anda tentukan
Langkah 3: Lacak aplikasi spark Anda
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.
- Optimalkan penyimpanan data untuk Apache Spark
- Optimalkan pemrosesan data untuk Apache Spark
- Optimalkan penggunaan memori untuk Apache Spark
- Optimalkan konfigurasi kluster Microsoft Azure HDInsight untuk Apache Spark
Mengoptimalkan partisi Spark SQL
-
spark.sql.shuffle.partitions
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