Apache Spark için veri depolama iyileştirmesi

Bu makalede, Azure HDInsight'ta verimli Apache Spark iş yürütmesi için veri depolamayı iyileştirme stratejileri açıklanmaktadır.

Genel Bakış

Spark csv, json, xml, parquet, orc ve avro gibi birçok biçimi destekler. Spark, dış veri kaynaklarıyla daha birçok biçimi destekleyecek şekilde genişletilebilir. Daha fazla bilgi için bkz. Apache Spark paketleri.

Performans için en iyi biçim, Spark 2.x'te varsayılan olan uydurma sıkıştırmalı parkedir. Parquet verileri sütunlu biçimde depolar ve Spark'ta yüksek oranda iyileştirilmiştir.

Veri soyutlama seçme

Önceki Spark sürümlerinde verileri soyutlama amacıyla RDD'ler kullanılırken, Spark 1.3 ve 1.6 sırasıyla DataFrames ve DataSets'i kullanıma sunulmuştur. Aşağıdaki göreli değerleri göz önünde bulundurun:

  • Veri Çerçeveleri
    • Çoğu durumda en iyi seçim.
    • Catalyst aracılığıyla sorgu iyileştirmesi sağlar.
    • Tam aşamalı kod oluşturma.
    • Doğrudan bellek erişimi.
    • Düşük çöp toplama (GC) yükü.
    • Derleme zamanı denetimleri veya etki alanı nesnesi programlaması olmadığından DataSets kadar geliştirici dostu değildir.
  • Dataset
    • Performans etkisinin kabul edilebilir olduğu karmaşık ETL işlem hatlarında iyidir.
    • Performans etkisinin önemli ölçüde olabileceği toplamalarda iyi değildir.
    • Catalyst aracılığıyla sorgu iyileştirmesi sağlar.
    • Etki alanı nesnesi programlama ve derleme zamanı denetimleri sağlayarak geliştirici dostudur.
    • Serileştirme/seri durumdan çıkarma ek yükü ekler.
    • Yüksek GC yükü.
    • Tüm aşama kod oluşturmayı bozar.
  • RDD'ler
    • Yeni bir özel RDD oluşturmanız gerekmediği sürece RDD kullanmanız gerekmez.
    • Catalyst aracılığıyla sorgu iyileştirmesi yok.
    • Tam aşamalı kod oluşturma yok.
    • Yüksek GC yükü.
    • Spark 1.x eski API'lerini kullanmalıdır.

Varsayılan depolamayı seçin

Yeni bir Spark kümesi oluşturduğunuzda, kümenizin varsayılan depolama alanı olarak Azure Blob Depolama veya Azure Data Lake Storage seçebilirsiniz. Her iki seçenek de size geçici kümeler için uzun vadeli depolama avantajı sağlar. Bu nedenle kümenizi sildiğinizde verileriniz otomatik olarak silinmez. Geçici bir kümeyi yeniden oluşturabilir ve verilerinize erişmeye devam edebilirsiniz.

Mağaza Türü Dosya Sistemi Hız Geçici Kullanım Örnekleri
Azure Blob Depolama wasb://url/ Standart Yes Geçici küme
Azure Blob Depolama (güvenli) wasbs://url/ Standart Yes Geçici küme
Azure Data Lake Storage 2. Nesil abfs://url/ Hızlı Yes Geçici küme
Azure Data Lake Storage 1. Nesil adl://url/ Hızlı Yes Geçici küme
Yerel HDFS hdfs://url/ Hızlı Hayır Etkileşimli 7/24 küme

Depolama seçeneklerinin tam açıklaması için bkz. Azure HDInsight kümeleriyle kullanılacak depolama seçeneklerini karşılaştırma.

Önbelleği kullanma

Spark, , .cache()ve CACHE TABLEgibi .persist()farklı yöntemlerle kullanılabilen kendi yerel önbelleğe alma mekanizmalarını sağlar. Bu yerel önbelleğe alma, küçük veri kümelerinde ve ara sonuçları önbelleğe almanız gereken ETL işlem hatlarında etkilidir. Ancak, önbelleğe alınmış bir tablo bölümleme verilerini tutmadığından Spark yerel önbelleğe alma şu anda bölümlemeyle iyi çalışmaz. Depolama katmanı önbelleğe alma daha genel ve güvenilir bir önbelleğe alma tekniğidir.

  • Yerel Spark önbelleğe alma (önerilmez)

    • Küçük veri kümeleri için uygundur.
    • Bölümleme ile çalışmaz, bu durum gelecekteki Spark sürümlerinde değişebilir.
  • Depolama düzeyinde önbelleğe alma (önerilir)

    • GÇ Önbelleği özelliği kullanılarak HDInsight'ta uygulanabilir.
    • Bellek içi ve SSD önbelleğe alma kullanır.
  • Yerel HDFS (önerilir)

    • hdfs://mycluster Yolu.
    • SSD önbelleğe almayı kullanır.
    • Kümeyi sildiğinizde önbelleğe alınan veriler kaybolur ve önbellek yeniden oluşturulması gerekir.

Veri serileştirmesini iyileştirme

Spark işleri dağıtılır, bu nedenle en iyi performans için uygun veri serileştirmesi önemlidir. Spark için iki serileştirme seçeneği vardır:

  • Java serileştirme varsayılandır.
  • Kryo serileştirme daha yeni bir biçimdir ve Java'dan daha hızlı ve daha kısa serileştirmeye neden olabilir. Kryo , sınıfları programınıza kaydetmenizi gerektirir ve henüz tüm Seri Hale Getirilebilir türleri desteklemez.

Gruplandırmayı kullanma

Demetleme, veri bölümlemeye benzer. Ancak her demet, yalnızca bir değer yerine bir dizi sütun değerini barındırabilir. Bu yöntem, ürün tanımlayıcıları gibi büyük (milyonlarca veya daha fazla) değer sayısına göre bölümleme için iyi sonuç verir. Demet, satırın demet anahtarı karma olarak belirlenir. Demetlenmiş tablolar, demetleme ve sıralamayla ilgili meta verileri depoladıkları için benzersiz iyileştirmeler sunar.

Bazı gelişmiş demet oluşturma özellikleri şunlardır:

  • Demet oluşturma meta bilgilerini temel alan sorgu iyileştirmesi.
  • İyileştirilmiş toplamalar.
  • İyileştirilmiş birleştirmeler.

Bölümleme ve demetleme özelliğini aynı anda kullanabilirsiniz.

Sonraki adımlar