Panduan penyetelan performa untuk MapReduce pada HDInsight dan Azure Data Lake Storage Gen1

Prasyarat

Parameter

Saat menjalankan pekerjaan MapReduce, berikut adalah parameter yang dapat Anda konfigurasi untuk meningkatkan performa pada Data Lake Storage Gen1:

Parameter Deskripsi
Mapreduce.map.memory.mb Pilih jumlah memori yang dilokasikan ke komputer virtual.
Mapreduce.job.maps Jumlah pemetaan tugas per pekerjaan.
Mapreduce.reduce.memory.mb Pilih jumlah memori yang dilokasikan ke reducer.
Mapreduce.job.reduces Jumlah pengurangan tugas per pekerjaan.

Mapreduce.map.memory / Mapreduce.reduce.memory

Sesuaikan nomor ini berdasarkan jumlah memori yang diperlukan untuk tugas pemetaan dan/atau pengurangan. Anda dapat melihat nilai default mapreduce.map.memory dan mapreduce.reduce.memory di Ambari melalui konfigurasi Yarn. Di Ambari, navigasi ke YARN dan lihat tab Configs. Memori YARN akan ditampilkan.

Mapreduce.job.maps / Mapreduce.job.reduces

Nilai ini menentukan jumlah maksimum yang dibuat pemeta atau reducer. Jumlah pemisahan akan menentukan berapa banyak pemeta yang akan dibuat untuk pekerjaan MapReduce. Oleh karena itu, Anda mungkin mendapatkan lebih sedikit pemeta dari yang Anda minta jika ada lebih sedikit pemisahan dari jumlah pemeta yang diminta.

Panduan

Langkah 1: Tentukan jumlah pekerjaan yang berjalan

Secara default, MapReduce akan menggunakan seluruh kluster untuk pekerjaan Anda. Anda dapat menggunakan lebih sedikit kluster dengan menggunakan lebih sedikit pemeta daripada kontainer yang tersedia. Panduan dalam dokumen ini mengasumsikan bahwa aplikasi Anda adalah satu-satunya aplikasi yang berjalan di kluster Anda.

Langkah 2: Atur mapreduce.map.memory/mapreduce.reduce.memory

Ukuran memori untuk tugas memetakan dan mereduksi akan bergantung pada pekerjaan spesifik Anda. Anda dapat mengurangi ukuran memori jika ingin meningkatkan konkurensi. Jumlah tugas yang berjalan secara bersamaan bergantung pada jumlah kontainer. Dengan mengurangi jumlah memori per pemeta atau reducer, lebih banyak kontainer dapat dibuat yang memungkinkan lebih banyak pemeta atau reducer untuk berjalan secara bersamaan. Mengurangi jumlah memori terlalu banyak dapat menyebabkan beberapa proses kehabisan memori. Jika Anda mendapatkan kesalahan tumpukan saat menjalankan pekerjaan, Anda harus meningkatkan memori per pemeta atau reducer. Anda harus mempertimbangkan bahwa menambahkan lebih banyak kontainer akan menambah overhead ekstra untuk setiap kontainer tambahan, yang berpotensi menurunkan performa. Alternatif lainnya adalah mendapatkan lebih banyak memori dengan menggunakan kluster yang memiliki jumlah memori lebih tinggi atau meningkatkan jumlah simpul di kluster Anda. Lebih banyak memori akan memungkinkan lebih banyak kontainer untuk digunakan, yang berarti lebih banyak konkurensi.

Langkah 3: Tentukan total memori YARN

Untuk menyetel mapreduce.job.maps/mapreduce.job.reduces, Anda harus mempertimbangkan jumlah total memori YARN yang tersedia untuk digunakan. Informasi ini tersedia di Ambari. Navigasikan ke YARN dan lihat tab Configs. Memori YARN ditampilkan di jendela ini. Anda harus mengalikan memori YARN dengan jumlah simpul di kluster Anda untuk mendapatkan total memori YARN.

Total YARN memory = nodes * YARN memory per node

Jika Anda menggunakan kluster kosong, maka memori dapat menjadi total memori YARN untuk kluster Anda. Jika aplikasi lain menggunakan memori, maka Anda dapat memilih untuk hanya menggunakan sebagian memori kluster dengan mengurangi jumlah pemeta atau reducer ke jumlah kontainer yang ingin Anda gunakan.

Langkah 4: Hitung jumlah kontainer YARN

