Aracılığıyla paylaş


HDInsight ve Azure Data Lake Storage 1. Nesil'de Spark için performans ayarlama kılavuzu

Spark'ta performansı ayarlarken kümenizde çalıştırılacak uygulama sayısını göz önünde bulundurmanız gerekir. Varsayılan olarak, HDI kümenizde aynı anda dört uygulama çalıştırabilirsiniz (Not: varsayılan ayar değiştirilebilir). Varsayılan ayarları geçersiz kılmak ve bu uygulamalar için kümeden daha fazlasını kullanmak için daha az uygulama kullanmaya karar vekleyebilirsiniz.

Önkoşullar

Parametreler

Spark işlerini çalıştırırken, Data Lake Storage 1. Nesil performansını artırmak için ayarlanabilecek en önemli ayarlar şunlardır:

  • Num yürütücüleri - Yürütülebilecek eşzamanlı görevlerin sayısı.

  • Yürütücü-bellek - Her yürütücüye ayrılan bellek miktarı.

  • Yürütücü çekirdekleri - Her yürütücüye ayrılan çekirdek sayısı.

Num yürütücüleri Num yürütücüleri, paralel olarak çalışabilecek en fazla görev sayısını ayarlar. Paralel olarak çalışabilecek gerçek görev sayısı, kümenizdeki kullanılabilir bellek ve CPU kaynaklarıyla sınırlanır.

Yürütücü-bellek Bu, her yürütücüye ayrılan bellek miktarıdır. Her yürütücü için gereken bellek işe bağlıdır. Karmaşık işlemler için belleğin daha yüksek olması gerekir. Okuma ve yazma gibi basit işlemler için bellek gereksinimleri daha düşük olacaktır. Her yürütücü için bellek miktarı Ambari'de görüntülenebilir. Ambari'de Spark'a gidin ve Yapılandırmalar sekmesini görüntüleyin.

Yürütücü çekirdekleri Bu, yürütücü başına kullanılan çekirdek miktarını ayarlar ve yürütücü başına çalıştırılabilir paralel iş parçacığı sayısını belirler. Örneğin yürütücü çekirdekleri = 2 ise, her yürütücü yürütücüde 2 paralel görev çalıştırabilir. Gereken yürütücü çekirdekleri işe bağımlı olacaktır. G/Ç ağır işleri için görev başına büyük miktarda bellek gerekmez, bu nedenle her yürütücü daha fazla paralel görevi işleyebilir.

Varsayılan olarak, HDInsight üzerinde Spark çalıştırılırken her fiziksel çekirdek için iki sanal YARN çekirdeği tanımlanır. Bu sayı, eşzamanlılık ve birden çok iş parçacığından bağlam değiştirme miktarı açısından iyi bir denge sağlar.

Rehber

Data Lake Storage 1. Nesil'da verilerle çalışmak için Spark analiz iş yüklerini çalıştırırken, Data Lake Storage 1. Nesil ile en iyi performansı elde etmek için en son HDInsight sürümünü kullanmanızı öneririz. İşiniz G/Ç açısından daha yoğun olduğunda performansı artırmak için belirli parametreler yapılandırılabilir. Data Lake Storage 1. Nesil, yüksek aktarım hızını işleyebilen yüksek oranda ölçeklenebilir bir depolama platformudur. İş ağırlıklı olarak okuma veya yazma işlemlerinden oluşuyorsa, G/Ç ile Data Lake Storage 1. Nesil arasında eşzamanlılığı artırmak performansı artırabilir.

G/Ç yoğun işlerde eşzamanlılığı artırmanın birkaç genel yolu vardır.

1. Adım: Kümenizde çalışan uygulama sayısını belirleme – Geçerli uygulama dahil olmak üzere kümede kaç uygulama çalıştırdığını bilmeniz gerekir. Her Spark ayarı için varsayılan değerler, eşzamanlı olarak çalışan 4 uygulama olduğunu varsayar. Bu nedenle, her uygulama için kümenin yalnızca %25'ine sahip olursunuz. Daha iyi performans elde etmek için yürütücü sayısını değiştirerek varsayılanları geçersiz kılabilirsiniz.

2. Adım: Yürütücü belleğini ayarlama – ayarlanacağı ilk şey yürütücü belleğidir. Bellek, çalıştıracağınız işe bağımlı olacaktır. Yürütücü başına daha az bellek ayırarak eşzamanlılığı artırabilirsiniz. İşinizi çalıştırdığınızda yetersiz bellek özel durumları görürseniz, bu parametrenin değerini artırmanız gerekir. Alternatiflerden biri, daha yüksek miktarda belleğe sahip bir küme kullanarak veya kümenizin boyutunu artırarak daha fazla bellek elde etmektir. Daha fazla bellek, daha fazla yürütücü kullanılmasını sağlar ve bu da daha fazla eşzamanlılık anlamına gelir.

3. Adım: Yürütücü çekirdeklerini ayarlama – Karmaşık işlemleri olmayan G/Ç yoğunluklu iş yükleri için yürütücü başına paralel görevlerin sayısını artırmak için çok sayıda yürütücü çekirdeğiyle başlamak iyi bir işlemdir. Yürütücü çekirdeklerini 4 olarak ayarlamak iyi bir başlangıçtır.

executor-cores = 4

