Hadoop MapReduce Katıl ve Örnekle Say
⚡ Akıllı Özet
MapReduce birleştirmeleri, eşleyici (mapper) veya indirgeyici (reducer) içinde, paylaşılan bir anahtar üzerinden iki büyük veri setini birleştirirken, MapReduce sayaçları ise hatalı kayıtların tahmin edilmek yerine ölçülebilmesi için işlemle ilgili istatistikler toplar.
MapReduce'da JOIN nedir?
MapReduce birleştirme işlemi, iki büyük veri setini birleştirmek için kullanılır. Ancak bu işlem, gerçek birleştirme işlemini gerçekleştirmek için çok fazla kod yazmayı gerektirir. İki veri setinin birleştirilmesi, her veri setinin boyutunun karşılaştırılmasıyla başlar. Bir veri seti diğerine göre daha küçükse, daha küçük olan veri seti kümedeki her veri düğümüne dağıtılır.
Bir kez katıldıktan sonra Harita indirgeme Dağıtılmış veri söz konusu olduğunda, Eşleyici (Mapper) veya İndirgeyici (Reducer) daha küçük veri setini kullanarak büyük veri setinden eşleşen kayıtları arar ve ardından bu kayıtları birleştirerek çıktı kayıtlarını oluşturur.
Üyelik Türleri
Hadoop'ta birleştirme işlemleri, birleştirmenin gerçekleştirildiği yere bağlı olarak iki türe ayrılır.
- Harita tarafında katılma — Birleştirme işlemi eşleyici (mapper) tarafından gerçekleştirildiğinde, buna eşleyici tarafı birleştirme (map-side join) denir. Bu türde, birleştirme işlemi veriler eşleme fonksiyonu tarafından gerçekten tüketilmeden önce gerçekleştirilir. Her eşlemeye verilen girdinin bölümleme (partition) biçiminde ve sıralı olması zorunludur. Ayrıca, eşit sayıda bölümleme olmalı ve birleştirme anahtarına göre sıralanmalıdır.
- Yan birleştirmeyi azaltın — Birleştirme işlemi indirgeyici tarafından yapıldığında, buna indirgeme tarafı birleştirme denir. Bu birleştirmede veri setinin yapılandırılmış (veya bölümlenmiş) bir biçimde olması gerekmez. Burada, eşleme tarafı işleme, birleştirme anahtarını ve her iki tablonun karşılık gelen kayıtlarını üretir. Bu işlemin bir sonucu olarak, aynı birleştirme anahtarına sahip tüm kayıtlar aynı indirgeyiciye düşer ve bu indirgeyici daha sonra aynı birleştirme anahtarına sahip kayıtları birleştirir.
Hadoop'taki birleştirmelerin genel süreç akışı aşağıdaki şemada gösterilmektedir.

