Teknik Pengoptimuman Untuk Platform Pengkomputeran Dalam Memori Teragih Dengan Memanfaatkan SSD Bahagian 2
Aug 17, 2023
3.1. Persekitaran Kluster
Rajah 1 menunjukkan kluster katil ujian kami yang terdiri daripada satu nod nama (induk) dan empat nod data (hamba). Dalam nod nama (master), kami mengkonfigurasi NameNode dan Secondary NameNode Hadoop (HDFS) dan Nod Pemacu (master nod) Spark. Dalam setiap nod data, kami menjalankan DataNode of Hadoop (HDFS) dan Worker Node of Spark. Nod nama dan mesin nod data mempunyai persekitaran H/W yang sama (3.4 GHz Xeon E3-1240V3 QuadCore Processor dengan hyper-threading), kecuali untuk jumlah memori utama (8 GB untuk nod nama dan 4 GB untuk setiap nod data).
Namename ialah nod Induk dalam seni bina Hadoop, bertanggungjawab untuk mengurus dan memantau sistem fail keseluruhan kluster Hadoop. Nod Namename juga merupakan salah satu nod kritikal bagi keseluruhan kluster Hadoop, dan prestasi serta kebolehpercayaannya secara langsung akan mempengaruhi kecekapan operasi dan ketersediaan keseluruhan kluster Hadoop.
Terdapat banyak penunjuk yang berkaitan dengan nod Namename, salah satu petunjuk yang paling penting ialah ingatan. Nod Namename memerlukan banyak memori untuk menyimpan dan mengurus ruang nama keseluruhan sistem fail HDFS, yang merangkumi maklumat metadata fail dan direktori, seperti nama fail, kebenaran, cap masa, saiz fail dan sebagainya.
Memori nod Namename bukan sahaja menentukan bilangan fail yang boleh diurus dan saiz sistem fail tetapi juga mempengaruhi prestasi dan kebolehpercayaan kelompok Hadoop. Jika nod Namename mempunyai memori yang tidak mencukupi, ia tidak akan dapat bertindak balas dengan cepat kepada permintaan pelanggan, menyebabkan daya pemprosesan keseluruhan Hadoop dikurangkan. Selain itu, jika nod Namename gagal, maklumat metadata yang disimpannya mungkin hilang, menjadikan keseluruhan sistem fail HDFS tidak tersedia.
Oleh itu, dalam kelompok Hadoop, ingatan nod Namename adalah penting. Adalah disyorkan bahawa pentadbir memilih konfigurasi perkakasan nod Namename yang sesuai berdasarkan keperluan perniagaan tertentu, dan sentiasa memantau prestasi dan ketersediaan nod Namename untuk memastikan bahawa mereka boleh menyediakan perkhidmatan yang cekap dan boleh dipercayai untuk keseluruhan kelompok Hadoop. Dapat dilihat bahawa kita perlu meningkatkan daya ingatan. Cistanche boleh meningkatkan daya ingatan dengan ketara kerana pes daging adalah bahan perubatan tradisional Cina dengan banyak kesan unik, salah satunya adalah untuk meningkatkan daya ingatan. Keberkesanan daging cincang berasal dari pelbagai bahan aktif, termasuk asid karboksilik, polisakarida, flavonoid dan lain-lain. Bahan-bahan ini boleh menggalakkan kesihatan otak melalui pelbagai saluran.

Klik tahu suplemen untuk meningkatkan ingatan
Kami menggunakan dua SSD sebagai ruang storan di mana 120 GB SATA3 SSD digunakan untuk sistem pengendalian, dan 512 GB SATA3 SSD masing-masing dilengkapi untuk HDFS. Selain itu, SSD SATA3 512 GB boleh dimanfaatkan dengan berkesan untuk mengembangkan lebar jalur memori utama yang tidak mencukupi untuk menyimpan cache RDD Spark. Semua nod termasuk nod nama dan nod data disambungkan dengan suis Ethernet 1 Gb, seperti yang dilihat dalam Rajah 1. Jadual 2 menunjukkan ringkasan konfigurasi perkakasan dan perisian dalam setiap nod data kluster katil uji kami.


3.2. Spark JVM Heap
Tugas Spark berjalan sebagai proses Java pada Java Virtual Machine (JVM), dan Spark mengeksploitasi Scala, bahasa berfungsi yang dilanjutkan dari Java. Proses pekerja Spark juga berjalan pada JVM setiap nod data, supaya pada setiap nod data, proses pekerja mempunyai timbunan JVM dalam ingatan utama seperti yang digambarkan dalam Rajah 2. Apabila Spark menyerahkan tugas, proses pekerja yang mempunyai timbunan JVM melaksanakan tugas sebagai tugas teragih.

