Dağıtılmış Bellek İçi Bilgi İşlem Platformu için SSD Bölüm 1'den Yararlanarak Optimizasyon Teknikleri
Aug 17, 2023
Soyut:
Bu yazıda, dağıtılmış bellek içi bilgi işlem sistemi "Apache Spark"ın genel performansını artırabilecek çeşitli optimizasyon stratejileri sunuyoruz. Yinelemeli işler ve ara veriler için dağıtılmış bellek yönetimi yeteneğine rağmen Spark, mevcut ana bellek miktarı (genellikle veri önbelleğe alma için kullanılan DRAM) sınırlı olduğunda önemli bir performans düşüşü sorunu yaşar.
Bu sorunu çözmek için ana bellek bant genişliği eksikliğini tamamlamak üzere bir SSD'den (yarıiletken sürücü) yararlanıyoruz. Spesifik olarak, "Spark JVM Yığın Yapılandırması"ndaki karıştırma ve depolama alanlarının kapasite oranı oranlarının değiştirilmesinin etkilerini toplu olarak araştırarak ve farklı "RDD Önbelleğe Alma Politikaları" (örneğin, SSD destekli) uygulayarak Apache Spark için etkili bir optimizasyon metodolojisi sunuyoruz. Bellek önbelleğe alma).
RDD önbelleğe alma stratejisi, program performansını artırmak için RDD'yi Spark'ta önbelleğe alma yöntemini ifade eder. Önbelleğe alma yoluyla, tekrarlanan hesaplamaları önlemek için hesaplama sonuçları bellekte saklanabilir, böylece programın çalışma hızı arttırılabilir. Bellek, insanın bilişsel yeteneğini ifade eder ve aynı zamanda insan zekasının da önemli bir parçasıdır.
RDD önbelleğe alma ve belleğin herhangi bir ilişkisi yok gibi görünse de, aralarında belirli bir bağlantı vardır. Her şeyden önce önbelleğe alma, hesaplama sonuçlarını hızlı bir şekilde hatırlamamıza yardımcı olabilir, böylece hesaplama sonuçlarının bellek kapasitesi önbelleğe alma yoluyla geliştirilebilir. Aynı hesaplama sonucunu yeniden kullanmamız gerektiğinde önbellek, sonucu hızlı bir şekilde hatırlamamıza ve her seferinde yeniden hesaplamayı önlememize yardımcı olabilir.
Ek olarak, RDD önbelleğe alma stratejisi aracılığıyla hesaplama sonuçlarını bellekte saklayabilir, böylece sık sık disk okuma ve yazma işlemlerini önleyerek çok fazla zaman ve kaynak tasarrufu sağlayabiliriz. Bu aynı zamanda hesaplama sonuçlarını istediğimiz zaman kullanabilmemiz için hafızada saklayan bir tür "hafıza" olarak da değerlendirilebilir.
Özetlemek gerekirse, RDD önbellekleme stratejisi ile bellek arasında gerçekten de belirli bir ilişki vardır. Önbelleğe alma yoluyla, hesaplama sonuçlarının bellek kapasitesini artırabilir ve ayrıca hesaplama sonuçlarını bellekte saklayabilir, böylece zamandan ve kaynaklardan tasarruf sağlayabilir ve program performansını artırabiliriz. Bu olumlu strateji, bilgi işlem kaynaklarından daha iyi yararlanmamıza, iş verimliliğini artırmamıza ve daha fazla hedefe ulaşmamıza yardımcı olabilir.
Hafızamızı geliştirmemiz gerektiği görülebilir. Cistanche hafızayı önemli ölçüde geliştirebilir çünkü Cistanche aynı zamanda asetilkolin ve büyüme faktörlerinin seviyesini artırmak gibi nörotransmitterlerin dengesini de düzenleyebilir. Bu maddeler hafıza ve öğrenme için çok önemlidir. Ayrıca et kan akışını iyileştirebilir ve oksijen dağıtımını destekleyebilir, bu da beynin yeterli beslenme ve enerji almasını sağlayarak beynin canlılığını ve dayanıklılığını artırır.