İki varyant netleştikten sonra, bir sonraki bölümde iki küçük departman dosyasında azaltma tarafı birleştirme işlemi ele alınacaktır.
İki Veri Kümesine Nasıl Birleştirilir: MapReduce Örneği
Aşağıda gösterilen iki farklı dosyada iki veri seti bulunmaktadır. Her iki dosyada da ortak olan anahtar Dept_ID'dir. Amaç, bu dosyaları birleştirmek için MapReduce Join kullanmaktır.
Giriş: Giriş veri seti, DeptName.txt ve DeptStrength.txt adlı iki metin dosyasından oluşmaktadır.
Giriş Dosyalarını Buradan İndirin
Sahip olduğunuzdan emin olun Hadoop'un Kurulumu tamamladıktan sonra, MapReduce Join örneği gerçek işlemine başlamadan önce kullanıcıyı 'hduser' olarak değiştirin (Hadoop yapılandırması sırasında kullanılan kimlik, Hadoop yapılandırmanız sırasında kullandığınız kullanıcı kimliğine geçebilirsiniz).
su - hduser_
Aşağıda gösterildiği gibi, komut istemi Hadoop hesabına değişiyor.
) 1 Adım Zip dosyasını istediğiniz konuma kopyalayın
) 2 Adım Sıkıştırılmış Dosyayı Açın
sudo tar -xvf MapReduceJoin.tar.gz
EskitracTar arşivi açarken dosya adları ekranda beliriyor.
) 3 Adım MapReduceJoin/ dizinine gidin
cd MapReduceJoin/
) 4 Adım Hadoop'u başlat
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Her iki komut dosyası da başlattıkları arka plan işlemlerini yazdırır.
) 5 Adım DeptStrength.txt ve DeptName.txt, bu MapReduce join örnek programı için kullanılan giriş dosyalarıdır.
Bu dosyaların kopyalanması gerekiyor. HDFS Aşağıdaki komutu kullanarak-
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /
) 6 Adım Aşağıdaki komutu kullanarak programı çalıştırın-
$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin
Komut önce ekrana yazdırılır ve ardından işlem ilerleme durumunu konsolda bildirir.
) 7 Adım Çalıştırma işleminden sonra, çıktı dosyası ('part-00000' adıyla) HDFS üzerindeki /output_mapreducejoin dizinine kaydedilecektir.
Sonuçlar komut satırı arayüzü kullanılarak görülebilir
$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000
Sonuçlar ayrıca bir web arayüzü aracılığıyla da görülebilir.
Şimdi 'Dosya sistemine göz at' seçeneğini seçin ve /output_mapreducejoin dizinine gidin.
part-r-00000'i açın
Sonuçlar gösteriliyor
NOT: Bu programı bir dahaki sefere çalıştırmadan önce, /output_mapreducejoin çıktı dizinini silmeniz gerekeceğini lütfen unutmayın.
$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin
Bunun alternatifi çıktı dizini için farklı bir ad kullanmaktır.
Birleştirmeler (JOIN) size verilerin neye benzediğini söyler. Bir sonraki bölümde ele alınacak olan sayaçlar (Counters), bu veriyi üreten işin nasıl davrandığını gösterir.
MapReduce'ta Sayaç Nedir?
MapReduce'da sayaç, MapReduce işleri ve olayları hakkında istatistiksel bilgileri toplamak ve ölçmek için kullanılan bir mekanizmadır. Sayaçlar, verileri saklar. tracMapReduce'da gerçekleşen işlem sayısı ve işlemin ilerlemesi gibi çeşitli iş istatistiklerinin sayımı. Sayaçlar, MapReduce'da sorun teşhisinde kullanılır.
Hadoop Sayaçları, bir haritanın veya azaltmanın koduna bir günlük mesajı koymaya benzer. Bu bilgi MapReduce iş sürecindeki bir sorunun teşhisinde faydalı olabilir.
Hadoop'ta bu sayaçlar genellikle bir programda (map veya reduce) tanımlanır ve belirli bir olay veya koşul (o sayaca özgü) gerçekleştiğinde yürütme sırasında artırılır. Hadoop sayaçlarının çok iyi bir uygulaması şudur: tracGiriş veri kümesinden k adet geçerli ve geçersiz kayıt.
MapReduce Sayaçlarının Türleri
MapReduce sayaçlarının temelde 2 türü vardır.
- Hadoop'un yerleşik sayaçları: İş başına mevcut olan bazı yerleşik Hadoop sayaçları vardır. Aşağıda yerleşik sayaç grupları bulunmaktadır.
- MapReduce Görev Sayaçları — Görevin yürütülme süresi boyunca göreve özgü bilgileri (örneğin, girdi kayıtlarının sayısı) toplar.
- Dosya Sistemi Sayaçları — Bir görev tarafından okunan veya yazılan bayt sayısı gibi bilgileri toplar.
- FileInputFormat Sayaçları — FileInputFormat aracılığıyla okunan bir dizi baytın bilgilerini toplar.
- FileOutputFormat Sayaçları — FileOutputFormat aracılığıyla yazılan bir dizi baytın bilgilerini toplar.
- İş İlanı Sayaçları — Bu sayaçlar, bir iş için başlatılan görev sayısı gibi iş genelindeki istatistikleri kaydeder.
- Kullanıcı tanımlı sayaçlar: Dahili sayaçlara ek olarak, kullanıcı programlama dillerinin sağladığı benzer işlevleri kullanarak kendi sayaçlarını da tanımlayabilir. Örneğin, JavaKullanıcı tanımlı sayaçları tanımlamak için 'enum' kullanılır.
💡 Sürüm notu: İş bulma sayaçları İş Kurumu tarafından yönetiliyordu.TracMRv1 altında bu rol MapReduce ApplicationMaster'a aittir. YARN'da ise bu rol MapReduce ApplicationMaster'a aittir, bu nedenle sayaç adları korunur ancak bunları raporlayan bileşen değişir.
Bir iş, sınırsız sayıda sayaç tanımlayamaz. mapreduce.job.counters.max Bu ayar, varsayılan olarak iş başına toplam sayıyı 120 ile sınırlandırır ve daha fazla sayı belirten bir iş başarısız olur. LimitExceededExceptionDolayısıyla sayaçlar, tuş başına sayımlar yerine, bir avuç toplu sinyal için tasarlanmıştır.
Sayaçlar Örneği
Eksik ve geçersiz değerlerin sayısını saymak için sayaçlar içeren örnek bir MapClass. Bu eğitimde kullanılan giriş veri dosyası: Giriş veri setimiz SalesJan2009.csv adlı bir CSV dosyasıdır.
public static class MapClass extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> { static enum SalesCounters { MISSING, INVALID }; public void map ( LongWritable key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException { //Input string is split using ',' and stored in 'fields' array String fields[] = value.toString().split(",", -20); //Value at 4th index is country. It is stored in 'country' variable String country = fields[4]; //Value at 8th index is sales data. It is stored in 'sales' variable String sales = fields[8]; if (country.length() == 0) { reporter.incrCounter(SalesCounters.MISSING, 1); } else if (sales.startsWith("\"")) { reporter.incrCounter(SalesCounters.INVALID, 1); } else { output.collect(new Text(country), new Text(sales + ",1")); } } }
Yukarıdaki kod parçası, Hadoop MapReduce'da sayaçların örnek bir uygulamasını göstermektedir.
Burada, Satış Sayaçları ' ile tanımlanan bir sayaçtır.enumBu, eksik ve geçersiz giriş kayıtlarını saymak için kullanılır.
Kod parçacığında, eğer 'ülke'Alan sıfır uzunlukta ise değeri eksiktir ve bu nedenle ilgili sayaç SalesCounters.MISSING artırılır.'
Ardından, eğer 'satış'Alan " ile başlıyorsa, kayıt GEÇERSİZ kabul edilir. Bu, SalesCounters.INVALID sayacının artmasıyla belirtilir.
💡 API notu: Yukarıdaki alıntı orijinalini kullanıyor. org.apache.hadoop.mapred API, burada MapReduceBase, Mapper arayüzü, OutputCollector hem de Reporter Ayrı ayrı görünürler. Mevcut kod, buna karşı yazılmıştır. org.apache.hadoop.mapreducetek bir Context Toplayıcı ve muhabirin yerini alır ve bir sayaç artırılır. context.getCounter(SalesCounters.MISSING).increment(1)Karşıt kavram her ikisinde de aynıdır.