Kami boleh menyesuaikan nisbah saiz timbunan JVM pekerja Spark melalui fail konfigurasi percikan lalai. conf dalam direktori spark/conf/. Dalam fail defaults.conf spark, nilai spark.executor.memory ialah saiz timbunan JVM di mana lalai ialah 512 MB yang boleh digunakan oleh setiap nod pekerja dalam nod data. Selain itu, nilai spark.storage.safetyFraction ditetapkan sebagai 0.9, yang bermaksud Spark boleh menggunakan sehingga 90% daripada saiz timbunan JVM (juga dikenali sebagai kawasan keselamatan). Ini adalah untuk mengelakkan JVM daripada menjana ralat OOM (kehabisan memori) kerana kekurangan memori utama yang tersedia semasa pemprosesan tugasan.
Dalam kawasan keselamatan ini, ruang timbunan JVM keseluruhan dibahagikan kepada tiga sub-rantau: ruang buka gulungan, penyimpanan dan shuffle, seperti yang ditunjukkan dalam Rajah 2. Ruang buka gulungan digunakan untuk membuka blok data dalam ingatan. Apabila RDD dicache pada media storan lain seperti SSD atau HDD bukan pada memori utama, RDD harus bersiri. Kemudian, apabila Spark membaca RDD ini kembali ke ingatan, RDD perlu dibuka. Ruang storan digunakan untuk caching RDD. Jika ruang storan tidak mencukupi untuk menyimpan cache RDD, sesetengah RDD boleh dialih keluar daripada ruang ini berdasarkan dasar LRU (paling kurang digunakan baru-baru ini), atau ia boleh dicache pada media storan lain, seperti SSD. Ruang shuffle digunakan untuk mengocok data perantaraan. Ruang shuffle ini boleh memainkan peranan penting dalam aplikasi berulang seperti pembelajaran mesin kerana ia boleh menjejaskan keseluruhan masa penyiapan kerja dengan ketara.
Dalam konfigurasi Spark lalai, ruang storan dan shuffle timbunan JVM mempunyai nisbah pecahan kapasiti sebanyak {{0}}.6 dan 0.2, masing-masing (iaitu, 60 % daripada kawasan keselamatan untuk storan dan 20% untuk shuffle). Ruang buka gulungan mengambil 20% ruang storan secara lalai. Kapasiti tiga ruang timbunan JVM ini boleh ditetapkan oleh percikan. storage.unrollFraction, spark.storage.memoryFraction, dan spark.shuffle.memoryFraction. Contohnya, dalam kluster katil ujian kami, kami boleh menetapkan spark.executor.memory sebagai 2.6 GB daripada memori 4 GB nod pekerja, yang bermaksud saiz timbunan JVM ditetapkan kepada maksimum 2.6 GB. Kemudian, kapasiti sebenar ruang storan dan ruang shuffle ialah 2.6 GB × 0.9 × 0.6 = 1.4 GB dan 2.6 GB × 0.9 × 0.2=0.46 GB, masing-masing. Oleh itu, ruang buka gulungan mengambil masa 1.4 GB × 0.2=0.28 GB.
3.3. Dasar Caching RDD
Platform Spark menawarkan pelbagai pilihan caching RDD yang melibatkan memori utama dan cakera. Pilihan lalai ialah MEMORY_SAHAJA, di mana RDD dikekalkan dalam ruang storan yang diterangkan dalam Bahagian 3.2 sebagai objek Java bukan bersiri. Jika ruang storan ini tidak mencukupi untuk menyimpan semua RDD, sebahagian daripadanya akan dikeluarkan daripada memori utama berdasarkan dasar penggantian cache yang telah ditetapkan. Walau bagaimanapun, apabila RDD tidak dicache diperlukan untuk pemprosesan tugas, RDD ini hendaklah dibuat semula berdasarkan maklumat keturunan yang boleh mengakibatkan kemerosotan prestasi yang ketara dalam dasar caching MEMORY_SAHAJA ini.
Selain pilihan MEMORY_ONLY, Spark menyediakan pilihan MEMORY_AND_DISK, DISK_SAHAJA dan OFF_pilihan. Pilihan MEMORY_DAN_DISK menyimpan RDD dalam cakera tidak meruap apabila ruang storan tidak mencukupi untuk menyimpan semua RDD yang diperlukan. Cakera boleh terdiri daripada HDD atau SSD; bagaimanapun, cakera gelendong biasa mempunyai daya baca/tulis yang agak lemah, jadi masa pelaksanaan keseluruhan boleh lebih lama daripada pilihan caching MEMORY_SAHAJA. Untuk menangani masalah ini, kami boleh memanfaatkan SSD dengan berkesan, yang berpotensi mengurangkan masa penyiapan kerja keseluruhan berbanding pendekatan berasaskan HDD biasa.

Pilihan DISK_SAHAJA menyimpan RDD hanya dalam peranti storan tidak meruap seperti HDD atau SSD, iaitu, bukan dalam memori utama. Kelompok yang tidak mempunyai jumlah memori tersedia yang mencukupi boleh mencapai prestasi yang baik dengan pilihan ini. Dalam kes ini, memandangkan RDD hanya disimpan dalam media cakera, ruang shuffle boleh dilanjutkan dan bukannya menggunakan ruang storan memori. Akibatnya, apabila menjalankan aplikasi seperti PageRank, yang menjana jumlah data shuffle yang agak besar, kita boleh melihat prestasi yang lebih baik daripada dalam kes MEMORY_SAHAJA.
Pilihan OFF_HEAP membolehkan Spark menggunakan ruang luar timbunan, yang berada di luar pengurusan pengumpul sampah Java. Oleh itu, jika kita menggunakan ruang luar timbunan, kita mesti berurusan dengan operasi memori yang rumit seperti peruntukan/deallocation dan serialisasi/deserialisasi. Oleh itu, untuk tujuan praktikal, kami tidak menggunakan konfigurasi OFF_HEAP.
3.4. Metodologi Pengoptimuman
Seperti yang kita bincangkan dalam Bahagian 3.2 dan 3.3, kaedah pengoptimuman kami termasuk (1) konfigurasi timbunan Spark JVM dan (2) pilihan percubaan dasar caching RDD seperti berikut:
1. Konfigurasi timbunan Spark JVM: Kami menyiasat kesan menukar nisbah pecahan kapasiti ruang shuffle dan storan. Nisbah ruang shuffle dan storan ialah 60%:30%, 50%:40% dan 20%:60%, masing-masing. Nisbah kocok dan storan "20%:60%" ialah nilai lalai dalam persediaan Spark. Kami memilih "60%:30%" untuk membezakan hasil dengan ruang shuffle yang mencukupi dan mengkonfigurasi "50%:40%" untuk menunjukkan prestasi dengan cara yang seimbang.
2. Dasar caching RDD: Kami juga mengkaji kesan dasar caching RDD yang berbeza. Kami membandingkan prestasi pelbagai dasar seperti MATI_TIMBUNG, MEMORY_SAHAJA, MEMORY_DAN_CAKERA dan CAKERA_SAHAJA, di mana DISK menandakan SSD dalam eksperimen ini.
Jadual 3 menunjukkan sejumlah 12 konfigurasi eksperimen berbeza berdasarkan dasar caching RDD dan nisbah pecahan kapasiti Spark JVM. Dalam konfigurasi percubaan yang dilabelkan dengan "_1" (contohnya, "N_1"), kami menetapkan 60% daripada timbunan Spark JVM untuk kocok dan 30% untuk ruang storan. Dengan yang berlabel "_2", kami menetapkan 50% daripada timbunan Spark JVM untuk dikocok dan 40% untuk storan. Akhir sekali, bagi mereka yang dilabelkan dengan "_3", kami menetapkan 20% daripada timbunan Spark JVM untuk mengocok dan 60% untuk storan, seperti yang boleh dilihat daripada lajur "Pilihan", "Shuffle" dan "Storan" dalam Jadual 3. Ambil perhatian bahawa saiz memori maksimum kluster katil ujian kami bagi pelaksana ialah 2.7 GB, iaitu, setiap nod pekerja mempunyai 2.7 GB sebagai saiz timbunan Spark JVM.

