Her Veri Bilimcisinin Bilmesi Gereken 5 Spark Optimizasyon Tekniği
Yayınlanan: 2020-06-12Küçük bir girişim veya büyük bir şirket olsun, veriler her yerdedir. Bu veriler, müşteri günlükleri, ofis faturaları, maliyet tabloları ve çalışan veritabanları gibi çeşitli kaynaklardan toplanır. Şirketler, kalıpları ve eğilimleri belirlemek için bu veri parçalarını toplar ve analiz eder. Bu modeller, işin geliştirilmesi için önemli kararlar almalarına yardımcı olur.
Ancak bu veri analizi ve sayı kırma sadece excel sayfaları ile mümkün değildir. İşte burada veri işleme yazılımı teknolojileri devreye giriyor. En hızlı ve yaygın olarak kullanılan veri işleme çerçevelerinden biri Apache Spark'tır. Kıvılcım optimizasyon teknikleri , performansını en iyi şekilde kullanmak için ayarlamak için kullanılır.
Teknikleri birazdan öğreneceğiz. Bu yazılım çerçevesinin temellerini ele alalım.
İçindekiler
Apache Spark nedir?
Apache Spark, şirketlerde büyük veri kümelerini işlemek için kullanılan, dünyaca ünlü bir açık kaynaklı küme hesaplama çerçevesidir . Bu devasa veri kümelerini işlemek ve bunları birden çok sistem arasında dağıtmak Apache Spark ile kolaydır. Programcıların ve geliştiricilerin hayatlarını kolaylaştıran basit API'ler sunar.
Spark, Python, R, Scala ve Java gibi programlama dilleri için yerel bağlamalar sağlar. Makine öğrenimini, grafik işlemeyi ve SQL veritabanlarını destekler . Bu şaşırtıcı faydaları nedeniyle Spark, bankalarda, teknoloji firmalarında, finans kuruluşlarında, telekomünikasyon departmanlarında ve devlet kurumlarında kullanılmaktadır. Apache Spark hakkında daha fazla bilgi edinmek için tanınmış üniversitelerden veri bilimi kurslarımıza göz atın.
Apache Spark'ın Mimarisi
Apache Spark'ın çalışma zamanı mimarisi aşağıdaki bileşenlerden oluşur:
Kıvılcım sürücüsü veya ana süreç
Bu, programları görevlere dönüştürür ve ardından bunları yürütücüler için programlar (bağımlı süreçler). Görev zamanlayıcı , bu görevleri yürütücülere dağıtır.
Küme Yöneticisi
Spark küme yöneticisi , yürütücüleri ve sürücüleri başlatmaktan sorumludur. Bir küme için kaynakları birkaç ana makinede zamanlar ve tahsis eder.
uygulayıcılar
Bağımlı süreçler olarak da adlandırılan yürütücüler, bir işin görevlerinin yürütüldüğü varlıklardır. Başlatıldıktan sonra Spark uygulamasının yaşam döngüsü sona erene kadar çalışırlar. Bir yürütücü başarısız olursa Spark işinin yürütülmesi durmaz.
Esnek Dağıtılmış Veri Kümeleri (RDD)
Bu, değişmez olan ve bir Spark kümesinin düğümleri üzerinde dağıtılan bir veri kümeleri koleksiyonudur. Özellikle, bir küme, Spark'ın kurulabileceği bir dağıtılmış sistemler topluluğudur. RDD'ler birden çok bölüme ayrılmıştır. Ve veri arızası durumunda veri sorunlarını çözebildikleri için esnek olarak adlandırılırlar.
Spark tarafından desteklenen RDD türleri şunlardır:
- Hadoop Dağıtılmış Dosya Sistemindeki dosyalardan oluşturulan Hadoop veri kümeleri
- Scala koleksiyonlarına dayalı olabilen paralelleştirilmiş koleksiyonlar
DAG (Yönlendirilmiş Asiklik Grafik)
Spark, Spark konsoluna bir kod girilir girilmez bir grafik oluşturur. Bir eylem (bir işlemi yürütmek için bir talimat) tetiklenirse, bu grafik DAGScheduler'a gönderilir .
Bu grafik, bir dizi veri eylemi olarak düşünülebilir. DAG köşeler ve kenarlardan oluşur. Köşeler bir RDD'yi temsil eder ve kenarlar o belirli RDD'de gerçekleştirilecek hesaplamaları temsil eder. Grafikte döngü veya döngü olmadığı için buna yönlendirilmiş grafik denir.
Spark Optimizasyon Teknikleri
Kaynakların doğru bir şekilde kullanılmasını ve işlerin hızlı bir şekilde yürütülmesini sağlamak için Spark'ın ayarlarını ve özelliklerini değiştirmek için Spark optimizasyon teknikleri kullanılır. Bütün bunlar sonuçta verilerin verimli bir şekilde işlenmesine yardımcı olur.
En popüler Spark optimizasyon teknikleri aşağıda listelenmiştir:
1. Veri Serileştirme
Burada, bir bellek içi nesne, bir dosyada saklanabilen veya bir ağ üzerinden gönderilebilen başka bir biçime dönüştürülür. Bu, dağıtılmış uygulamaların performansını artırır. Verileri seri hale getirmenin iki yolu şunlardır:
- Java serileştirme – ObjectOutputStream çerçevesi, nesneleri seri hale getirmek için kullanılır . Java.io.Externalizable, serileştirmenin performansını kontrol etmek için kullanılabilir. Bu süreç hafif kalıcılık sunar.
- Kyro serileştirme – Spark, Java serileştirmeden daha hızlı olan nesneleri serileştirmek için Kryo Serileştirme kitaplığını (v4) kullanır ve daha kompakt bir işlemdir. Performansı artırmak için sınıfların registerKryoClasses yöntemi kullanılarak kaydedilmesi gerekir.
2. Önbelleğe alma
Bu, verilere daha sık ihtiyaç duyulduğunda kullanılan verimli bir tekniktir. Cache() ve persist() bu teknikte kullanılan yöntemlerdir. Bu yöntemler, bir RDD, DataSet ve DataFrame'in hesaplamalarını depolamak için kullanılır. Ancak cache() onu bellekte saklar ve persist() onu kullanıcı tanımlı depolama düzeyinde saklar.