Belleği geliştirmek için ekleri bil'e tıklayın
Kapsamlı deneysel sonuçlarımız, önerilen optimizasyon tekniklerini kullanarak genel performansı %42'ye kadar artırabileceğimizi gösteriyor.
Anahtar Kelimeler:
Apache Kıvılcımı; bellek yönetimi; katı hal sürücüsü; bellek içi işleme çerçevesi; verim; PageRank; Geçişli kapatma; TeraSort; k-kümeleme anlamına gelir; Java Sanal Makinesi yığın yapılandırması; esnek dağıtılmış veri kümesi.
1. Giriş
Büyük veri endüstrisi hızla geliştikçe, Hadoop'un [2] MapReduce [1] gibi "Büyük Veriyi" etkili bir şekilde depolayıp işleyebilen dağıtılmış işleme çerçeveleri oluşturmak için çeşitli araştırma çabaları olmuştur.
Bununla birlikte, Hadoop'un normal iş mili disklerine (HDD) dayalı performansı, Hadoop dağıtılmış dosya sisteminin (HDFS) [3] okuma/yazma işlemleri nedeniyle, özellikle de çok sayıda yinelemeli işin olabileceği makine öğrenimi iş yükleri için düşebilir ve ara veriler. Bu sorunu çözmek için, ara verileri etkili bir şekilde belleğe önbelleğe alabilen ve böylece küme hesaplama platformunun genel performansı önemli ölçüde artırabilen Spark [4] çerçevesi tanıtıldı.
Bununla birlikte, Spark'ın performans davranışlarını analiz eden kapsamlı bir çalışmaya göre [5], Spark bazı başıboş görevler nedeniyle hala performans düşüşü sorunları yaşayabiliyor. Spark'ın tüm iş tamamlanma süresini etkileyen görevlerin analizi sonucunda çöp toplama, karışık yazma ve karışık okuma, Spark sisteminin performansını olumsuz etkileyebilecek ana faktörler olarak belirlendi.
Ne yazık ki, yukarıda bahsedilen bu görevlerin Spark'ta görev işlemeyi etkilemesinin ana nedenlerinin ve potansiyel çözümlerin ayrıntılı bir analizi henüz tam olarak araştırılmamıştır.
Bu yazıda öncelikle çöp toplama, karışık yazma ve karışık okumanın Spark'ta görev işlemeyi neden etkilediğini açıklayabilecek belirli faktörleri analiz edeceğiz ve Spark kümesi üzerinde kapsamlı deneyler yoluyla ilgili durumları ve olası çözümleri sunacağız.
Spesifik olarak, Spark'ın "tüm iş tamamlama süresinin" bozulmasına neden olan faktörleri analiz etmek için PageRank [6], geçişli kapatma [7], TeraSort [8] ve k-ortalama kümelemesi [9] ile çeşitli deneyler gerçekleştirdik. iş yükleri. Kapsamlı deneysel sonuçlarımıza dayanarak Spark sisteminde aşağıdaki gibi özetlenebilecek potansiyel performans bozulma faktörleri bulduk:
1. Java çöp toplama işlemindeki performans düşüşü: Spark, Java Sanal Makineleri (JVM) üzerinde çalıştığından, Java çöp toplama işlemleri özellikle Spark yürütücü belleğinin (JVM yığın boyutunun) yetersiz olduğu durumlarda meydana gelebilir.
2. Karıştırma yayılımında performans düşüşü: Karıştırma yazma işlenirken, Spark yürütücü belleğinin (JVM yığını) karıştırma belleği yetersizse, Spark karıştırma verilerini diske (HDD) dökecektir. Bu durumda Spark'ın yazmak için verileri serileştirmesi ve verileri diskten okumak için seri durumdan çıkarması gerekir. Serileştirme ve seri durumdan çıkarma işlemleri için bir CPU kaynağı gerekli olduğundan, bu, görevlerin genel olarak işlenmesini yavaşlatabilir.
3. Karışık okuma engellenen süresinde performans düşüşü: Deneysel sonuçlardan göreceğimiz gibi, geçişli kapatma iş yükünde olduğu gibi yinelemeli aşamalarda görev sayısı artmaya devam ederse, zamanlama ek yükü ve Java çöp toplama işlemlerinin eksikliği nedeniyle ortaya çıkabilir. Spark yürütücü belleği. Bu, karışık okuma görevlerinin engellenmesine ve dolayısıyla performansın düşmesine neden olabilir.
Bu makalenin ana katkısı, kümenin fiziksel bellek sınırlarını aşmak için SSD'leri kullanarak genel sistem performansını iyileştirebilecek etkili Spark küme yapılandırma stratejileri önermemizdir. Ticari sunuculardan oluşan tipik bir küme bilişim ortamında, büyük miktarda ana belleğin kurulması zor olacaktır.
Bu nedenle, dağıtılmış bellek içi bilgi işlem sisteminde yetersiz ana bellek miktarları nedeniyle ortaya çıkabilecek performans düşüşü sorunlarını, SSD'lerden etkin bir şekilde yararlanarak ele alıyoruz. Optimizasyon stratejimiz aşağıdaki gibi iki yönlüdür.
Öncelikle "Spark JVM Heap Configuration"da shuffle ve depolama alanlarının kapasite kesir oranlarını değiştiriyoruz. Farklı iş yüklerinin deneysel sonuçlarına göre, iş yükünün bellek kullanım düzenine bağlı olarak performans farklılıkları gözlemliyoruz.
İkinci olarak, önbellek yok, yalnızca bellek önbelleği, yalnızca disk önbelleği ve SSD destekli bellek önbelleği gibi farklı "RDD Önbellekleme Politikaları" uyguluyoruz. Çoğu durumda, SSD destekli bellek önbelleğe alma politikası, RDD'lerin tümü gerçek ana belleğe tam olarak sığamadığı sürece en iyi performansı gösterir.
Çeşitli konfigürasyonlar ve farklı iş yükleri altında ampirik bir performans değerlendirmesi gerçekleştirdik. Deneysel sonuçlarımız, Spark'ın JVM yığınındaki depolama ve karıştırma alanlarının miktarını, hedef iş yüklerinin bellek kullanımına dayalı olarak dikkatli bir şekilde tahsis ederek ve optimum bir RDD önbelleğe alma politikası uygulayarak, toplam yürütme süresini %42'ye kadar önemli ölçüde azaltabileceğimizi göstermektedir.
Bu makalenin geri kalanı aşağıdaki şekilde yapılandırılmıştır. Bölüm 2'de Spark sisteminin arka planını ve ilgili çalışmaları kısaca açıklıyoruz ve Bölüm 3'te Spark'ın kullanımı ve Spark kümesinin yapılandırması sunuluyor ve genel performansı iyileştirmek için optimizasyon metodolojimiz ayrıntılarıyla anlatılıyor. Bölüm 4'te deneysel sonuçlarımızı ve performans düşüşüne neden olan faktörlerin analizini ve bunlarla ilgili çözümleri sunuyoruz. Bölüm 5'te değerlendirme sonuçları tartışılıyor ve bulgularımız özetleniyor; Bölüm 6'da ise gelecekteki çalışmalar sonuçlandırılıyor ve tartışılıyor.
2. Arka Plan ve İlgili Araştırma Çalışması
2.1. Arka plan
Apache Hadoop, verileri ve hesaplamaları birçok düğüme etkili bir şekilde dağıtıp yöneterek fiili standart "büyük veri" depolama ve işleme platformu olmuştur. Ancak Hadoop, makine öğrenimi gibi bazı uygulamalarda, özellikle de birkaç yinelemeli aşamadan ve nispeten büyük miktarda ara veriden oluşan uygulamalarda rekabetçi performans sağlayamamaktadır. Bunun nedeni, her yinelemeli aşamada Hadoop'un MapReduce tarafından oluşturulan bir HDFS'den/HDFS'ye veri okuması ve yazması gerekmesidir.
Apache Spark, yinelemeli uygulamaların her aşamasında verimli bir şekilde kullanılabilen önbellekleme gibi ana bellekteki herhangi bir ara/son veriyi etkili bir şekilde yönetebilen esnek dağıtılmış veri kümelerinden (RDD) [10] yararlanır. RDD değişmez olduğundan Spark, RDD oluşturmalarının geçmişini takip edebilen ve arıza kurtarma için kullanılabilecek bir köken konsepti sunar.
Bu konsept sayesinde Spark, Hadoop'a kıyasla diskteki G/Ç işlemlerinin sayısını azaltabilir. Bu dağıtılmış bellek içi bilgi işlem yeteneği nedeniyle Spark, çok çeşitli veri analizi uygulamaları için genellikle Hadoop'tan daha iyi performans gösterir.
Bununla birlikte, Spark'ın verilerini depolamak için ana bellek için kullanılan RAM, bayt başına birim fiyat açısından nispeten pahalıdır; bu nedenle, Spark kümesinde çeşitli iş yüklerini desteklemek için yeterince büyük miktarda RAM oluşturmak çok zor olacaktır.