Yürütücü çekirdeği sayısını artırmak, farklı yürütücü çekirdekleriyle denemeler yapabilmeniz için size daha fazla paralellik sağlar. Daha karmaşık işlemleri olan işler için yürütücü başına çekirdek sayısını azaltmanız gerekir. Yürütücü çekirdekleri 4'ten yüksek bir değere ayarlanırsa çöp toplama işlemi verimli olmayabilir ve performansı düşürebilir.

4. Adım: Kümedeki YARN belleği miktarını belirleme – Bu bilgiler Ambari'de kullanılabilir. YARN'a gidin ve Contigs sekmesini görüntüleyin. YARN belleği bu pencerede görüntülenir. Penceredeyken varsayılan YARN kapsayıcı boyutunu da görebileceğinizi unutmayın. YARN kapsayıcı boyutu yürütücü parametresi başına bellekle aynıdır.

Toplam YARN belleği = düğümler * Düğüm başına YARN belleği

5. Adım: Sayısal yürütücüleri hesaplama

Bellek kısıtlamasını hesaplama - num-executors parametresi bellek veya CPU ile kısıtlanır. Bellek kısıtlaması, uygulamanız için kullanılabilir YARN belleği miktarına göre belirlenir. Toplam YARN belleğini alın ve yürütücü-belleğe bölün. Uygulama sayısı için kısıtlamanın ölçeğinin kaldırılarak uygulama sayısına bölünmesi gerekir.

Bellek kısıtlaması = (toplam YARN belleği / yürütücü belleği) / uygulama sayısı

CPU kısıtlamasını hesaplama - CPU kısıtlaması, yürütücü başına çekirdek sayısına bölünen toplam sanal çekirdek olarak hesaplanır. Her fiziksel çekirdek için 2 sanal çekirdek vardır. Bellek kısıtlamasına benzer şekilde, uygulama sayısına bölündük.

sanal çekirdekler = (kümedeki düğümler * düğümler * düğümdeki fiziksel çekirdek sayısı * 2) CPU kısıtlaması = (toplam sanal çekirdek / yürütücü başına çekirdek sayısı) / uygulama sayısı

Set num-executors – num-executors parametresi, bellek kısıtlamasının ve CPU kısıtlamasının en düşük değeri alınarak belirlenir.

num-executors = Min (yürütücü başına toplam sanal Çekirdek / çekirdek sayısı, kullanılabilir YARN belleği / yürütücü-bellek) Daha fazla sayıda num yürütücüsü ayarlamak performansı artırmaz. Daha fazla yürütücü eklenmesinin her ek yürütücü için ek yük ekleyeceğini ve bu da performansı düşürebileceğini düşünmelisiniz. Num yürütücüleri küme kaynaklarıyla sınırlanır.

Örnek Hesaplama

Şu anda çalıştıracağınız düğüm de dahil olmak üzere iki uygulama çalıştıran 8 D4v2 düğümünden oluşan bir kümeniz olduğunu varsayalım.

1. Adım: Kümenizde kaç uygulamanın çalıştığını belirleyin; kümenizde çalıştıracağınız uygulama da dahil olmak üzere iki uygulamanız olduğunu biliyorsunuz.

2. Adım: Yürütücü belleğini ayarlama – bu örnekte G/Ç yoğun iş için 6 GB yürütücü belleğinin yeterli olacağını saptadık.

executor-memory = 6GB

3. Adım: Yürütücü çekirdeklerini ayarlama – Bu yoğun G/Ç gerektiren bir iş olduğundan, her yürütücü için çekirdek sayısını dört olarak ayarlayabiliriz. Yürütücü başına çekirdeklerin dörtten büyük olarak ayarlanması çöp toplama sorunlarına neden olabilir.

executor-cores = 4

4. Adım: Kümedeki YARN belleği miktarını belirleme – Her D4v2'de 25 GB YARN belleği olduğunu öğrenmek için Ambari'ye gideriz. 8 düğüm olduğundan, kullanılabilir YARN belleği 8 ile çarpılır.

Toplam YARN belleği = düğümler * YARN belleği* düğüm başına Toplam YARN belleği = 8 düğüm * 25 GB = 200 GB

5. Adım: Num yürütücülerini hesaplama – num-executors parametresi, bellek kısıtlamasının en azını ve CPU kısıtlamasını Spark üzerinde çalışan uygulamaların sayısına bölerek belirlenir.

Bellek kısıtlamasını hesaplama – Bellek kısıtlaması, yürütücü başına belleğe bölünen toplam YARN belleği olarak hesaplanır.

Bellek kısıtlaması = (toplam YARN belleği / yürütücü belleği) / uygulama sayısı Bellek kısıtlaması = (200 GB / 6 GB) / 2 Bellek kısıtlaması = 16 (yuvarlanmış) CPU kısıtlamasını hesapla - CPU kısıtlaması, yürütücü başına çekirdek sayısına bölünen toplam iplik çekirdeği olarak hesaplanır.

YARN çekirdekleri = kümedeki düğümler * düğüm başına çekirdek sayısı * 2 YARN çekirdeği = 8 düğüm * D14 başına 8 çekirdek * 2 = 128 CPU kısıtlaması = (toplam YARN çekirdekleri / yürütücü başına çekirdek sayısı) / uygulama sayısı CPU kısıtlaması = (128 / 4) / 2 CPU kısıtlaması = 16

Num yürütücülerini ayarlama

num-executors = Min (bellek kısıtlaması, CPU kısıtlaması) num-executors = Min (16, 16) num-executors = 16