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

Önkoşullar

Parametreler

MapReduce işlerini çalıştırırken, Data Lake Storage 1. Nesil performansını artırmak için yapılandırabileceğiniz en önemli parametreler şunlardır:

Parametre Açıklama
Mapreduce.map.memory.mb Her eşleyiciye ayrılacak bellek miktarı.
Mapreduce.job.maps İş başına eşleme görevlerinin sayısı.
Mapreduce.reduce.memory.mb Her azaltıcıya ayrılacak bellek miktarı.
Mapreduce.job.reduces İş başına azaltma görevlerinin sayısı.

Mapreduce.map.memory / Mapreduce.reduce.memory

Eşleme ve/veya azaltma görevi için gereken bellek miktarına göre bu sayıyı ayarlayın. Yarn yapılandırması aracılığıyla Ambari'de ve mapreduce.reduce.memory varsayılan değerlerini mapreduce.map.memory görüntüleyebilirsiniz. Ambari'de YARN'a gidin ve Yapılandırmalar sekmesini görüntüleyin. YARN belleği görüntülenir.

Mapreduce.job.maps / Mapreduce.job.reduces

Bu, oluşturulacak en fazla eşleyici veya azaltıcı sayısını belirler. Bölme sayısı, MapReduce işi için kaç eşleyici oluşturulduğunu belirler. Bu nedenle, istenen eşleyici sayısından daha az bölme olduğunda istediğinizden daha az eşleyici alabilirsiniz.

Rehber

1. Adım: Çalışan iş sayısını belirleme

Varsayılan olarak, MapReduce işiniz için kümenin tamamını kullanır. Kullanılabilir kapsayıcılardan daha az eşleyici kullanarak kümenin daha azını kullanabilirsiniz. Bu belgedeki kılavuzda, uygulamanızın kümenizde çalışan tek uygulama olduğu varsayılır.

2. Adım: mapreduce.map.memory/mapreduce.reduce.memory değerini ayarlama

Eşleme ve azaltma görevleri için belleğin boyutu, işinize bağlı olacaktır. Eşzamanlılığı artırmak istiyorsanız bellek boyutunu küçültebilirsiniz. Eşzamanlı olarak çalışan görevlerin sayısı kapsayıcı sayısına bağlıdır. Eşleyici veya azaltıcı başına bellek miktarını azaltarak daha fazla kapsayıcı oluşturulabilir ve bu da eşleştiricilerin veya azaltıcıların eşzamanlı olarak çalışmasını sağlar. Bellek miktarının çok fazla azaltılması bazı işlemlerin belleğin dolmasına neden olabilir. İşinizi çalıştırırken yığın hatası alırsanız, eşleyici veya azaltıcı başına belleği artırın. Daha fazla kapsayıcı eklemek, her ek kapsayıcı için ek yük ekleyip performansı düşürebilir. Başka bir alternatif, daha fazla bellek miktarına sahip bir küme kullanarak veya kümenizdeki düğüm sayısını artırarak daha fazla bellek elde etmektir. Daha fazla bellek, daha fazla kapsayıcının kullanılmasını sağlar ve bu da daha fazla eşzamanlılık anlamına gelir.

3. Adım: Toplam YARN belleğini belirleme

mapreduce.job.maps/mapreduce.job.reduces ayarını yapmak için, kullanılabilir toplam YARN belleği miktarını göz önünde bulundurun. Bu bilgileri Ambari'de bulabilirsiniz. YARN'a gidin ve Yapılandırmalar sekmesini görüntüleyin. YARN belleği bu pencerede görüntülenir. Toplam YARN belleğini almak için YARN belleğini kümenizdeki düğüm sayısıyla çarpın.

Total YARN memory = nodes * YARN memory per node

Boş bir küme kullanıyorsanız, bellek kümenizin toplam YARN belleği olabilir. Diğer uygulamalar bellek kullanıyorsa, eşleyici veya azaltıcı sayısını kullanmak istediğiniz kapsayıcı sayısına düşürerek kümenizin belleğinin yalnızca bir bölümünü kullanmayı seçebilirsiniz.

4. Adım: YARN kapsayıcılarının sayısını hesaplama

YARN kapsayıcıları, iş için kullanılabilir eşzamanlılık miktarını belirler. Toplam YARN belleğini alın ve mapreduce.map.memory olarak bölün.

# of YARN containers = total YARN memory / mapreduce.map.memory

