Hadoop Partitioner: Giriş, Sözdizimi ve Uygulama Hakkında Bilgi Edinin

Yayınlanan: 2020-05-14

Bu Hadoop Partitioner öğreticisinin temel amacı, Hadoop'ta kullanılan her parçanın nokta nokta tanımını size vermektir. Bu yazıda Hadoop Partitioner'ın anlamını, Hadoop'ta Partitioner'a olan ihtiyacı ve kötü bir Hadoop bölümleme vakasını ele alacağız.

Hadoop Partitioner'ın ne olduğunu anlayalım.

İçindekiler

Hadoop'ta Partitioner nedir?

Bir Bölücü, çıktıların harita aşamasından indirgeyicilere nasıl gittiğinin yayılmasına izin verir.

Partitioner, orta harita çıktılarının anahtar bölümünü kontrol eder. Anahtar veya anahtarın bir alt kümesi, bölmeyi bir karma işleviyle çıkarmak için kullanılır.

Nitekim Hadoop yapısı karma tabanlı bir bölümleyicidir. Hadoop'taki bu karma işlevi, bölümün türetilmesine yardımcı olur.

Bölüm, anahtar değerine bağlı olarak eşleyici çıktısında çalışır. Aynı anahtar değeri, her eşleyicide aynı bölüme gider. Bu işlemden sonra son bölüm bir redüktöre gönderilir.

Bir bölümün sınıfı, bir anahtar ve değer çiftinin nereye gideceğine karar verir. Bölümleme aşaması haritanın ortasına düşer ve aşamaları azaltır.

Bir Hadoop Partitioner'a neden ihtiyaç duyulduğunu görelim.

Hadoop Partitioner'a ne gerek var?

MapReduce mimarisi iş aşamasında bir girdi veri seti alınır ve anahtar ve değer çiftlerinin bir listesi üretilir. Bu anahtar ve değer çiftleri harita aşamasında oluşturulur. Bu, giriş verileri bölündüğünde meydana gelir, bu daha sonra her bir görev ve harita tarafından işlenir ve bir anahtar ve değer çiftleri listesi üretilir.

Ancak, eşleme bölümü, anahtar ve değere dayalı olarak, azaltma aşamasından hemen önce gerçekleşir. Bu şekilde aynı değerlere sahip tüm anahtarlar birlikte gruplanır ve aynı redüktöre giderler. Böylece haritadan çıkan çıktının redüktör üzerindeki dağılımı dahi sağlanmaktadır.

Hadoop MapReduce bölümleme, doğru anahtarın doğru redüktöre gitmesini sağlayarak eşleyici çıktısının redüktör üzerinde eşit dağılımına izin verir.

Okuyun : Hindistan'da Hadoop Geliştirici Maaşı

Hadoop'ta Hash Partitioner Sözdizimi

Hadoop'ta bir karma bölümleyicinin varsayılan sözdizimi buradadır.

public int getPartition(K tuşu, V değeri

int numReduceTasks)

{

return(key.hashCode() & Integer.MAX_VALUE) % numRedudeTasks;

}

Hadoop Partitioner'ın Uygulanması

Hadoop Partitioner'ın pratik uygulamalarda kullanımına dair bir örnek görmek için, bir binada bir blokta yaşayanlar için verileri içeren aşağıdaki tabloya bakalım.

Daire numarası İsim Cinsiyet Aile üyeleri Elektrik faturası
1101 Manişa Dişi 3 1500
1102 Deepak Erkek 4 2000
1103 Sanjay Erkek 3 1100
1104 Nidhi Dişi 2 900
1105 Prateek Erkek 1 650
1106 Gopal Erkek 4 1800
1107 Samikşa Dişi 2 1300

Şimdi farklı aile üyesi gruplarında cinsiyete göre en yüksek elektrik faturasını bulan bir program yazalım – 2'den 3'e ve 4'ün altında.

Verilen veriler “/home/Hadoop/HadoopPartitioner” dizinine input.txt olarak kaydedilir.

Tuş bir kalıbı takip eder - özel tuş + dosya adı + satır numarası. Örneğin,

anahtar = giriş@1

Bunun için değer

değer = 1101 \t Manisha \t Kadın \t 3 \t 1500

İşte operasyon nasıl olacak:

  • Değeri oku
  • Cinsiyetleri ayırmak ve bunları bir dizge değişkeninde saklamak için bölme işlevini kullanın