Kontainer YARN menentukan jumlah konkurensi yang tersedia untuk pekerjaan tersebut. Ambil total memori YARN dan bagi dengan mapreduce.map.memory.

# of YARN containers = total YARN memory / mapreduce.map.memory

Langkah 5: Atur mapreduce.job.maps/mapreduce.job.reduces

Atur mapreduce.job.maps/mapreduce.job.reduces menjadi setidaknya jumlah kontainer yang tersedia. Anda dapat bereksperimen lebih lanjut dengan meningkatkan jumlah pemeta dan reducer untuk melihat apakah Anda mendapatkan performa yang lebih baik. Perlu diingat bahwa lebih banyak pemeta akan memiliki overhead tambahan, sehingga memiliki terlalu banyak pemeta dapat menurunkan performa.

Penjadwalan CPU dan isolasi CPU dinonaktifkan secara default sehingga jumlah kontainer YARN dibatasi oleh memori.

Contoh perhitungan

Mari asumsikan bahwa kita memiliki kluster yang terdiri dari 8 simpul D14 dan kita ingin menjalankan pekerjaan intensif I/O. Berikut perhitungan yang harus Anda lakukan:

Langkah 1: Tentukan jumlah pekerjaan yang berjalan

Sebagai contoh, kami berasumsi bahwa pekerjaan kami adalah satu-satunya yang berjalan.

Langkah 2: Atur mapreduce.map.memory/mapreduce.reduce.memory

Misalnya, Anda menjalankan pekerjaan intensif I/O dan memilih memori 3 GB untuk tugas pemetaan sudah cukup.

mapreduce.map.memory = 3GB

Langkah 3: Tentukan total memori YARN

total memory from the cluster is 8 nodes * 96GB of YARN memory for a D14 = 768GB

Langkah 4: Hitung # kontainer YARN

# of YARN containers = 768 GB of available memory / 3 GB of memory = 256

Langkah 5: Atur mapreduce.job.maps/mapreduce.job.reduces

mapreduce.map.jobs = 256

Batasan

Pembatasan Data Lake Storage Gen1

Sebagai layanan multi-penyewa, Data Lake Storage Gen1 menetapkan batas bandwidth tingkat akun. Jika mencapai batas ini, Anda akan mulai melihat kegagalan tugas. Kegagalan dapat diidentifikasi dengan mengamati kesalahan pembatasan dalam log tugas. Jika Anda memerlukan lebih banyak konkurensi untuk pekerjaan Anda, hubungi kami.

Untuk memeriksa apakah Anda mendapatkan pembatasan, Anda perlu mengaktifkan pencatatan debug di sisi klien. Berikut adalah cara Anda dapat melakukannya:

  1. Letakkan properti berikut di properti log4j di Ambari > YARN > Config > Advanced yarn-log4j: log4j.logger.com.microsoft.azure.datalake.store=DEBUG

  2. Hidupkan ulang semua simpul/layanan agar konfigurasi tersebut berfungsi.

  3. Jika Anda mendapatkan pembatasan, Anda akan melihat kode galat HTTP 429 dalam file log YARN. File log YARN dalam /tmp/<user>/yarn.log

Contoh untuk dijalankan

Untuk mendemonstrasikan bagaimana MapReduce berjalan di Data Lake Storage Gen1, di bawah ini adalah beberapa kode sampel yang dijalankan di kluster dengan pengaturan berikut:

  • 16 simpul D14v2
  • Kluster Hadoop menjalankan HDI 3.6

Untuk titik awal, berikut adalah beberapa contoh perintah untuk menjalankan MapReduce Teragen, Terasort, dan Teravalidate. Anda dapat menyesuaikan perintah ini berdasarkan sumber daya Anda.

Teragen

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teragen -Dmapreduce.job.maps=2048 -Dmapreduce.map.memory.mb=3072 10000000000 adl://example/data/1TB-sort-input

Terasort

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar terasort -Dmapreduce.job.maps=2048 -Dmapreduce.map.memory.mb=3072 -Dmapreduce.job.reduces=512 -Dmapreduce.reduce.memory.mb=3072 adl://example/data/1TB-sort-input adl://example/data/1TB-sort-output

Teravalidate

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teravalidate -Dmapreduce.job.maps=512 -Dmapreduce.map.memory.mb=3072 adl://example/data/1TB-sort-output adl://example/data/1TB-sort-validate