Dari segi dasar caching RDD, pilihan "N" bukan untuk cache RDD, pilihan "M" adalah untuk cache RDD pada memori sahaja, pilihan "M&S" adalah untuk cache RDD pada memori dan SSD bersama-sama, dan akhirnya, pilihan "S" adalah untuk caching RDD pada SSD sahaja.
Melalui percubaan kami, kami mencadangkan strategi pengoptimuman yang boleh mencapai prestasi terbaik daripada kluster yang mempunyai jumlah memori yang tidak mencukupi dengan melaraskan konfigurasi timbunan Spark JVM dengan teliti dan menggunakan dasar caching RDD yang berkesan, seperti yang akan kita lihat dalam Bahagian 4.
4. Keputusan dan Analisis Eksperimen
4.1. Eksperimen PageRank 500 MB
4.1.1. Keputusan dengan Mengubah Konfigurasi Timbunan JVM
Rajah 3 menunjukkan keputusan percubaan setiap peringkat dalam beban kerja PageRank dengan menukar saiz timbunan JVM. Dalam peringkat Distinct, Spark membaca data input dan membezakan URL dan pautan. Seperti yang dapat kita lihat daripada keputusan peringkat Distinct0, masa pelaksanaan keseluruhan berkurangan dengan menukar saiz timbunan JVM daripada _1 dan _2 kepada _3 pilihan, terutamanya disebabkan kepada kutipan sampah (GC). Contohnya, masa GC mengambil masa 25 s, 24 s dan 16 s dalam M&S_1, M&S_2 dan M&S{{10}}, masing-masing. Oleh itu, dalam peringkat Distinct{19}}, semasa kami meningkatkan jumlah ruang storan, kami boleh meningkatkan prestasi keseluruhan dengan mengurangkan masa GC. Sebaliknya, dalam peringkat Distinct1, masa pelaksanaan keseluruhan meningkat apabila kami menukar pilihan daripada _1 dan _2 kepada _3. Ini disebabkan terutamanya oleh tumpahan shuffle. Apabila kami menyemak UI web Spark, data shuffle telah tertumpah ke cakera kerana kekurangan ruang memori shuffle. Contohnya, saiz data tumpahan kocok pada cakera dalam M&S_1, M&S_2 dan M&S_3 masing-masing ialah 0, 220 MB dan 376 MB. Apabila tumpahan shuffle berlaku, overhed CPU untuk menumpahkan data ke cakera meningkat kerana data perlu bersiri.

Selepas peringkat Distinct, terdapat peringkat FlatMap berulang untuk mendapatkan pangkat. Peringkat FlatMap menjana banyak data shuffle, yang boleh menjadikan kluster kami kekurangan ruang memori shuffle yang diperlukan. Oleh itu, apabila jumlah ruang shuffle yang tersedia berkurangan (mengikut susunan daripada pilihan _1, _2, dan _3), lebih banyak tumpahan shuffle boleh berlaku, yang boleh menjejaskan keseluruhan pelaksanaan kerja masa (cth, peringkat Peta rata2 M&S _1: 37 s, _2: 40 s, _3: 49 s). Walau bagaimanapun, apabila data dicache pada memori sahaja (iaitu, M_1, M_2 dan M_3), ia menunjukkan corak lain. Sebab utama tingkah laku ini ialah penjadual Spark menjadualkan tugas secara tidak sekata kerana terdapat kekurangan ruang storan memori untuk menyimpan RDD pada pilihan _1 dan _2. Jika pekerja tidak mempunyai RDD, dia dikecualikan daripada kumpulan penjadualan. Oleh itu, pekerja lain perlu mengendalikan tugas tambahan dengan overhed GC yang boleh menjejaskan keseluruhan masa pelaksanaan kerja.
4.1.2. Keputusan dengan Menukar Pilihan Caching RDD
Pertama sekali, peringkat Distinct tidak terjejas dengan menukar dasar caching RDD tetapi hanya oleh penggunaan memori. Peringkat yang dipengaruhi oleh pilihan caching RDD ialah peringkat FlatMap kerana semasa fasa shuffle, RDD cache digunakan semula.

Dalam Rajah 4, graf dinormalkan oleh pilihan N_1 yang tidak menyimpan cache konfigurasi memori RDD dan _1 untuk menyemak perbezaan prestasi. Apabila membandingkan hanya graf _1, dalam susunan M_1, M&S_1 dan S_1, terdapat penurunan prestasi sebanyak 32% dalam M{{8 }} dan 30% dan 20% peningkatan prestasi dengan M&S_1 dan S_1, masing-masing. Dengan pilihan M_1, sebab prestasi yang agak lemah ialah RDD dicache secara tidak sekata kerana kekurangan storan, yang akan mengakibatkan penjadualan tidak sekata seperti yang telah kami nyatakan sebelum ini. Ini bermakna ruang timbunan JVM tidak mencukupi untuk merombak data dan menyimpan RDD.