String[] str = value.toString().split(“\t”, -2);

String cinsiyet = str[2];

  • Şimdi cinsiyet bilgilerini gönderin ve veri değerini ley ve değer çifti olarak bölümleme görevine kaydedin

bağlam.write(yeni Metin(cinsiyet), yeni Metin(değer));

  • Tüm kayıtlar için tekrarlayın

Çıktı olarak, sıralanmış cinsiyet verilerini ve veri değerini anahtar ve değer çiftleri olarak alacaksınız.

İşte bölümleyici görevinin nasıl gideceği.

İlk olarak, bölümleyici kendisine gönderilen anahtar ve değer çiftlerini girdi olarak alacaktır. Şimdi, verileri farklı segmentlere bölecek.

Giriş

anahtar = cinsiyet alanı değeri

değer = o cinsiyetin kayıt değeri

İşte süreç nasıl ilerleyecek.

  • Anahtar değer çiftinden aile üyesi değerini okuyun

String[] str = value.toString().split(“\t”);

int yaş = Tamsayı.parseInt(str[3]);

  • Aşağıdaki koşullarla aile üyelerinin değerini kontrol edin
  • 2'den 3'e kadar aile üyeleri
  • 4 yaşından küçük aile üyeleri

if(aile üyeleri<4)

{

0 döndür;

}

else if(aile üyeleri>=2 && aile üyeleri<=3)

{

%1 döndür numReduceTasks;

}

Başka

{

%2 numReduceTasks döndür;

}

Çıktı

Anahtar ve değer çiftlerinin verileri, verilen üç koleksiyona bölünecektir.

Şunları da öğrenin: Hakkında Bilmeniz Gereken En İyi Hadoop Araçları

Kötü Bölümleme ve Üstesinden Gelme

Giriş verilerinizdeki tuşlardan birinin diğer tuşlardan daha fazla görüneceğini tahmin edebileceğinizi varsayalım. Bu nedenle, tüm anahtarınızı (çok büyük bir sayı) bir bölüme göndermeniz ve ardından kalan anahtarları hashCode() ile diğer tüm bölümlere dağıtmanız gerekebilir.

Yani, şimdi bölümlere bilgi göndermek için iki mekanizmanız var:

  1. İlk olarak, daha fazlasını gösteren anahtar bir bölüme gönderilecektir.
  2. İkinci olarak, kalan tüm anahtarlar, hashCode()'larına göre bölümlere gönderilecektir.

Şimdi, diyelim ki hashCode() tekniğiniz diğer anahtarları bölümlere uygun şekilde dağıtmıyor. Bu nedenle, bilgi bölmelerde ve redüktörlerde eşit olarak dağıtılmaz. Bunun nedeni, her bölümün bir redüktörle orantılı olmasıdır.

Bu nedenle, bazı redüktörler diğer redüktörlerden daha büyük miktarda veriye sahip olacaktır. Bu nedenle, kalan redüktörler, eldeki yük nedeniyle bir redüktör (kullanıcı tanımlı anahtarlara sahip) beklemek zorunda kalacaktır.

Bu durumda, verileri farklı redüktörler arasında paylaşacak bir metodoloji izlemelisiniz. Hadoop nihai öğreticimizle Hadoop hakkında daha fazla bilgi edinin.

Çözüm

Hadoop Partitioners hakkındaki bu kılavuzun size yardımcı olduğunu umuyoruz. Bu konuyla ilgili daha fazla bilgi için upGrad'daki uzmanlarla iletişime geçin, bu konuda size yardımcı olalım.

Büyük Veri hakkında daha fazla bilgi edinmek istiyorsanız, çalışan profesyoneller için tasarlanmış ve 7+ vaka çalışması ve proje sağlayan, 14 programlama dili ve aracını kapsayan, pratik uygulamalı Büyük Veride Yazılım Geliştirme Uzmanlığı programında PG Diplomamıza göz atın çalıştaylar, en iyi firmalarla 400 saatten fazla titiz öğrenim ve işe yerleştirme yardımı.

Dünyanın En İyi Üniversitelerinden Online Yazılım Geliştirme Kursları öğrenin . Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.

Geleceğin Teknolojisinde Ustalaşın - Büyük Veri

IIIT Bangalore'den Büyük Veride Gelişmiş Sertifika Programı