Bu nedenle sınırlı RAM kapasitesi Spark işlemenin genel hızını kısıtlayabilir. Spark, uygulama işlemi sırasında sınırlı alan nedeniyle RDD'yi RAM'e önbelleğe alamazsa, Spark, Hadoop'un yaklaşımına benzer şekilde her aşamada RAM'e sığamayan eksik RDD'leri yeniden oluşturmak zorunda kalır. Ayrıca Spark işi JVM üzerinde çalışan bir Java işlemi olduğundan, kullanılabilir bellek miktarı sınırlı olduğunda GC (çöp toplama) gerçekleşir. RDD genellikle JVM'nin eski alanında önbelleğe alındığından, büyük bir GC meydana geldiğinde, tüm iş işleme performansını önemli ölçüde etkileyebilir.
Ayrıca, bellek eksikliği, karıştırma sırasında oluşturulan ara verilerin bellekten diske yayılması işlemi olan "Karışık Dökülme"ye neden olabilir. karışık dökülme birçok disk G/Ç işlemini ve CPU yükünü içerir. Sonuç olarak, tüm RDD'leri önbelleğe almak ve karıştırma için belleği güvence altına almak için yeni bir çözüm düşünülmelidir.
2.2. Alakalı iş
Literatürde Spark platformunun performans iyileştirmeleri ile ilgili aşağıdaki birçok çalışma bulunmaktadır. Tablo 1 konularına göre ilgili çalışmaları özetlemektedir.

