Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Azure HDInsight'ta verimli Apache Spark iş yürütmesi için veri depolamayı iyileştirme stratejileri ele alınmaktadır.
Genel Bakış
Spark csv, json, xml, parquet, orc ve avro gibi birçok biçimi destekler. Spark, dış veri kaynaklarıyla çok daha fazla biçimi destekleyecek şekilde genişletilebilir. Daha fazla bilgi için bkz . Apache Spark paketleri.
Performans için en iyi format, Spark 2.x'te varsayılan olan snappy sıkıştırmalı parquet biçimidir. Parquet verileri sütun biçiminde 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ır, Spark 1.3 ve 1.6 sırasıyla DataFrame'ler ve DataSet'ler 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ı nesne programlaması olmadığından DataSets kadar geliştirici dostu değildir.
-
Veri Kümeleri
- 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.
- Alan nesnesi programlama ve derleme zamanı denetimleri sağlayarak geliştirici dostudur.
- Serileştirme/seriden çıkarma ek yükü ekler.
- Yüksek GC yükü.
- Tüm aşamalı kod oluşturmayı bozar.
-
RDD'ler
- Yeni bir özel RDD oluşturma durumunda olmadığınız sürece RDD kullanmanız gerekmez.
- Catalyst üzerinden sorgu iyileştirmesi yapılmamaktadır.
- 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'yı veya Azure Data Lake Storage'ı seçebilirsiniz. Her iki seçenek de 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 | Evet | Geçici küme |
| Azure Blob Depolama (güvenli) | wasbs://url/ | Standart | Evet | Geçici küme |
| Azure Data Lake Storage Gen 2 | abfs://url/ | Hızlı | Evet | Geçici küme |
| ** Azure Data Lake Storage Birinci Nesil | adl://url/ | Hızlı | Evet | Geçici küme |
| Yerel HDFS | hdfs://url/ | En Hızlı | Hayı | 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, , .persist()ve .cache()gibi CACHE TABLEfarklı 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ışmıyor. 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 iyidir.
- Gelecekteki Spark sürümlerinde değişebilecek bölümleme ile çalışmaz.
Depolama düzeyinde önbelleğe alma (önerilir)
- IO Önbelleği özelliği kullanılarak HDInsight üzerinde uygulanabilir.
- Bellek içi önbellek ve SSD önbelleği kullanır.
Yerel HDFS (önerilen)
-
hdfs://myclusteryol. - SSD önbelleğe alma özelliğini kullanır.
- Kümeyi sildiğinizde önbelleğe alınan veriler kaybolur ve önbellek yeniden derlenmesi gerekir.
-
Veri serileştirmesini iyileştirme
Spark işleri dağıtılır, bu nedenle uygun veri serileştirme en iyi performans için önemlidir. Spark için iki serileştirme seçeneği vardır:
- Java serileştirme varsayılandır.
-
Kryoserileş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 Serileştirilebilir türleri desteklemez.
Gruplandırmayı kullan
Demetleme, veri bölümlemeye benzer. Ancak her kova yalnızca bir sütun değeri 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 sayıda) değer üzerinde bölümleme için iyi çalışır. Satırın bucket anahtarının hashlenmesiyle bir bucket belirlenir. Demetlenmiş tablolar, demetleme ve sıralama ile ilgili meta verileri depoladıkları için benzersiz iyileştirmeler sunar.
Bazı gelişmiş demet oluşturma özellikleri şunlardır:
- Kümeleme meta bilgilerini temel alan sorgu iyileştirmesi.
- İyileştirilmiş agregasyonlar.
- Optimizasyon yapılmış bağlantılar.
Bölümleme ve kümelemeyi aynı anda kullanabilirsiniz.
Sonraki adımlar
- Apache Spark için veri işlemeyi iyileştirme
- Apache Spark için bellek kullanımını iyileştirme
- Apache Spark için küme yapılandırmasını iyileştirme