Untuk menangani masalah ini, kami menyebarkan RDD ke cache pada memori dan SSD, yang boleh meningkatkan prestasi seperti yang ditunjukkan dengan pilihan M&S_1. Caching RDD pada memori meningkatkan kelajuan akses untuk RDD, dan caching RDD pada SSD boleh mengelakkan tumpahan shuffle dengan meluaskan ruang shuffle yang tersedia dalam memori dengan berkesan. Dengan pilihan S_1 yang telah menunjukkan peningkatan prestasi sebanyak 20%, RDD dicache pada SSD sahaja. Tumpahan shuffle dikurangkan dengan menyimpan cache RDD pada SSD. Walau bagaimanapun, ia telah mencapai peningkatan prestasi yang lebih rendah daripada M&S_1, di mana RDD terutamanya dicache pada memori dan digunakan semula daripada memori.
Dalam konfigurasi lalai Spark, iaitu pilihan _3, kita boleh melihat bahawa dalam susunan M_3, M&S_3, S_3 dan N{{4 }}, prestasi keseluruhan menurun. Dalam konfigurasi lalai, storan timbunan JVM cukup untuk RDD dicache dengan baki. Oleh itu, prestasi keseluruhan bergantung terutamanya pada prestasi peranti memori yang digunakan. Walau bagaimanapun, kami masih boleh melihat prestasi terbaik dengan pilihan M&S_1 memandangkan kami boleh mengurangkan masa GC dan merombak tumpahan dengan berkesan dengan menyimpan cache RDD pada memori dan SSD.
4.2. Prestasi PageRank 1 GB
Kami bereksperimen dengan beban kerja PageRank dengan meningkatkan saiz data daripada 500 MB kepada 1 GB. Rajah 5 menunjukkan gelagat sistem yang berbeza berbanding PageRank untuk set data 500 MB. Kita boleh melihat beberapa kerja yang gagal yang tidak berjaya menyelesaikan kerja sehingga peringkat take6 (cth, N_1, N_2, M_1, M_2, M _3, M&S_3). Antara kerja yang gagal ini, terdapat yang gagal dalam peringkat flatMap2, iaitu N_1, N_2 dan M_1. Sebab kegagalan kerja adalah kekurangan memori storan. GC berlaku apabila RDD dicache pada memori yang tidak mencukupi. Disebabkan overhed GC ini, pelaksana Spark menerima pengecualian ExecutorLostFailure.
M_2, M_3 dan M&S_3 boleh meneruskan pemprosesan sehingga peringkat flatMap2; namun, selepas ini, kegagalan berlaku. M&S_3 beroperasi sama dengan M_3 sehingga peringkat flatMap2 kerana apabila pilihan M&S_3 digunakan, terdapat memori yang mencukupi untuk cache RDD. Selepas flatMap2, ralat OutOfMemory berlaku kerana kekurangan ruang memori shuffle dalam peringkat flatMap3.
4.2.1. Keputusan dengan Mengubah Konfigurasi Timbunan JVM
Peringkat Distinct0 menunjukkan hasil yang hampir serupa dengan set data 500 MB dan prestasi keseluruhan bertambah baik dalam susunan pilihan _1, _2 dan _3. Ini kerana masa GC dikurangkan kepada 78 s, 59 s, dan 28 s, masing-masing.
Sebaliknya, dalam peringkat Distinct1, ia menunjukkan hasil yang berbeza untuk set data 500 MB. Dalam percubaan set data 500 MB, kita boleh melihat peningkatan prestasi dengan meningkatkan ruang shuffle memori. Walau bagaimanapun, dalam eksperimen set data 1GB, memori pelaksana nod pekerja tidak dapat menampung saiz data yang besar. Oleh itu, ruang shuffle memori menjadi agak tidak mencukupi. Sebagai contoh, jumlah tumpahan kocok untuk pilihan _1, _2 dan _3 masing-masing ialah 575.5 MB, 813.8 MB dan 843.4 MB, dan masa GC mengambil masa 33 s, 10 s, dan 8 s, masing-masing. Seperti yang kami nyatakan sebelum ini, apabila tumpahan shuffle berlaku, RDD perlu disirikan supaya pengiraan CPU boleh meningkat, yang boleh mengakibatkan kemerosotan prestasi keseluruhan.

4.2.2. Keputusan Menukar Dasar Caching RDD
Untuk menganalisis masa pelaksanaan dengan menukar dasar caching RDD, seperti yang dapat kita lihat daripada Rajah 6, kita mengecualikan peringkat yang berbeza daripada Rajah 5. Ini kerana kita tidak perlu menganalisis peringkat yang berbeza kerana tiada perubahan yang disebabkan oleh menukar dasar caching RDD. .
Menariknya, tiada perubahan dengan pelbagai konfigurasi timbunan JVM dalam peringkat flatMap berbanding kes set data 500 MB. Sebabnya ialah tumpahan shuffle berlaku dalam semua konfigurasi kerana memori tidak mencukupi. Masa pelaksanaan keseluruhan dengan menukar pilihan caching RDD meningkat dalam susunan M&S, S, N dan M. (M&S ialah pilihan terpantas.) Dalam pilihan N, ralat ExecutorLostFailure berlaku kerana ruang memori tidak mencukupi. Dalam pilihan M, apabila RDD dicache pada memori, overhed GC berlaku kerana ruang memori tidak mencukupi. Walaupun RDD dicache pada memori, kerja itu gagal kerana ralat ExecutorLostFailure yang berlaku apabila ruang memori shuffle tidak mencukupi (OutOfMemory).
Dalam situasi ingatan tersedia yang rendah, pilihan M&S dan S boleh menjadi alternatif yang berkesan. Dalam pilihan M&S{{0}}, kami meningkatkan kebolehcapaian RDD dengan menyimpan cache RDD menggunakan kedua-dua memori dan SSD. Akibatnya, terdapat peningkatan prestasi atas sebab yang sama seperti set data 500 MB. Di samping itu, terdapat ruang memori shuffle yang mencukupi kerana caching RDD pada SSD. Seperti yang dilihat dalam Rajah 6, pilihan M&S_1 menjadi pilihan terpantas dalam percubaan ini (M&S_1:0.6, S_1:0.63, T_1 0.64).