• Spark shuffle performansının iyileştirilmesi:
Spark'ta karıştırma performansının optimizasyonu [11], bir Spark işini çalıştırmadaki darboğazı analiz eder ve iki alternatif sunar; sütunlu sıkıştırma ve karıştırma dosyası birleştirme. Bellek içi arabellekteki tüm verilerin dökülmesi işletim sistemi için bir yük olduğundan, çözüm ilk etapta daha az sayıda, daha büyük dosyalar yazmaktır.
Nicolae ve ark. toplu veri karıştırma için yeni bir uyarlanabilir I/O yöntemi sundu [12]. Kaynakların optimum seçiminde (yani karıştırma bloklarının nereden getirileceği) işbirliği yapmak için indirgeyicileri koordine ederken, karıştırma bloklarının birikimini her bir redüktör görevi için bireysel işlem hızına uyarlarlar. Bu şekilde yükleri iyi dengelerler ve arabellek için bellek kullanımını azaltarak başıboşlukları önlerler.
Riffle [13] büyük ölçekli veri analitiği için en verimli karıştırma hizmetlerinden biridir. Riffle, parçalanmış ara karıştırma dosyalarını daha büyük blok dosyalarında birleştirir ve böylece küçük, rastgele disk G/Ç isteklerini büyük, sıralı olanlara dönüştürür. Riffle ayrıca birleştirme işlemi yükünü en aza indirmek için hem birleştirilmiş hem de birleştirilmemiş blok dosyalarını karıştırır. Pu ve ark. iyi performans elde etmek için ucuz ama yavaş depolamayı hızlı ama pahalı depolamayla birleştirerek uygun maliyetli bir karıştırma hizmeti önermektedir [14]. Sistemlerinde TPC-DS, CloudSort ve Big Data Benchmark'ı çalıştırıyorlar ve kaynak kullanımında %59'a kadar azalma gösteriyorlar.
Hepsi ağ aktarımını koordine ederek veya disk G/Ç'yi azaltarak karıştırma performansının ve maliyet etkinliğinin iyileştirilmesini vurguluyor. Ancak çalışmamızda JVM yığınını, karıştırma aşamasında ve iş tamamlama süresinde bir darboğaz olan shuffle dökülmeyi azaltacak şekilde yapılandırdık.
• Spark için performans analizi, modelleme ve optimizasyon:
[15]'in yazarları, depolama G/Ç'sinin bellek içi küme hesaplama çerçevelerinde ağır bir rol oynadığını göstermekte ve Spark programlarının performansı üzerinden akıl yürütmek için G/Ç bilinçli bir analitik model önermektedir. Önerilen model, hesaplama/karıştırma ağırlıklı algoritmalar olan yinelemeli algoritmaların çalışma zamanı davranışını analitik olarak açıklayabilir ve tahmin edebilir. Ayrıca önerilen modeli Google Cloud'da maliyet optimizasyonuna da uyguluyorlar.
Marcu ve ark. temsili iş yüklerini kullanarak karşılaştırmalı olarak deneysel sonuçlarına dayanarak Spark ve Flink'in performans analizini gösterir [16]. Performans üzerinde büyük etkisi olan en önemli dört parametreden oluşan bir diziyi tanımlarlar. Görev paralelliği, karıştırma aşamasındaki ağ davranışı, bellek ve veri serileştirmesi seçtikleri en önemli parametrelerdir. Öte yandan çalışmamızda, hedef iş yüklerinin bellek kullanım kalıplarına göre Spark'ın JVM yığınındaki depolama türünü uygun şekilde seçerek ve depolama miktarını ve karıştırma alanlarını tahsis ederek performans iyileştirme metodolojisine odaklanıyoruz.
• Spark için Parametre Ayarlama:
Tüm yapılandırma parametrelerini ayarlayarak Spark'ın performansını artırmak için bazı araştırma denemeleri yapılmıştır. Petridis ve ark. Spark'ın parametre ayarlama deneyimlerini deneme yanılma yoluyla gösterirler [17]. Uygulama örneğine özel 12 önemli parametre seçiyorlar ve bunların etkilerini Petaflop süper bilgisayarındaki gerçek uygulamaları kullanarak değerlendiriyorlar.
Benzer şekilde, Gounaris ve Torres [18] karıştırma, sıkıştırma ve serileştirmeye ilişkin en önemli ayarlanabilir Spark parametrelerinin uygulama performansı üzerindeki etkisini ampirik bir şekilde analiz etmektedir. Barselona Süper Bilgi İşlem Merkezi'nin Spark destekli Marenostrum III (MN3) bilgi işlem altyapısı üzerinde kapsamlı deneysel sonuçlar sağlıyorlar.
Ampirik ayarlama yönteminin aksine, Yu ve ark. bellek içi bilgi işlem platformu için bir otomatik ayarlama şeması önermektedir [19]. Performans modelinin parametreleri olarak girdi veri kümesinin boyutunu ve 41 yapılandırma metriğini alırlar. Birkaç bireysel alt modeli hiyerarşik olarak birleştirmek için hiyerarşik modellemeyi (HM) kullanırlar ve en uygun konfigürasyonu aramak için genetik algoritmayı (GA) kullanırlar. Yukarıdaki araştırma çalışmaları, bizim çalışmamıza benzer şekilde Spark'ın parametrelerini ayarlayarak optimum performansa ulaşmaya çalışsa da, makalemiz bunlardan farklıdır çünkü Spark'ın fiziksel bellek sınırlamasını etkili bir şekilde genişletmek için SSD destekli bellek önbellek politikası kullanıyoruz. küme.

