Panduan penyetelan performa untuk MapReduce pada HDInsight dan Azure Data Lake Storage Gen1
Prasyarat
- Langganan Azure. Lihat Dapatkan uji coba gratis Azure.
- Akun Azure Data Lake Storage Gen1. Untuk petunjuk tentang cara membuatnya, lihat Memulai Azure Data Lake Storage Gen1
- Kluster Azure HDInsight dengan akses ke akun Data Lake Storage Gen1. Lihat Membuat kluster HDInsight dengan Data Lake Storage Gen1. Pastikan Anda mengaktifkan Desktop Jauh untuk kluster tersebut.
- Menggunakan MapReduce di HDInsight. Untuk informasi selengkapnya, lihat Menggunakan MapReduce di Hadoop on HDInsight
- Ulasan panduan penyetelan performa pada Data Lake Storage Gen1. Untuk konsep performa umum, lihat Panduan Penyesuaian Performa Data Lake Storage Gen1
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:
Letakkan properti berikut di properti log4j di Ambari > YARN > Config > Advanced yarn-log4j: log4j.logger.com.microsoft.azure.datalake.store=DEBUG
Hidupkan ulang semua simpul/layanan agar konfigurasi tersebut berfungsi.
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