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
- 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
Yarn kullanıcı arabiriminin erişilebilir olup olmadığını denetleyin
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster
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
Ambari UI > YARN ÖZETİ'ne gidin, ServiceMetrics'te KÜME BELLİSİ'ne bakın >
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.
- 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.memory
spark.driver.cores
- İstemci modunda ve
spark.yarn.am.memory+spark.yarn.am.memoryOverhead
spark.yarn.am.cores
- Küme modunda ve
Not
yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb
- 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
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.
- Apache Spark için veri depolamayı iyileştirme
- Apache Spark için veri işlemeyi iyileştirme
- Apache Spark için bellek kullanımını iyileştirme
- Apache Spark için HDInsight küme yapılandırmasını iyileştirme
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