5. Adım: mapreduce.job.maps/mapreduce.job.reduces değerini ayarlama

mapreduce.job.maps/mapreduce.job.reduces değerini en az kullanılabilir kapsayıcı sayısına ayarlayın. Daha iyi performans elde edip etmediğinize bakmak için eşleyici ve azaltıcı sayısını artırarak daha fazla deneme yapabilirsiniz. Daha fazla eşleyicinin ek yüke sahip olacağını, bu nedenle çok fazla eşleyicinin performansı düşürebileceğini unutmayın.

CPU zamanlaması ve CPU yalıtımı varsayılan olarak kapalıdır, bu nedenle YARN kapsayıcılarının sayısı bellek tarafından kısıtlanır.

Örnek hesaplama

Şu anda 8 D14 düğümünden oluşan bir kümeniz olduğunu ve G/Ç yoğunluklu bir iş çalıştırmak istediğinizi varsayalım. Yapmanız gereken hesaplamalar şunlardır:

1. Adım: Çalışan iş sayısını belirleme

Örneğimizde, yalnızca işimizin çalıştığını varsayarız.

2. Adım: mapreduce.map.memory/mapreduce.reduce.memory değerini ayarlama

Örneğimizde G/Ç yoğunluklu bir iş çalıştırıyor ve eşleme görevleri için 3 GB belleğin yeterli olduğuna karar vereceksiniz.

mapreduce.map.memory = 3GB

3. Adım: Toplam YARN belleğini belirleme

total memory from the cluster is 8 nodes * 96GB of YARN memory for a D14 = 768GB

4. Adım: YARN kapsayıcılarının sayısını hesaplama

# of YARN containers = 768 GB of available memory / 3 GB of memory = 256

5. Adım: mapreduce.job.maps/mapreduce.job.reduces değerini ayarlama

mapreduce.map.jobs = 256

Sınırlamalar

Data Lake Storage 1. Nesil azaltma

Çok kiracılı bir hizmet olarak Data Lake Storage 1. Nesil hesap düzeyinde bant genişliği sınırlarını ayarlar. Bu sınırlara gelirseniz, görev hatalarını görmeye başlarsınız. Bu, görev günlüklerindeki azaltma hataları gözlemlenerek tanımlanabilir. İşiniz için daha fazla bant genişliğine ihtiyacınız varsa lütfen bizimle iletişime geçin.

Azaltılıp azaltılmadığınızdan emin olmak için istemci tarafında hata ayıklama günlüğünü etkinleştirmeniz gerekir. Bunu şu şekilde yapabilirsiniz:

  1. Ambari > YARN Config > Advanced yarn-log4j > içindeki log4j özelliklerine aşağıdaki özelliği yerleştirin: log4j.logger.com.microsoft.azure.datalake.store=DEBUG

  2. Yapılandırmanın etkili olması için tüm düğümleri/hizmeti yeniden başlatın.

  3. Kısıtlanıyorsanız YARN günlük dosyasında HTTP 429 hata kodunu görürsünüz. YARN günlük dosyası /tmp/user>/<yarn.log

Çalıştırılacak örnekler

MapReduce'un Data Lake Storage 1. Nesil üzerinde nasıl çalıştığını göstermek için, aşağıdaki ayarlarla bir kümede çalıştırılan bazı örnek kodlar aşağıda verilmiştir:

  • 16 düğüm D14v2
  • HDI 3.6 çalıştıran Hadoop kümesi

Bir başlangıç noktası için MapReduce Teragen, Terasort ve Teravalidate çalıştırmaya yönelik bazı örnek komutlar aşağıda verilmiştir. Bu komutları kaynaklarınıza göre ayarlayabilirsiniz.

Teragen

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teragen -Dmapreduce.job.maps=2048 -Dmapreduce.map.memory.mb=3072 10000000000 adl://example/data/1TB-sort-input

Terasort

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar terasort -Dmapreduce.job.maps=2048 -Dmapreduce.map.memory.mb=3072 -Dmapreduce.job.reduces=512 -Dmapreduce.reduce.memory.mb=3072 adl://example/data/1TB-sort-input adl://example/data/1TB-sort-output

Teravalidate

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teravalidate -Dmapreduce.job.maps=512 -Dmapreduce.map.memory.mb=3072 adl://example/data/1TB-sort-output adl://example/data/1TB-sort-validate