Panduan pengukuran Azure HDInsight Interactive Query Cluster (Apache Hive LLAP)

Dokumen ini menjelaskan ukuran HDInsight Interactive Query Cluster (kluster Apache Hive LLAP) untuk beban kerja yang khas untuk mencapai performa yang wajar. Perhatikan bahwa rekomendasi yang diberikan dalam dokumen ini adalah panduan umum dan beban kerja tertentu mungkin memerlukan penyetelan khusus.

Azure Default VM Types untuk HDInsight Interactive Query Cluster(LLAP)

Jenis Node Instans Ukuran
Head D13 v2 8 vcpus, RAM 56 GB, SSD 400 GB
Pekerja D14 v2 16 vcpus, RAM 112 GB, SSD 800 GB
Zookeeper A4 v2 RAM 4 vcpus, 8 GB, SSD 40 GB

Catatan: Semua nilai konfigurasi yang direkomendasikan didasarkan pada node pekerja tipe D14 v2

Konfigurasi:

Kunci Konfigurasi Nilai yang direkomendasikan Deskripsi
yarn.nodemanager.resource.memory-mb 102400 (MB) Total memori yang diberikan, dalam MB, untuk semua kontainer YARN pada node
yarn.scheduler.maximum-allocation-mb 102400 (MB) Alokasi maksimum untuk setiap permintaan kontainer di RM, dalam MB. Permintaan memori lebih tinggi dari nilai ini tidak akan berlaku
yarn.scheduler.maximum-allocation-vcores 12 Jumlah maksimum inti CPU untuk setiap permintaan kontainer di Resource Manager. Permintaan memori lebih tinggi dari nilai ini tidak akan berlaku.
yarn.nodemanager.resource.cpu-vcores 12 Jumlah inti CPU per NodeManager yang dapat dialokasikan untuk kontainer.
yarn.scheduler.capacity.root.llap.capacity 85 (%) Alokasi kapasitas YARN untuk antrean LLAP
tez.am.resource.memory.mb 4096 (MB) Jumlah memori dalam MB yang akan digunakan oleh tez AppMaster
hive.server2.tez.sessions.per.default.queue <number_of_worker_nodes> Jumlah sesi untuk setiap antrean yang dinamai dalam hive.server2.tez.default.queues. Jumlah ini terkait dengan jumlah koordinator kueri (Tez AM)
hive.tez.container.size 4096 (MB) Ukuran kontainer Tez tertentu dalam MB
hive.llap.daemon.num.executors 19 Jumlah eksekutor per LLAP daemon
hive.llap.io.threadpool.size 19 Ukuran pool alur untuk pelaksana
hive.llap.daemon.yarn.container.mb 81920 (MB) Total memori dalam MB yang digunakan oleh masing-masing LLAP daemon (Memori per daemon)
hive.llap.io.memory.size 242688 (MB) Ukuran cache dalam MB per cache SSD yang disediakan LLAP daemon diaktifkan
hive.auto.convert.join.noconditionaltask.size 2048 (MB) ukuran memori dalam MB untuk melakukan Map Join

Arsitektur/Komponen LLAP:

`LLAP Architecture/Components`.

Estimasi ukuran LLAP Daemon:

1. Menentukan total alokasi memori YARN untuk semua kontainer pada node

Konfigurasi: yarn.nodemanager.resource.memory-mb

Nilai ini menunjukkan jumlah maksimum memori dalam MB yang dapat digunakan oleh kontainer YARN pada setiap node. Nilai yang ditentukan harus lebih kecil dari jumlah total memori fisik pada node tersebut.
Total memori untuk semua kontainer YARN pada node = (Total memori fisik - memori untuk OS + Layanan lainnya)
Atur nilai ini ke ~90% dari ukuran RAM yang tersedia.
Untuk D14 v2, nilai yang disarankan adalah 102400 MB

2. Menentukan jumlah maksimum memori per permintaan kontainer YARN

Konfigurasi: yarn.scheduler.maximum-allocation-mb

