HDInsight'ta Apache Spark uygulamalarını iyileştirme

Bu makalede, Azure HDInsight'ta Apache Spark uygulamalarını iyileştirme stratejilerine genel bir bakış sağlanır.

Genel Bakış

Yaygın senaryoların altında karşılaşabilirsiniz

  • Aynı spark işi aynı HDInsight kümesinde öncekinden daha yavaş
  • Spark işi HDInsight kümesinde şirket içi veya diğer üçüncü taraf hizmet sağlayıcısına göre daha yavaş
  • Spark işi bir HDI kümesinde başka bir HDI kümesine göre daha yavaş

Apache Spark işlerinizin performansı birden çok faktöre bağlıdır. Bu performans faktörleri şunlardır:

  • Verilerinizin depolanma şekli
  • Küme nasıl yapılandırılır?
  • Verileri işlerken kullanılan işlemler.
  • İyi durumda olmayan yarn hizmeti
  • Hatalı boyutlandırılmış yürütücüler ve OutOfMemoryError nedeniyle bellek kısıtlamaları
  • Çok fazla görev veya çok az görev
  • Veri dengesizliği birkaç ağır görev veya yavaş görevlere neden oldu
  • Hatalı düğümlerde görevler daha yavaş

1. Adım: Yarn hizmetinizin iyi durumda olup olmadığını denetleyin

  1. Ambari kullanıcı arabirimine gidin:
  • ResourceManager veya NodeManager uyarılarının olup olmadığını denetleyin
  • YARN > ÖZETİnde ResourceManager ve NodeManager durumunu denetleyin: Tüm NodeManager Başlatıldı ve Yalnızca Active ResourceManager Başlatıldı içinde olmalıdır
  1. Yarn kullanıcı arabiriminin erişilebilir olup olmadığını denetleyin https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster

  2. ResourceManager'da herhangi bir özel durum veya hatanın oturum açıp açmadiğini denetleyin /var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log

Yarn Ile İlgili Yaygın Sorunlar bölümünde daha fazla bilgi bulabilirsiniz

2. Adım: Yeni uygulama kaynaklarınızı kullanılabilir yarn kaynaklarıyla karşılaştırma

  1. Ambari UI > YARN > ÖZETİ'ne gidin, ServiceMetrics'te KÜME BELLİSİ'ne bakın

  2. Yarn kuyruk ölçümlerini ayrıntılı olarak denetleyin:

  • Yarn Kullanıcı Arabirimi'ne gidin, Yarn scheduler ölçümlerini gözden geçirin https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster/scheduler
  • Alternatif olarak Yarn Rest API aracılığıyla yarn scheduler ölçümlerini de kontrol edebilirsiniz. Örneğin, curl -u "xxxx" -sS -G "https://YOURCLUSTERNAME.azurehdinsight.net/ws/v1/cluster/scheduler". ESP için etki alanı yöneticisi kullanıcısını kullanmanız gerekir.
  1. Yeni uygulamanız için toplam kaynakları hesaplama
  • Tüm yürütücü kaynakları: spark.executor.instances * (spark.executor.memory + spark.yarn.executor.memoryOverhead) and spark.executor.instances * spark.executor.cores. Spark yürütücüleri yapılandırmasında daha fazla bilgi edinin
  • ApplicationMaster
    • Küme modunda ve spark.driver.memoryspark.driver.cores
    • İstemci modunda ve spark.yarn.am.memory+spark.yarn.am.memoryOverheadspark.yarn.am.cores

Not

yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb

  1. Yeni uygulama toplam kaynaklarınızı, belirtilen kuyruğunuzdaki kullanılabilir yarn kaynaklarıyla karşılaştırın

3. Adım: Spark uygulamanızı izleme

  1. Spark kullanıcı arabirimi aracılığıyla çalışan Spark uygulamanızı izleme

  2. Spark Geçmiş Sunucusu kullanıcı arabirimi aracılığıyla eksiksiz veya tamamlanmamış Spark uygulamanızı izleme

Spark kullanıcı arabirimi veya Spark Geçmişi kullanıcı arabirimi aracılığıyla aşağıdaki belirtileri tanımlamamız gerekir:

  • Hangi aşama yavaş
  • Aşama sekmesindeki Event-Timeline toplam yürütücü CPU sanal çekirdekleri tam olarak kullanılıyor mu?
  • Spark SQL kullanıyorsanız SQL sekmesindeki fiziksel plan nedir?
  • DAG bir aşamada çok uzun mu
  • Aşama sekmesinde görev ölçümlerini (giriş boyutu, yazma boyutunu karıştırma, GC Zamanı) gözlemleme

Spark Uygulamalarınızı izleme konusunda daha fazla bilgi edinin

4. Adım: Spark uygulamanızı iyileştirme

Önbelleğe alma ve veri dengesizliği sağlama gibi bu zorlukları aşmanıza yardımcı olabilecek birçok iyileştirme vardır.

Aşağıdaki makalelerin her birinde Spark iyileştirmesinin farklı yönleri hakkında bilgi bulabilirsiniz.

Spark SQL bölümlerini iyileştirme

  • spark.sql.shuffle.paritions varsayılan olarak 200'dür. Birleştirmeler veya toplamalar için verileri karıştırırken iş gereksinimlerine göre ayarlamalar yapabiliriz.
  • spark.sql.files.maxPartitionBytes , HDI'de varsayılan olarak 1G'dir. Dosyaları okurken tek bir bölüme paketlenmesi gereken bayt sayısı üst sınırı. Bu yapılandırma yalnızca Parquet, JSON ve ORC gibi dosya tabanlı kaynakları kullanırken geçerlidir.
  • Spark 3.0'da AQE. Bkz. Uyarlamalı Sorgu Yürütme

Sonraki adımlar