• MapReduce tabanlı veri işleme için bellek optimizasyonu:
[20]'nin yazarları, bellek verimliliğinin Hadoop uyumlu Flame-MR çerçevesinin performansı üzerindeki etkisini derinlemesine analiz etmektedir. Nesne tahsislerinin ve tahsislerin kaldırılmasının sayısını azaltmak, GC genel giderlerini ve genel yürütme süresini azaltmak için çeşitli bellek optimizasyon teknikleri sunarlar. Çalışmamızda bellek içi sistemin performansını artırmak için SSD'lerden yararlanıyoruz.
• Spark'ta JVM ve çöp toplama yükünün azaltılması:
JVM ve GC, özellikle iş yükünün bellek sınırlamalarından muzdarip olduğu durumlarda Spark platformundaki en büyük yüklerden birini oluşturur. Aslan ve ark. JVM ısınma yükünün HDFS, Hive ve Spark platformlarındaki en büyük darboğazlardan biri olduğuna dikkat çekiyor [21]. Zaten sıcak olan JVM havuzunu yeniden kullanarak ısınma yükünü amorti eden yeni bir JVM öneriyorlar.
Maas ve ark. GC'nin neden olduğu duraklamaların Spark üzerinde önemli bir etkiye sahip olabileceğini buldular [22]. Böylece, birden fazla düğümde GC'nin neden olduğu duraklamaları koordine etmek için çalışma zamanı hizmetlerini toplu olarak yöneten dağıtılmış bir dil çalışma zamanı olan bütünsel bir çalışma zamanı sistemi öneriyorlar.
Her ne kadar her iki makale de genel durumlar için Spark'taki JVM ve GC ile ilgili sorunları ele alsa da, makalemiz iş yüklerinin bellek sınırlamalarından muzdarip olduğunu varsaymaktadır.
• Spark için önbellek yönetimi ilkesi optimizasyonu:
[23]'ün yazarları, hem aşama içi hem de aşamalar arası bağımlılığı göz önünde bulunduran, bağımlılığa duyarlı bir önbellek yönetimi politikası olan en az kompozisyon referans sayısını (LCRC) önermektedir. LCRC, aşamalar arası erişilen bu blokları bir sonraki kullanımdan önce belleğe yeniden yazabilir. Çalışmamızda bellek içi sistemin performansını artırmak için önbellek politikasını geliştirmek yerine SSD'lerden yararlanıyoruz.

3. Spark Platformu için Optimizasyon Teknikleri
Bu bölümde Spark platformunun genel performansını iyileştirebilecek küme ortamımızı ve ilgili optimizasyon tekniklerini sunuyoruz.
For more information:195477648nn@gmail.com