4.3. Analisis Eksperimen TC
Rajah 7 menunjukkan keputusan percubaan TC (penutupan transitif) yang menggunakan data input yang melibatkan 50,000 tepi dan 25,000 bucu yang dijana secara rawak. Nombor lelaran ialah 10. Melalui lelaran, bilangan tugasan digandakan pada setiap lelaran, dan oleh itu, saiz RDD meningkat dan jumlah shuffle baca dan tulis juga meningkat. Dalam lelaran terakhir, bilangan tugasan menjadi 4096. Memandangkan terdapat lebih banyak peringkat lelaran, terdapat kesan yang lebih besar pada jumlah masa pelaksanaan kerja, dan peringkat lelaran terakhir adalah yang terbesar, yang terdiri daripada banyak tugasan yang boleh menurunkan prestasi keseluruhan .

Seperti yang dapat kita lihat daripada Rajah 7, prestasi bertambah baik dalam susunan _3, _2 dan _1 pada pilihan M, M&S dan S, yang bermaksud bahawa mendapatkan shuffle yang mencukupi ingatan timbunan JVM berguna. Dengan pilihan M, prestasi pilihan _1 adalah 18% lebih pantas daripada pilihan _3, manakala, dalam pilihan M&S, prestasi pilihan _1 adalah 3% lebih pantas daripada {{9 }}. Dalam pilihan S, prestasi _1 adalah 2% lebih pantas daripada _3.
Apabila kami menumpukan pada menukar pilihan caching RDD, prestasi pilihan S_1 adalah 42% lebih pantas daripada N_1 dan ia juga 31% lebih pantas daripada M_1. Sebab keuntungan prestasi masa pelaksanaan kerja adalah bergantung pada peringkat lelaran terakhir. Faktor utama yang mempengaruhi peringkat lelaran terakhir ialah masa disekat bacaan kocok. Kocok baca masa disekat berlaku apabila RDD yang dilaksanakan pada peringkat sebelumnya dibaca daripada nod pekerja lain melalui rangkaian kerana kekurangan memori pelaksana.
Walaupun setiap tugasan mempunyai keuntungan prestasi kira-kira 1–2 s melalui menyelesaikan masa yang disekat baca kocok, kita boleh mencapai keuntungan prestasi yang ketara kerana, dalam keadaan terakhir, bilangan tugasan agak besar (iaitu, 4096). Selain itu, salah satu faktor utama yang mempengaruhi masa pelaksanaan kerja ialah peringkat pengiraan, yang mengira bilangan tepi matriks TC pada tugas terakhir.
Dengan pilihan N, kerana tiada RDD dicache dalam peringkat pengiraan, Spark membaca data shuffle yang dilaksanakan dari peringkat sebelumnya, yang mengambil masa 60 saat. Di samping itu, dalam pilihan M, RDD tidak dicache pada memori kerana kekurangan memori pelaksana. Akibatnya, ia juga mengambil masa 60 saat. Walau bagaimanapun, dalam pilihan M&S dan S, RDD boleh dicache pada memori dan SSD, supaya ia hanya mengambil masa 2 saat dalam peringkat kiraan.
4.4. Analisis Eksperimen TeraSort
Rajah 8 menunjukkan keputusan percubaan penanda aras TeraSort yang menggunakan set data 10 GB dengan menukar konfigurasi timbunan JVM dan pilihan caching RDD. Graf ini dinormalkan oleh pilihan N_1. Kita dapat melihat bahawa semua masa pelaksanaan kerja adalah serupa; perbezaan antara mereka adalah kurang daripada 5%. Dalam beban kerja TeraSort, tiada peningkatan atau penurunan prestasi dengan menukar konfigurasi dan pilihan. Dalam peringkat pengisihan, terdapat beberapa rombakan melalui rangkaian. Walau bagaimanapun, saiz shuffle baca dan tulis shuffle adalah 25 MB setiap satu, yang agak kecil berbanding dengan PageRank dan TC. Oleh itu, konfigurasi timbunan JVM dan pilihan caching RDD tidak menjejaskan prestasi. Tambahan pula, beban kerja TeraSort tidak terdiri daripada kerja berulang seperti dalam penutupan transitif, jadi tiada faedah daripada caching RDD pada peringkat sebelumnya.

4.5. Analisis Eksperimen Pengelompokan K-Means
Masa siap kerja normal pengelompokan k-means untuk dataset 1.5 GB ditunjukkan dalam Rajah 9. Tujuan pengelompokan k-means adalah untuk mencari gugusan k dalam dataset berdasarkan ukuran jarak (cth, jarak Euclidean). Dalam beban kerja ini, algoritma mengurangkan SSE (jumlah ralat kuasa dua) [24] dengan mengulangi pengiraan jarak antara titik pusat k dan setiap titik data. Dalam eksperimen ini, kami mengulangi proses ini sebanyak lapan kali. Jumlah data yang akan dikocok adalah minimum kerana data yang diperlukan dari peringkat sebelumnya adalah maklumat tentang titik tengah dan SSE dalam setiap peringkat. Dalam beban kerja pengelompokan k-means kami, jumlah maksimum data baca/tulis shuffle ialah 1.0 MB, dan minimum ialah 0.8 MB. Tumpahan shuffle tidak berlaku di sini kerana ruang shuffle adalah mencukupi dalam semua tetapan. Dalam percubaan tanpa pilihan caching, tiada perbezaan antara pilihan _1, _2 dan _3, kerana tetapan ini tidak cache sebarang RDD, dan dalam ketiga-tiga tetapan, shuffle ruang adalah mencukupi.