Nilai ini menunjukkan alokasi maksimum untuk setiap permintaan kontainer di Resource Manager, dalam MB. Permintaan memori lebih tinggi dari nilai yang ditentukan tidak akan berlaku. Resource Manager dapat memberikan memori kepada kontainer dalam tahapan yarn.scheduler.minimum-allocation-mb dan tidak dapat melebihi ukuran yang ditentukan oleh yarn.scheduler.maximum-allocation-mb. Nilai yang ditentukan tidak boleh lebih dari total memori yang diberikan untuk semua kontainer pada node yang ditentukan oleh yarn.nodemanager.resource.memory-mb.
Untuk node pekerja D14 v2, nilai yang disarankan adalah 102400 MB

3. Menentukan jumlah maksimum per vcores permintaan kontainer YARN

Konfigurasi: yarn.scheduler.maximum-allocation-vcores

Nilai ini menunjukkan jumlah maksimum inti CPU virtual untuk setiap permintaan kontainer di Resource Manager. Meminta jumlah yang lebih tinggi dari vcores nilai ini tidak akan berlaku. Ini adalah properti global dari penjadwal YARN. Untuk kontainer LLAP daemon, nilai ini dapat diatur ke 75% dari total yang tersedia vcores. Sisanya 25% harus dicadangkan untuk NodeManager, DataNode, dan layanan lain yang berjalan pada node pekerja.
Ada 16 vcores pada VM D14 v2 dan 75% dari total 16 vcores dapat digunakan oleh kontainer LLAP daemon.
Untuk D14 v2, nilai yang disarankan adalah 12 MB.

4. Jumlah kueri serentak

Konfiguration: hive.server2.tez.sessions.per.default.queue

Nilai konfigurasi ini menentukan jumlah sesi Tez yang dapat diluncurkan secara paralel. Sesi Tez ini diluncurkan untuk setiap antrean yang ditentukan oleh "hive.server2.tez.default.queues." Ini sesuai dengan jumlah Tez AM (Koordinator Kueri). Disarankan untuk sama dengan jumlah node pekerja. Jumlah Tez AM bisa lebih tinggi dari jumlah node LLAP daemon. Tanggung jawab utama Tez AM adalah mengoordinasikan eksekusi kueri dan menetapkan fragmen rencana kueri ke LLAP daemon yang sesuai untuk eksekusi. Pertahankan nilai ini sebagai kelipatan dari banyak simpul LLAP daemon untuk mencapai throughput yang lebih tinggi.

Kluster HDInsight default memiliki empat LLAP daemon yang berjalan pada empat node pekerja, sehingga nilai yang disarankan adalah 4.

Penggeser antarmuka pengguna Ambari untuk variabel konfigurasi Apache Hive hive.server2.tez.sessions.per.default.queue:

`LLAP maximum concurrent queries`.

5. Ukuran Tez Container dan Tez Application Master

Konfigurasi: tez.am.resource.memory.mb, hive.tez.container.size

tez.am.resource.memory.mb - menetapkan ukuran Tez Application Master.
Nilai yang disarankan adalah 4096 MB.

hive.tez.container.size - menetapkan jumlah memori yang diberikan untuk kontainer Tez. Nilai ini harus ditetapkan antara ukuran kontainer minimum YARN (yarn.scheduler.minimum-allocation-mb) dan ukuran kontainer maksimum YARN (yarn.scheduler.maximum-allocation-mb). Pelaksana LLAP daemon menggunakan nilai ini untuk membatasi penggunaan memori per pelaksana.
Nilai yang disarankan adalah 4096 MB.

6. Alokasi kapasitas Antrean LLAP

Konfigurasi: yarn.scheduler.capacity.root.llap.capacity

Nilai ini menunjukkan persentase kapasitas yang diberikan untuk antrean LLAP. Alokasi kapasitas mungkin memiliki nilai yang berbeda untuk beban kerja yang berbeda tergantung pada bagaimana antrean YARN dikonfigurasi. Jika beban kerja Anda adalah operasi baca-saja, maka atur setinggi 90% dari kapasitas akan berfungsi. Namun, jika beban kerja Anda adalah campuran dari operasi pembaruan/hapus/penggabungan menggunakan tabel terkelola, disarankan untuk memberikan 85% kapasitas untuk antrean LLAP. Kapasitas 15% sisanya dapat digunakan oleh tugas lain seperti pemadatan dll untuk mengalokasikan kontainer dari antrean default. Dengan begitu, tugas dalam antrean default tidak akan menghilangkan sumber daya YARN.

Untuk simpul pekerja D14v2, nilai yang direkomendasikan untuk antrean LLAP adalah 85.
(Untuk beban kerja baca saja, dapat ditingkatkan hingga 90 jika sesuai.)

