Apache Spark için küme yapılandırma iyileştirmesi

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ış

Spark kümesi iş yükünüze bağlı olarak, varsayılan olmayan bir Spark yapılandırmasının daha iyileştirilmiş Spark işi yürütmeye neden olacağını belirleyebilirsiniz. Varsayılan olmayan küme yapılandırmalarını doğrulamak için örnek iş yükleriyle karşılaştırma testi yapın.

Ayarlayabildiğiniz bazı yaygın parametreler şunlardır:

Parametre Açıklama
--num-executors Uygun sayıda yürütücü ayarlar.
--yürütücü çekirdekleri Her yürütücü için çekirdek sayısını ayarlar. Diğer işlemler kullanılabilir belleğin bir kısmını tükettiğinden genellikle orta ölçekli yürütücüleriniz olmalıdır.
--yürütücü-bellek Yarn üzerindeki yığın boyutunu denetleyen her yürütücü için bellek boyutunu ayarlar. Yürütme ek yükü için biraz bellek bırakın.

Doğru yürütücü boyutunu seçin

Yürütücü yapılandırmanıza karar verirken Java çöp toplama (GC) ek yükünü göz önünde bulundurun.

  • Yürütücü boyutunu küçültmek için faktörler:

    1. GC ek yükünü < %10 korumak için yığın boyutunu 32 GB'ın altına düşürün.
    2. GC ek yükünü < %10 korumak için çekirdek sayısını azaltın.
  • Yürütücü boyutunu artırmaya yönelik faktörler:

    1. Yürütücüler arasındaki iletişim yükünü azaltın.
    2. Daha büyük kümelerde yürütücüler (N2) arasındaki açık bağlantı sayısını azaltın (>100 yürütücü).
    3. Yoğun bellek kullanan görevlere uyum sağlamak için yığın boyutunu artırın.
    4. İsteğe bağlı: Yürütücü başına bellek yükünü azaltın.
    5. İsteğe bağlı: CPU'ya fazla abone olarak kullanımı ve eşzamanlılığı artırın.

Yürütücü boyutunu seçerken genel bir kural olarak:

  1. Yürütücü başına 30 GB ile başlayın ve kullanılabilir makine çekirdeklerini dağıtabilirsiniz.
  2. Daha büyük kümeler için yürütücü çekirdeği sayısını artırın (> 100 yürütücü).
  3. Boyutu hem deneme çalıştırmalarına hem de GC ek yükü gibi önceki faktörlere göre değiştirin.

Eşzamanlı sorgular çalıştırırken şunları göz önünde bulundurun:

  1. Yürütücü ve tüm makine çekirdekleri başına 30 GB ile başlayın.
  2. CPU'ya fazla abone olarak birden çok paralel Spark uygulaması oluşturun (yaklaşık %30 gecikme süresi iyileştirmesi).
  3. Sorguları paralel uygulamalar arasında dağıtma.
  4. Boyutu hem deneme çalıştırmalarına hem de GC ek yükü gibi önceki faktörlere göre değiştirin.

Yürütücüleri yapılandırmak için Ambari kullanma hakkında daha fazla bilgi için bkz. Apache Spark ayarları - Spark yürütücüleri.

Zaman çizelgesi görünümüne bakarak aykırı değerler veya diğer performans sorunları için sorgu performansını izleyin. Ayrıca SQL grafı, iş istatistikleri vb. YARN ve Spark Geçmişi sunucusunu kullanarak Spark işlerinde hata ayıklama hakkında bilgi için bkz. Azure HDInsight üzerinde çalışan Apache Spark işlerinde hata ayıklama. YARN Zaman Çizelgesi Sunucusu'nu kullanma hakkında ipuçları için bkz. Apache Hadoop YARN uygulama günlüklerine erişme.

Bazı yürütücülerde veya düğümlerde görevler daha yavaş

Bazen yürütücülerden biri veya birkaçı diğerlerinden daha yavaştır ve görevlerin yürütülmesi çok daha uzun sürer. Bu yavaşlık genellikle daha büyük kümelerde (> 30 düğüm) gerçekleşir. Bu durumda, zamanlayıcının yavaş görevleri telafi edebilmesi için işi daha fazla sayıda görev olarak bölün. Örneğin, uygulamadaki yürütücü çekirdeği sayısının en az iki katı kadar görevi vardır. Ayrıca ile conf: spark.speculation = truegörevlerin tahmini yürütülmesini de etkinleştirebilirsiniz.

Sonraki adımlar