Apabila menyimpan RDD dalam memori utama atau memori dan SSD, lebih banyak ruang storan untuk RDD, lebih banyak prestasi dalam masa pelaksanaan kerja bertambah baik kerana lebih banyak RDD boleh dicache pada ruang storan. Apabila membandingkan memori_hanya pilihan dan memori_dan_pilihan SSD, memori_dan_pilihan SSD menunjukkan peningkatan prestasi yang lebih baik. Ini kerana, dalam pilihan memori_sahaja, ruang storan tidak mencukupi walaupun dalam pilihan M_3. Di samping itu, caching RDD pada SSD menyelesaikan kekurangan memori storan. Memori_dan_Pilihan SSD meningkatkan prestasi sebanyak 10% secara purata berbanding dengan pilihan memori_sahaja.
Ambil perhatian bahawa beban kerja pengelompokan k-means menunjukkan kecenderungan prestasi yang bertentangan daripada PageRank dan beban kerja penutupan transitif kerana perbezaan dalam jumlah data shuffle. Kami akan membincangkan perkara ini dengan lebih terperinci dalam subseksyen berikut.
5. Perbincangan dan Rumusan
5.1. Perbincangan
Kami menganalisis faktor utama masalah penurunan prestasi yang berpotensi berdasarkan ciri beban kerja dan peringkat pemprosesan. Keputusan percubaan kami yang luas diringkaskan mengenai penggunaan teknik pengoptimuman prestasi platform Spark untuk pelbagai beban kerja seperti berikut:
• Kemerosotan prestasi oleh pengumpulan sampah Java: Dalam beban kerja PageRank dengan set data 500 MB dan set data 1GB, GC berlaku apabila ruang storan timbunan JVM tidak mencukupi untuk menyimpan RDD. Dalam peringkat Distinct0 yang membaca fail input daripada HDFS dan menyimpannya ke dalam RDD, GC berlaku. Kami mengembangkan ruang storan timbunan JVM melalui konfigurasi untuk menyelesaikan masalah GC ini. Kami boleh meningkatkan prestasi untuk mengurangkan GC kerana ruang storan timbunan JVM boleh dikembangkan. Dalam Rajah 3 dan 5, dengan pilihan caching RDD yang sama, konfigurasi _3 menunjukkan prestasi terbaik dalam peringkat Distinct0. Selain itu, dalam PageRank dengan set data 1 GB, beberapa pilihan gagal dalam peringkat FlatMap kerana kekurangan memori. Overhed GC meningkat dengan banyak sehingga pentas gagal atau masuk ke gelung tak terhingga. Oleh itu, kami membina kluster dengan SSD untuk menyelesaikan masalah ini. Ia menunjukkan peningkatan prestasi dan berjaya dalam kerja yang gagal menggunakan memori sahaja, seperti yang dilihat dalam Rajah 6, M&S_1 dan S_1.
• Kemerosotan prestasi oleh tumpahan shuffle: Dalam beban kerja PageRank dengan set data 500 MB dan set data 1 GB, dalam peringkat FlatMap, kita dapat melihat bahawa pilihan M&S_1 menunjukkan prestasi terbaik kerana ia mempunyai jumlah shuffle paling sedikit tumpahan (Rajah 4: M&S_1 ialah 30% lebih pantas daripada N_1; Rajah 6: M&S_1 ialah 40% lebih pantas daripada N_3). PageRank mempunyai banyak tugas shuffle. Oleh itu, apabila ruang shuffle timbunan JVM tidak mencukupi untuk mengocok data melalui rangkaian, tumpahan shuffle berlaku. Oleh itu, untuk mengurangkan tumpahan shuffle, mengembangkan ruang shuffle timbunan JVM menjadi faktor utama peningkatan prestasi.
Tambahan pula, kami boleh meningkatkan prestasi dengan menyimpan RDD pada memori dan SSD. Ini boleh menjadikan pelaksana mengembangkan memori shuffle timbunan JVM untuk mengurangkan tumpahan shuffle. Jika terdapat lebih banyak lelaran, prestasi daripada peringkat flatMap akan menjadi titik utama peningkatan prestasi. Dalam percubaan set data 1GB, masa pelaksanaan kerja S_3 ialah pilihan terbaik, kerana RDD dicache pada SSD sahaja dan terdapat memori timbunan yang mencukupi pada pelaksana. Oleh itu, dalam pilihan S_3, peringkat Distinct adalah lebih pantas daripada mana-mana pilihan lain. Walau bagaimanapun, jika nombor lelaran meningkat, peringkat flatMap mempengaruhi masa pelaksanaan kerja. Oleh itu, pilihan M&S_1 boleh mencapai prestasi hebat dalam kes ini. Melalui analisis ini, kita dapat mengenal pasti bahawa kocok mempunyai kesan utama pada masa penyiapan kerja. Oleh itu, kita perlu mengembangkan memori shuffle timbunan JVM dan cache RDD kedua-dua dalam memori dan SSD untuk mendapatkan ruang memori shuffle yang mencukupi untuk mencegah tumpahan shuffle.
• Kemerosotan prestasi oleh shuffle membaca masa disekat: Terdapat shuffle membaca masa disekat pada beban kerja TC. Ia berlaku apabila terdapat banyak tugasan di peringkat dan setiap tugasan perlu membaca RDD sebelumnya melalui rangkaian. Hasil daripada percubaan TC (Rajah 7), pilihan M&S adalah lebih pantas daripada pilihan M. Dalam pilihan caching RDD yang sama, mengembangkan ruang shuffle timbunan JVM adalah lebih pantas daripada mengembangkan ruang storan. Sebab prestasi yang dipertingkatkan ialah dengan mengembangkan ruang shuffle timbunan JVM, masa yang disekat baca shuffle berkurangan dalam setiap tugas.
5.2. Ringkasan: Manakah Cara Terbaik?
Dalam keputusan percubaan yang komprehensif, tidak ada satu persediaan terbaik untuk meningkatkan semua beban kerja, kerana setiap beban kerja ini mempunyai ciri yang berbeza, walaupun sepanjang hayat kerjanya. Walau bagaimanapun, kami masih boleh mencadangkan cara mengoptimumkan konfigurasi platform pengkomputeran dalam memori yang diedarkan dengan mempertimbangkan pelbagai beban kerja sasaran seperti berikut:
• Konfigurasi timbunan Spark JVM—kawasan kocok vs. kawasan storan: Menurut hasil percubaan empat beban kerja yang berbeza, kita boleh melihat perbezaan prestasi bergantung pada ciri beban kerja. Sebagai contoh, PageRank ialah contoh tipikal untuk mempunyai sejumlah besar data shuffle supaya memperuntukkan lebih banyak memori kepada bahagian shuffle meningkatkan prestasi keseluruhan. Walau bagaimanapun, dalam kes pengelompokan k-means, lebih banyak kita memperuntukkan memori storan, berbanding dengan memori shuffle, lebih sedikit masa pelaksanaan diperlukan. Oleh itu, jika kita boleh melaraskan peratusan peruntukan memori JVM secara dinamik mengikut ciri beban kerja, kita boleh mengoptimumkan jumlah masa pelaksanaan. BENANG Hadoop [25] membolehkan kami menetapkan kerja kepada jenis kluster (konfigurasi) yang berbeza supaya kami boleh menggunakan idea ini pada kluster Hadoop bersaiz besar untuk memenuhi ciri memori untuk pelbagai jenis pekerjaan.
• Dasar caching RDD—memori lwn. SSD: Dalam kebanyakan kes, caching memori yang disokong SSD menunjukkan prestasi terbaik melainkan semua RDD boleh dimuatkan dalam memori utama sebenar. Oleh itu, dasar caching memori berbantukan SSD boleh menjadi pilihan yang berdaya maju untuk beban kerja yang mencabar yang memerlukan sejumlah besar memori utama yang tidak dapat dipenuhi oleh mana-mana nod tunggal dalam kelompok.
6. Kesimpulan
Dalam makalah ini, kami telah menyiasat faktor utama kemerosotan prestasi sistem Spark yang berjalan di atas kelompok pengkomputeran berasaskan pelayan komoditi dengan ingatan utama yang tidak mencukupi. Selepas percubaan dan analisis, kami membentangkan alternatif yang boleh meningkatkan prestasi keseluruhan.
Pengumpulan sampah Java berlaku apabila ruang penyimpanan timbunan JVM tidak mencukupi kerana kekurangan memori fizikal. Java GC membuat tugasan menunggu kutipan sampah supaya masa penyiapan kerja keseluruhan meningkat. Tumpahan shuffle berlaku apabila ruang shuffle timbunan JVM tidak mencukupi semasa fasa shuffle. Kocok tumpahan meningkatkan overhed CPU untuk melakukan siri untuk menumpahkan data kocok perantaraan ke cakera kerana kekurangan ruang shuffle. Dalam percubaan beban kerja TC, baca kocok masa disekat menjadikan tugasan menunggu untuk membaca data kocok melalui rangkaian kerana kekurangan ruang kocok. Kesemua faktor ini berpotensi meningkatkan masa penyiapan kerja keseluruhan yang boleh menjejaskan prestasi sistem Spark dengan serius.
Untuk menangani masalah ini, kami membina kluster dengan SSD dan cache RDD pada memori dan SSD secara berasingan dengan menggunakan SSD untuk menambah ruang storan memori. Selain itu, kami melaraskan konfigurasi timbunan JVM untuk mengembangkan ruang shuffle. Hasilnya, kami boleh mencapai peningkatan prestasi sebanyak 30% untuk beban kerja PageRank dan peningkatan prestasi sebanyak 42% untuk beban kerja TC. Kami telah mengenal pasti bahawa tumpahan shuffle boleh menjadi faktor utama kemerosotan prestasi dan menunjukkan melalui percubaan bahawa dalam beban kerja yang terdiri daripada beberapa lelaran dan shuffle, mengembangkan ruang shuffle boleh memberikan peningkatan prestasi yang ketara. Di samping itu, kami mendapati bahawa corak penggunaan memori kerja yang berbeza boleh menjejaskan jumlah masa pelaksanaan bergantung pada peruntukan peratusan memori penyimpanan/kocok dalam JVM. Menurut analisis prestasi PageRank dan k-means clustering, peruntukan memori dalam JVM yang disesuaikan dengan ciri beban kerja boleh meningkatkan masa penyiapan kerja dengan ketara.
Mengintegrasikan penemuan ini ke dalam platform Spark akan menjadi salah satu kerja masa depan kami. Contohnya, jika beban kerja boleh dicirikan dari segi jumlah data shuffle, konfigurasi yang dioptimumkan boleh digunakan secara automatik untuk mempercepatkan pemprosesan beban kerja sasaran. Oleh itu, dalam konfigurasi pelayan heterogen, membangunkan sistem penjadualan sedar penggunaan memori beban kerja boleh meningkatkan prestasi keseluruhan kluster berasaskan Spark.
Sumbangan Pengarang:
Pengkonsepan, JL (Jaehwan Lee); metodologi, JL (Jaehwan Lee) dan JC; perisian, JC dan JL (Jaehyun Lee); pengesahan, JC, JL (Jaehyun Lee) dan JL (Jaehwan Lee); siasatan, JL (Jaehwan Lee) dan J.-SK; sumber, JL (Jaehwan Lee) dan J.-SK; penyusunan data, JC dan JL (Jaehyun Lee); penulisan—penyediaan draf asal, JC dan JL (Jaehyun Lee); menulis— menyemak dan menyunting, JL (Jaehwan Lee) dan J.-SK; visualisasi, JL (Jaehyun Lee); penyeliaan, JL (Jaehwan Lee) dan J.-SK; pentadbiran projek, JL (Jaehwan Lee) dan J.-SK; pemerolehan pembiayaan, JL (Jaehwan Lee). Semua pengarang telah membaca dan bersetuju dengan versi manuskrip yang diterbitkan.