7. Ukuran kontainer LLAP daemon

Konfigurasi: hive.llap.daemon.yarn.container.mb

LLAP Daemon dijalankan sebagai kontainer YARN pada setiap node pekerja. Ukuran memori total untuk kontainer LLAP daemon tergantung pada faktor-faktor berikut,

  • Konfigurasi ukuran kontainer YARN (yarn.scheduler.minimum-allocation-mb, yarn.scheduler.maximum-allocation-mb, yarn.nodemanager.resource.memory-mb)
  • Jumlah Tez AM pada sebuah node
  • Total memori yang dikonfigurasi untuk semua kontainer pada suatu node dan kapasitas antrean LLAP

Memori yang dibutuhkan oleh Tez Application Masters (Tez AM) dapat dihitung sebagai berikut.
Tez AM bertindak sebagai koordinator kueri dan jumlah TEZ AM harus dikonfigurasi berdasarkan banyak kueri bersamaan yang akan dilayani. Secara teori, kita dapat mempertimbangkan satu Tez AM per node pekerja. Namun, ada kemungkinan Bahwa Anda mungkin melihat lebih dari satu Tez AM pada simpul pekerja. Untuk tujuan perhitungan, kami mengasumsikan distribusi Tez AM yang seragam di semua node LLAP daemon/ node pekerja. Disarankan untuk memiliki memori 4 GB per Tez AM.

Jumlah Tez Am = nilai yang ditentukan oleh konfigurasi Apache Hive hive.server2.tez.sessions.per.default.queue.
Jumlah simpul daemon LLAP = ditentukan oleh variabel env num_llap_nodes_for_llap_daemons dalam antarmuka pengguna Ambari.
Ukuran kontainer Tez AM = nilai yang ditentukan oleh konfigurasi Tez tez.am.resource.memory.mb.

Memori Tez AM per simpul = (ceil(Jumlah Tez AMs / Jumlah node LLAP daemon)x Ukuran kontainer Tez AM**)**
Untuk D14 v2, konfigurasi default memiliki empat Tez AM dan empat node LLAP daemon.
Memori Tez AM per node = (ceil(4/4) x 4 GB) = 4 GB

Total Memori yang tersedia untuk antrean LLAP per node pekerja dapat dihitung sebagai berikut:
Nilai ini tergantung pada jumlah total memori yang tersedia untuk semua kontainer YARN pada node (yarn.nodemanager.resource.memory-mb) dan persentase kapasitas yang dikonfigurasi untuk antrean LLAP(yarn.scheduler.capacity.root.llap.capacity).
Total memori untuk antrean LLAP pada simpul pekerja = Total memori yang tersedia untuk semua kontainer YARN pada node x Persentase kapasitas untuk antrean LLAP.
Untuk D14 v2, nilai ini adalah (100 GB x 0,85) = 85 GB.

Ukuran kontainer LLAP daemon dihitung sebagai berikut;

Ukuran kontainer LLAP daemon = (Total memori untuk antrean LLAP pada simpul pekerja) – (Memori Tez AM per simpul) - (Ukuran kontainer Service Master)
Hanya ada satu Service Master (Application Master untuk layanan LLAP) pada kluster yang diluncurkan pada salah satu node pekerja. Untuk tujuan perhitungan, kami mempertimbangkan satu master layanan per node pekerja.
Untuk simpul pekerja D14 v2, HDI 4.0 - nilai yang disarankan adalah (85 GB - 4 GB - 1 GB)) = 80 GB

8. Menentukan jumlah pelaksana per LLAP daemon

Konfigurasi: hive.llap.daemon.num.executors, hive.llap.io.threadpool.size

hive.llap.daemon.num.executors:
Konfigurasi ini mengontrol jumlah pelaksana yang dapat menjalankan tugas secara paralel per LLAP daemon. Nilai ini tergantung pada jumlah vcores, jumlah memori yang digunakan per pelaksana, dan jumlah total memori yang tersedia untuk kontainer LLAP daemon. Jumlah pelaksana dapat kelebihan permintaan hingga 120% dari vcores yang tersedia per node pekerja. Namun, harus disesuaikan jika tidak memenuhi persyaratan memori berdasarkan memori yang diperlukan per pelaksana dan ukuran kontainer LLAP daemon.

