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 en iyi performans için Apache Spark kümenizin yapılandırmasını iyileştirme adımları anlatılmaktadır.
Genel Bakış
Birleştirme veya Karıştırmada yavaş işleriniz varsa, bunun nedeni büyük olasılıkla veri dengesizliğidir. Veri dengesizliği, iş verilerinizde asimetridir. Örneğin, bir harita işi 20 saniye sürebilir. Ancak verilerin birleştirildiği veya karıştırıldığı bir işi çalıştırmak saatler sürer. Veri dengesizliklerini düzeltmek için anahtarın tamamını tuzlamalısınız veya anahtarların yalnızca bir alt kümesi için yalıtılmış bir tuz kullanmalısınız. Yalıtılmış bir tuz kullanıyorsanız, harita birleştirmelerinde tuzlanmış anahtar alt kümenizi yalıtmak için daha fazla filtreleme yapmanız gerekir. Bir diğer seçenek, bir kova sütunu ekleyip önce kovalar halinde ön toplama yapmaktır.
Yavaş birleştirmelere neden olan bir diğer faktör de birleştirme türü olabilir. Spark varsayılan olarak birleştirme türünü kullanır SortMerge . Bu birleştirme türü büyük veri kümeleri için en uygun olanıdır. Ancak, verilerin birleştirmeden önce sol ve sağ kenarlarını sıralaması gerektiğinden, işlem açısından pahalıdır.
Birleştirme Broadcast , daha küçük veri kümeleri için veya birleştirmenin bir tarafının diğer taraftan çok daha küçük olması için uygundur. Bu tür bir birleşim, birleşimin bir tarafını tüm yürütücülere yayınlar ve bu nedenle, genel olarak yayınlar için daha fazla bellek kullanımı gerektirir.
ayarıyla spark.sql.autoBroadcastJoinThresholdyapılandırmanızdaki birleştirme türünü değiştirebilir veya DataFrame API'lerini (dataframe.join(broadcast(df2)) ) kullanarak birleştirme ipucu ayarlayabilirsiniz.
// Option 1
spark.conf.set("spark.sql.autoBroadcastJoinThreshold", 1*1024*1024*1024)
// Option 2
val df1 = spark.table("FactTableA")
val df2 = spark.table("dimMP")
df1.join(broadcast(df2), Seq("PK")).
createOrReplaceTempView("V_JOIN")
sql("SELECT col1, col2 FROM V_JOIN")
Kovalı tablolar kullanıyorsanız, o zaman üçüncü bir birleştirme türü olan Merge birleştirmesine sahip olursunuz. Doğru şekilde önceden bölümlenmiş ve önceden sıralanmış bir veri kümesi, SortMerge birleştirmesinden pahalı sıralama aşamasını atlar.
Birleştirmelerin sırası, özellikle daha karmaşık sorgularda önemlidir. En seçmeli birleşimlerle başlayın. Ayrıca, mümkün olduğunda toplamalardan sonra satır sayısını artıran birleşimleri taşıyın.
Kartezyen birleşimleri için paralelliği yönetmek için iç içe yapılar ekleyebilir, pencereleyebilir ve Spark İşinizde bir veya daha fazla adımı atlayabilirsiniz.
İş yürütmeyi iyileştirme
- Gerekirse önbelleğe alın, örneğin verileri iki kez kullanıyorsanız önbelleğe alın.
- Değişkenleri tüm yürütücülere yayınlar. Değişkenler yalnızca bir kez seri hale getirilerek daha hızlı aramalar elde edilir.
- Sürücüdeki iş parçacığı havuzunu kullanın, bu sayede birçok görev için daha hızlı işlem sağlanır.
Çalışan işlerinizi performans sorunları için düzenli olarak izleyin. Bazı sorunlarla ilgili daha fazla içgörüye ihtiyacınız varsa aşağıdaki performans profili oluşturma araçlarından birini göz önünde bulundurun:
- Intel PAL Aracı CPU, depolama ve ağ bant genişliği kullanımını izler.
- Oracle Java 8 Mission Control , Spark ve yürütücü kodunun profilini oluşturur.
Spark 2.x sorgu performansının anahtarı, tam aşamalı kod oluşturma işlemine bağlı olan Tungsten altyapısıdır. Bazı durumlarda, tam aşamalı kod oluşturma devre dışı bırakılabilir. Örneğin, toplama ifadesinde değiştirilemez bir tür (string) kullanıyorsanız, HashAggregate yerine SortAggregate görüntülenir. Örneğin, daha iyi performans için aşağıdakileri deneyin ve ardından kod oluşturmayı yeniden etkinleştirin:
MAX(AMOUNT) -> MAX(cast(AMOUNT as DOUBLE))
Sonraki adımlar
- Apache Spark için veri depolamayı iyileştirme
- Apache Spark için bellek kullanımını iyileştirme
- Apache Spark için küme yapılandırmasını iyileştirme