Pembiayaan:
Penyelidikan ini disokong oleh Program Penyelidikan Sains Asas (NRF-2020R1F1A1072696) melalui Yayasan Penyelidikan Kebangsaan Korea (NRF) yang dibiayai oleh Kementerian Sains dan ICT, program GRRC Wilayah Gyeonggi (No. GRRC-KAU{ {5}}B01, "Study on the Video and Space Convergence Platform for 360VR Services") dan program sokongan ITRC (Pusat Penyelidikan Teknologi Maklumat) (IITP-2021-2018-0-01423).
Penyata Lembaga Semakan Institusi:
Tidak berkaitan.
Kenyataan Persetujuan Termaklum:
Tidak berkaitan.
Penyata Ketersediaan Data:
Disediakan atas permintaan.
Konflik Kepentingan:
Penulis mengisytiharkan tiada konflik kepentingan.
Rujukan
1. Dekan, J.; Ghemawat, S. MapReduce: Pemprosesan data dipermudahkan pada kelompok besar. Commun. ACM 2008, 51, 107–113. [CrossRef]
2. Projek Apache Hadoop: Perisian Sumber Terbuka untuk Pengkomputeran Dipercayai, Boleh Skala, Teragih. Tersedia dalam talian: https: //hadoop.apache.org/ (diakses pada 10 September 2021).
3. Shvachko, K.; Kuang, H.; Radia, S.; Chansler, R. Sistem fail pengedaran Hadoop. Dalam Prosiding simposium ke-26 IEEE 2010 mengenai sistem dan teknologi penyimpanan massa (MSST), Incline Village, NV, Amerika Syarikat, 3–7 Mei 2010; ms 1–10.
4. Zaharia, M.; Chowdhury, M.; Franklin, MJ; Shenker, S.; Stoica, I. Spark: Pengkomputeran kluster dengan set kerja. HotCloud 2010, 10, 95.
5. Ousterhout, K.; Rasti, R.; Ratnasamy, S.; Shenker, S.; Chun, BG Memahami prestasi dalam rangka kerja analisis data. Dalam Prosiding Simposium USENIX ke-12 mengenai Reka Bentuk dan Pelaksanaan Sistem Rangkaian (NSDI), Oakland, CA, Amerika Syarikat, 4–6 Mei 2015; ms 293–307.
6. Xing, W.; Ghorbani, A. Algoritma PageRank berwajaran. Dalam Prosiding Persidangan Tahunan Kedua IEEE mengenai Penyelidikan Rangkaian Komunikasi dan Perkhidmatan, Fredericton, NB, Kanada, 21 Mei 2004; ms 305–314.
7. Chakradhar, ST; Agrawal, VD; Rothweiler, SG Algoritma penutupan transitif untuk penjanaan ujian. IEEE Trans. Comput.-Aided Des. Integr. Sistem Litar. 1993, 12, 1015–1028. [CrossRef]
8. O'Malley, O. Terabyte Sort pada Apache Hadoop. Yahoo. Mei 2008. ms 1–3. Tersedia dalam talian: http://sortbenchmark.org/ YahooHadoop.pdf (diakses pada 10 September 2021).
9. K-Means Pengelompokan. Tersedia dalam talian: https://en.wikipedia.org/wiki/K-means_clustering (diakses pada 10 September 2021).
10. Zaharia, M.; Chowdhury, M.; Das, T.; Dave, A.; Ma, J.; McCauly, M.; Franklin, MJ; Shenker, S.; Stoica, I. Set data teragih berdaya tahan: Abstraksi toleran kesalahan untuk pengkomputeran kelompok dalam memori. Dalam Prosiding Simposium USENIX ke-9 mengenai Reka Bentuk dan Pelaksanaan Sistem Rangkaian (NSDI), San Jose, CA, Amerika Syarikat, 25–27 April 2012; ms 15–28.
11. Davidson, A.; Atau, A. Mengoptimumkan Prestasi Kocok dalam Spark; Laporan teknikal; Berkeley-Jabatan Kejuruteraan Elektrik dan Sains Komputer, Universiti California: Berkeley, CA, Amerika Syarikat, 2013.
12. Nicolae, B.; Costa, CHA; Misale, C.; Katrinis, K.; Park, Y. Memanfaatkan I/O Adaptif untuk Mengoptimumkan Corak Pengocokan Data Kolektif untuk Analitis Data Besar. IEEE Trans. Pengagihan Selari. Syst. 2017, 28, 1663–1674. [CrossRef]
13. Zhang, H.; Cho, B.; Seyfe, E.; Ching, A.; Freedman, MJ Riffle: Perkhidmatan Kocok Dioptimumkan untuk Analitis Data Berskala Besar. Dalam Prosiding Persidangan EuroSys Ketiga Belas; EuroSys '18; Persatuan untuk Jentera Pengkomputeran: New York, NY, Amerika Syarikat, 2018. [CrossRef]
For more information:1950477648nn@gmail.com