Setiap eksekutor setara dengan kontainer Tez dan dapat mengonsumsi memori 4 GB (ukuran kontainer Tez). Semua eksekutor dalam LLAP daemon memiliki memori heap yang sama. Dengan asumsi bahwa tidak semua pelaksana menjalankan operasi intensif memori pada saat yang sama, Anda dapat mempertimbangkan 75% ukuran kontainer Tez (4 GB) per pelaksana. Dengan cara ini Anda dapat meningkatkan jumlah pelaksana dengan memberi setiap eksekutor lebih sedikit memori (misalnya, 3 GB) untuk peningkatan paralelisme. Namun, disarankan untuk menyetel pengaturan ini untuk beban kerja target Anda.

Ada 16 vcore pada D14 v2 VM. Untuk D14 v2, nilai yang direkomendasikan untuk num pelaksana adalah (16 vcore x 120%) ~= 19 pada setiap simpul pekerja yang mempertimbangkan 3 GB per pelaksana.

hive.llap.io.threadpool.size:
Nilai ini menentukan ukuran kumpulan alur untuk pelaksana. Karena pelaksana diperbaiki seperti yang ditentukan, itu sama dengan jumlah pelaksana per LLAP daemon.
Untuk D14 v2, nilai yang disarankan adalah 19 MB.

9. Menentukan ukuran cache LLAP daemon

Konfigurasi: hive.llap.io.memory.size

Memori kontainer LLAP daemon terdiri dari komponen berikut;

  • Head room
  • Memori heap yang digunakan oleh pelaksana (Xmx)
  • Cache dalam memori per daemon (ukuran memori off-heap-nya, tidak berlaku saat cache SSD diaktifkan)
  • Ukuran metadata cache dalam memori (hanya berlaku saat cache SSD diaktifkan)

Ukuran headroom: Ukuran ini menunjukkan sebagian memori off-heap yang digunakan untuk overhead Java VM (metaspace, tumpukan utas, gc struktur data, dll.). Umumnya, overhead ini sekitar 6% dari ukuran heap (Xmx). Untuk berada di sisi yang lebih aman, nilai ini dapat dihitung sebagai 6% dari total ukuran memori LLAP daemon.
Untuk D14 v2, nilai yang disarankan adalah ceil (80 GB x 0,06) ~= 4 GB.

Ukuran heap (Xmx): Ini adalah jumlah memori heap yang tersedia untuk semua pelaksana. Total Ukuran Heap = Jumlah pelaksana x 3 GB
Untuk D14 v2, nilai ini adalah 19 x 3 GB = 57 GB

Ambari environment variable for LLAP heap size:

`LLAP heap size`.

Ketika cache SSD dinonaktifkan, cache dalam memori adalah jumlah memori yang tersisa setelah mengambil ukuran Headroom dan ukuran Heap dari ukuran kontainer LLAP daemon.

Perhitungan ukuran cache berbeda ketika cache SSD diaktifkan. Mengatur hive.llap.io.allocator.mmap = true memungkinkan penembolokan SSD. Ketika cache SSD diaktifkan, beberapa bagian memori akan digunakan untuk menyimpan metadata untuk cache SSD. Metadata disimpan dalam memori dan diharapkan ~ 8% dari ukuran cache SSD.
Ukuran metadata dalam memori SSD Cache = ukuran kontainer LLAP daemon - (Ukuran head room + Heap)
Untuk D14 v2, dengan HDI 4.0, ukuran metadata dalam memori cache SSD = 80 GB - (4 GB + 57 GB) = 19 GB

Mengingat ukuran memori yang tersedia untuk menyimpan metadata cache SSD, kita dapat menghitung ukuran cache SSD yang dapat didukung.
Ukuran metadata dalam memori untuk cache SSD = ukuran kontainer daemon LLAP - (Ukuran head room + Heap) = 19 GB
Ukuran cache SSD = ukuran metadata dalam memori untuk cache SSD (19 GB) / 0,08 (8 persen)

Untuk D14 v2 dan HDI 4.0, ukuran cache SSD yang direkomendasikan = 19 GB / 0,08 ~= 237 GB

10. Menyesuaikan memori Map Join

Konfigurasi: hive.auto.convert.join.noconditionaltask.size