Bu yöntemler, tekrarlanan hesaplamalar kullanıldığından maliyetleri düşürmeye ve zamandan tasarruf etmeye yardımcı olabilir.
Okuyun: Apache PySpark'ta Veri Çerçevesi: Kapsamlı Eğitim
3. Veri Yapısı Ayarı
Spark'ı kullanırken, ek yük ekleyebilecek belirli Java özelliklerini değiştirerek bellek tüketimini azaltabiliriz. Bu, aşağıdaki şekillerde mümkündür:
- Anahtarlar için dizeler yerine numaralandırılmış nesneleri veya sayısal kimlikleri kullanın.
- Çok fazla nesne ve karmaşık iç içe yapılar kullanmaktan kaçının.
- Bellek boyutu 32 GB'den küçükse JVM bayrağını xx:+UseCompressedOops olarak ayarlayın.
4. Çöp toplama optimizasyonu
Çöp toplayıcıları optimize etmek için Spark uygulamalarını çalıştırmak için G1 ve GC kullanılmalıdır. G1 toplayıcı büyüyen yığınları yönetir. Uygulamaların beklenmeyen davranışlarını kontrol etmek için oluşturulan günlüklere göre GC ayarı gereklidir. Ancak bundan önce, programın mantığını ve kodunu değiştirmeniz ve optimize etmeniz gerekir.
G1GC, süreçler arasındaki duraklama sürelerini optimize ederek işlerin yürütme süresinin azaltılmasına yardımcı olur.
5. Bellek Yönetimi
Birleştirme, karıştırma, sıralama ve toplama gibi hesaplamaları depolamak için kullanılan belleğe yürütme belleği denir. Depolama belleği, kümelerde depolanan verileri önbelleğe almak ve işlemek için kullanılır. Her iki bellek de birleşik bir M bölgesi kullanır.
Yürütme belleği kullanımda olmadığında, depolama belleği alanı kullanabilir. Benzer şekilde, depolama belleği boştayken, yürütme belleği alanı kullanabilir. Bu, en verimli Spark optimizasyon tekniklerinden biridir .
Ayrıca Okuyun: Apache Spark'ın Oyunu Değiştiren 6 Özelliği
Çözüm
Çeşitli Spark optimizasyon tekniklerinden , bunların işlem süresini kısaltmaya ve verileri daha hızlı işlemeye nasıl yardımcı olduğunu anlayabiliriz. Geliştiriciler ve profesyoneller, bu teknikleri uygulamalara ve söz konusu veri miktarına göre uygular.
Spark optimizasyonu , veri bilimi hakkında bilgi edinmek istiyorsanız, IIIT-B & upGrad'ın çalışan profesyoneller için oluşturulan ve 10'dan fazla vaka çalışması ve proje, pratik uygulamalı atölye çalışmaları, endüstri ile mentorluk sunan Veri Biliminde Yönetici PG Programına göz atın. uzmanlar, sektör danışmanlarıyla bire bir, 400+ saat öğrenim ve en iyi firmalarla iş yardımı.
Spark Optimizasyon teknikleri nelerdir?
Apache Spark, kuruluşların verileri hızlı bir şekilde işlemesini ve karmaşık veri sorunlarını kolayca çözmesini kolaylaştırır. Herhangi bir programın geliştirilmesi sırasında performansına dikkat etmenin çok önemli olduğu açıktır. Spark optimizasyon teknikleri, bellek içi veri hesaplamalarına yardımcı olur. Bu hesaplamaları engelleyebilecek tek şey bellek, CPU veya başka bir kaynaktır.
Her kıvılcım optimizasyon tekniği farklı bir amaç için kullanılır ve belirli belirli eylemleri gerçekleştirir. Yaygın olarak kullanılan kıvılcım optimizasyon tekniklerinden bazıları şunlardır:
1. Serileştirme
2. API seçimi
3. Gelişmiş değişken
4. Önbelleğe alın ve kalıcı olun
5. ByKey işlemi
6. Dosya formatı seçimi
7. Çöp toplama ayarı
8. Paralellik düzeyi
Spark kullanmayı ne zaman düşünmemelisiniz?
Apache Spark'ın birçok kullanım durumu vardır, ancak amacı yerine getirmek için diğer büyük veri motorlarına ihtiyaç duyduğunuz belirli özel ihtiyaçlar vardır. Bu gibi durumlarda Spark ile gitmek yerine başka bir teknoloji kullanılması tavsiye edilir. Spark'ı kullanmayı düşünmemeniz gereken kullanım durumları aşağıdadır:
1. Düşük bilgi işlem kapasitesi – Apache Spark üzerindeki varsayılan işleme, küme belleğinde gerçekleşir. Sanal makinelerinizin veya kümenizin bilgi işlem kapasitesi azsa, Apache Hadoop gibi diğer alternatiflere gitmelisiniz.
2. Yayınla-abone ol modelinde veri alımı – Bu durumda, milyonlarca verinin kısa sürede taşındığı birden çok hedefin yanı sıra birden çok kaynak vardır. Burada Spark kullanmamalısınız ve bunun yerine Apache Kafka kullanmalısınız.
Pandalar Apache Spark'tan daha mı hızlı?
Hem Pandas DataFrame'in hem de Spark DataFrame'in hesaplama hızını karşılaştırdığınızda, Pandas DataFrame'in performansının küçük veri kümeleri için marjinal olarak daha iyi olduğunu fark edeceksiniz. Öte yandan, veri boyutu artarsa, Spark DataFrame'in Pandas DataFrame'den daha iyi performans gösterecek kadar yetenekli olduğu bulunur. Bu nedenle, veri miktarına çok bağlı olacaktır.