Bagikan melalui


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

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

Jenis VM Default Azure pada HDInsight Interactive Query Cluster(LLAP)

Jenis Node Contoh Ukuran
Kepala D13 v2 8 vcpus, RAM 56 GB, SSD 400 GB
Pekerja D14 v2 16 vcpus, RAM 112 GB, SSD 800 GB
Pengelola Kebun Binatang A4 v2 4 vcpus, RAM 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" (inti alokasi maksimum penjadwal) 12 Jumlah maksimum inti CPU untuk setiap permintaan kontainer di Resource Manager. Permintaan lebih tinggi dari nilai ini tidak akan berpengaruh.
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 <jumlah_node_pekerja> 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 thread untuk eksekutor
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 daemon LLAP jika cache SSD diaktifkan.
hive.auto.convert.join.noconditionaltask.size 2048 (MB) ukuran memori dalam MB untuk melakukan Map Join

Arsitektur/Komponen LLAP:

'Arsitektur/Komponen LLAP'.

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 vcores per 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 vcores yang lebih tinggi dari nilai ini tidak akan berpengaruh. 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 tersebut diluncurkan pada setiap antrian yang telah ditentukan oleh "hive.server2.tez.default.queues." Ini berkaitan 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 pelaksanaan kueri dan menetapkan fragmen rencana kueri kepada LLAP daemon yang bersesuaian untuk dieksekusi. Pertahankan nilai ini sebagai kelipatan dari jumlah node 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 UI Ambari untuk variabel konfigurasi Hive hive.server2.tez.sessions.per.default.queue:

'Kueri bersamaan maksimum LLAP'.

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 mengaturnya hingga 90% dari kapasitas seharusnya 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 menghabiskan sumber daya YARN.

Untuk node 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 Anda bisa 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 Ams = 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 node = (ceil(Jumlah Tez AM / Jumlah node daemon LLAP)x Ukuran kontainer Tez AM**)**
Untuk D14 v2, konfigurasi default memiliki empat Tez AM dan empat node LLAP daemon.
Memori Tez AM per simpul = (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 node 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 Pengelola Layanan (Pengelola Aplikasi untuk layanan LLAP) di 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 VM D14 v2. Untuk D14 v2, nilai yang direkomendasikan untuk jumlah pelaksana adalah (16 vcore x 120%) ~= 19 pada setiap simpul pekerja dengan mempertimbangkan 3 GB per pelaksana.

hive.llap.io.threadpool.size:
Nilai ini menentukan ukuran kumpulan alur untuk pelaksana. Karena pelaksana ditentukan seperti yang ditetapkan, sama dengan jumlah pelaksana per daemon LLAP.
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;

  • Ruang Kepala
  • Memori heap yang digunakan oleh eksekutor (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 di luar heap yang digunakan untuk overhead Java VM (metaspace, tumpukan thread, 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 eksekutor. Total Ukuran Heap = Jumlah eksekutor x 3 GB
Untuk D14 v2, nilai ini adalah 19 x 3 GB = 57 GB

Ambari environment variable for LLAP heap size:

`Ukuran tumpukan LLAP`.

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 menjadikan pengelolaan cache 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 + Ukuran 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 Hive yang mempertimbangkan pembagian berlebihan memori dari eksekutor lain untuk menyediakan lebih banyak ruang bagi tabel hash dalam memori, memungkinkan lebih banyak konversi gabungan peta. Dengan mempertimbangkan 3 GB per eksekutor, ukuran ini dapat dibagikan melebihi batas hingga 3 GB, tetapi beberapa memori heap juga dapat digunakan untuk buffer pengurutan, buffer pengacakan, dll. oleh operasi lainnya.
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 daemon LLAP

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).

'Jumlah Simpul untuk layanan LLAP'.
num_llap_nodes_for_llap_daemons - jumlah node yang ditentukan yang hanya digunakan untuk LLAP daemon. Ukuran kontainer LLAP daemon diatur agar sesuai dengan kapasitas maksimum node, yang mengakibatkan satu llap daemon pada setiap node.

'Jumlah Simpul untuk LLAP daemon'.

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 merupakan tambahan untuk 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 yang diluncurkan dengan cara mengaktifkan rencana sumber daya mengonsumsi sumber daya dari antrean pengelolaan 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 manajemen antrean 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, Pengelolaan Beban Kerja, dan antrean Bawaan sebagai berikut:

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

Dengan 20 GB dalam kapasitas antrian manajemen beban kerja, rencana sumber daya dapat menentukan QUERY_PARALLELISM nilai sebagai lima, yang berarti manajemen beban kerja dapat meluncurkan lima Tez AM dengan setiap kontainer berukuran 4 GB. Jika QUERY_PARALLELISM lebih tinggi dari kapasitas, Anda mungkin akan melihat beberapa Tez AM berhenti merespons ketika berada dalam keadaan ACCEPTED. Server Hive 2 Interactive tidak dapat mengirimkan fragmen kueri ke Tez AMs yang tidak dalam keadaan RUNNING.

Langkah berikutnya

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