Pastikan Anda mengaktifkan hive.auto.convert.join.noconditionaltask agar parameter ini berlaku. Konfigurasi ini menentukan ambang batas untuk pemilihan MapJoin oleh pengoptimal Apache Hive yang mempertimbangkan oversubscription memori dari eksekutor lain untuk memiliki lebih banyak ruang untuk tabel hash dalam memori untuk memungkinkan lebih banyak konversi gabungan peta. Mempertimbangkan 3 GB per eksekutor, ukuran ini dapat kelebihan langganan hingga 3 GB, tetapi beberapa memori timbunan juga dapat digunakan untuk buffer pengurutan, buffer pengacakan, dll. oleh operasi lain.
Jadi untuk D14 v2, dengan memori 3 GB per eksekutor, disarankan untuk mengatur nilai ini ke 2048 MB.

(Catatan: Nilai ini mungkin memerlukan penyesuaian yang sesuai dengan beban kerja Anda. Mengatur nilai ini terlalu rendah mungkin tidak menggunakan fitur konversi otomatis. Dan mengaturnya terlalu tinggi dapat mengakibatkan pengecualian memori atau jeda GC yang dapat mengakibatkan performa yang buruk.)

11. Jumlah LLAP daemon

Variabel lingkungan Ambari: num_llap_nodes, num_llap_nodes_for_llap_daemons

num_llap_nodes - menentukan jumlah node yang digunakan oleh layanan Apache Hive LLAP, ini termasuk node yang menjalankan LLAP daemon, LLAP Service Master, dan Tez Application Master (Tez AM).

`Number of Nodes for LLAP service`.
num_llap_nodes_for_llap_daemons - jumlah node yang ditentukan yang hanya digunakan untuk LLAP daemon. Ukuran kontainer LLAP daemon diatur ke node max fit, sehingga menghasilkan satu llap daemon pada setiap node.

`Number of Nodes for LLAP daemons`.

Disarankan untuk menjaga kedua nilai sama dengan jumlah node pekerja dalam kluster Interactive Query.

Pertimbangan untuk Manajemen Beban Kerja

Jika Anda ingin mengaktifkan manajemen beban kerja untuk LLAP, pastikan Anda memesan kapasitas yang cukup untuk manajemen beban kerja agar berfungsi seperti yang diharapkan. Manajemen beban kerja memerlukan konfigurasi antrean YARN kustom, yang selain antrean llap. Pastikan Anda membagi total kapasitas sumber daya kluster antara llap antrean dan antrean manajemen beban kerja sesuai dengan persyaratan beban kerja Anda. Manajemen beban kerja memunculkan Tez Application Master (Tez AM) ketika rencana sumber daya diaktifkan.

Catatan:

  • Tez AM diluncurkan dengan mengaktifkan rencana sumber daya mengonsumsi sumber daya dari antrean manajemen beban kerja seperti yang ditentukan oleh hive.server2.tez.interactive.queue.
  • Jumlah Tez AM akan tergantung pada nilai yang QUERY_PARALLELISM ditentukan dalam rencana sumber daya.
  • Setelah manajemen beban kerja aktif, TEZ AM dalam antrean LLAP tidak akan digunakan. Hanya Tez AM dari antrean manajemen beban kerja yang digunakan untuk koordinasi kueri. Tez AM dalam antrean llap digunakan saat manajemen beban kerja dinonaktifkan.

Misalnya: Total kapasitas kluster = memori 100 GB, dibagi antara LLAP, Manajemen Beban Kerja, dan antrean Default sebagai berikut:

  • Kapasitas antrean LLAP = 70 GB
  • Kapasitas antrean manajemen beban kerja = 20 GB
  • Kapasitas antrean default = 10 GB

Dengan 20 GB dalam kapasitas antrean manajemen beban kerja, rencana sumber daya dapat menentukan QUERY_PARALLELISM nilai sebagai lima, yang berarti manajemen beban kerja dapat meluncurkan lima Tez AM dengan ukuran kontainer 4 GB masing-masing. Jika QUERY_PARALLELISM lebih tinggi dari kapasitas, Anda mungkin melihat beberapa Tez AM berhenti merespons dalam keadaan ACCEPTED. Interaktif Server Apache Hive 2 tidak dapat mengirimkan fragmen kueri ke TEZ AM yang tidak dalam RUNNING status.

Langkah berikutnya

Jika pengaturan nilai ini tidak mengatasi masalah Anda, kunjungi salah satu hal berikut ini...