Aracılığıyla paylaş


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

Bu makalede, Azure HDInsight'ta Apache Spark uygulamalarını iyileştirme stratejilerine genel bir bakış sunulmaktadı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:

  • Verileriniz nasıl depolanır?
  • 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 oturum açan özel durumlar veya hatalar olup olmadığını denetleyin /var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log

Yarn 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ı arabirimine gidin, Yarn zamanlayıcı ö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 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ı kullanmalısınız.
  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 Olay Zaman Çizelgesi'nde toplam yürütücü CPU sanal çekirdekleri tam olarak kullanılıyor mu?
  • Spark SQL kullanıyorsanız SQL sekmesindeki fiziksel plan nedir?
  • Bir aşamada DAG çok mu uzun?
  • Aşama sekmesinde görevlerin ölçümlerini gözlemleyin (giriş boyutu, yazma boyutunu karıştırma, GC Süresi)

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 gibi bu zorlukların üstesinden gelmenize 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.partitions varsayılan olarak 200'dür. Birleştirmeler veya toplamalar için verileri karıştırırken iş gereksinimlerine göre ayarlayabiliriz.
  • 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ılırken geçerlidir.
  • Spark 3.0'da AQE. Bkz. Uyarlamalı Sorgu Yürütme

Sonraki adımlar