Evet arkadaşlar, şimdi birleştirilebilir ve ayrılabilir iplik kavramını uygulamanızı sağlayacak bir
alıştırma yapacağız.
Bu alıştırmada MapReduce kavramını uygulayacağız.
Şimdi MapReduce'un ne olduğuna dair bir açıklamaya ihtiyacınız olduğuna eminim.
Yani MapReduce bir şey değildir, ancak böl ve yönet paradigmasına dayanan bir programlama modelidir.
Değil mi?
Öyleyse şunu anlayalım.
Bir örnek yardımıyla, bir metin dosyanız olduğunu ve metin dosyasının çok büyük olabileceğini varsayalım.
Ancak örneğimiz için, bu metin dosyasının 1200 satır olduğunu varsayalım.
1200 satır metin.
Değil mi?
Problem cümlemiz ise bu metin dosyasındaki kelime sayısını saymamız gerektiğidir.
Şimdi, soru oldukça basit ve anlaşılır ve neden bu metin dosyalarının tüm satırlarını tarayacak
ve sadece metin dosyasındaki kelime sayısını sayacak basit bir program yazmadığınızı iddia
edeceksiniz.
Bunu her zaman yapabilirsiniz.
Ancak bizim problem cümlemiz bu problemi MapReduce kavramını kullanarak çözmektir.
Bir MapReduce uygulayacağınız zaman, temel olarak birleştirilebilir ve ayrılmış iş parçacıkları kavramını
uygulayacaksınız.
Değil mi?
MapReduce'a aşina olduktan sonra, MapReduce paradigmasının pratik etkilerinin ve kullanımının ne olduğunu
tartışacağım.
Şimdi öncelikle MapReduce'un ne olduğunu anlayalım.
Problem cümlemiz bu metin dosyasındaki kelime sayısını saymaktı, değil mi?
Şimdi MapReduce programlama modelinin bu sorunu bizim için nasıl çözebileceğini tartışalım.
Diyelim ki bir ana iş parçacığımız var ya da buna moderatör iş parçacığı diyelim.
Yani bir sürecimiz var.
P ve süreçteki başlıklardan birine moderatör başlığı deniyor, değil mi?
Şimdi moderatör iş parçacığının sorumluluğu, büyük bir işi daha küçük parçalara bölmek ve daha sonra bu küçük iş parçalarını
ayrı ayrı işçi iş parçacıklarına tahsis etmektir.
Doğru.
Dediğim gibi, işçi iş parçacıkları, işçi iş parçacıkları olarak adlandırılan daha fazla iş parçacığı oluşturmanın moderatör iş parçacığının
sorumluluğunda olduğu anlamına gelir.
Böylece moderatör iş parçacıklarının yalnızca işçi iş parçacıkları oluşturmakla kalmadığını, aynı zamanda onlara iş atadığını da görebilirsiniz.
Değil mi?
Elimizde 1200 satırlık bir metin dosyası vardı ve moderatör iş parçacıkları işi böldü ve şimdi her iş
parçacığına, bu iş parçacıklarının her birinin çalışması gereken metin dosyasının sabit bir satır sayısı
aralığı atandı.
Örneğin, W1 işçi iş parçacığına 0 ile 399 arasında değişen sayıda satır atanmıştır.
İşçi iş parçacığı yalnızca bu sayıda satırı taramak ve bu satırlardaki kelime sayısını saymak zorundadır.
Benzer şekilde, W2 iş parçacığı metin dosyasında 400'den 700'e kadar olan satırları saymalı ve sadece bu satırlar
arasındaki kelime sayısını saymalıdır.
Değil mi?
Benzer şekilde, işçi iş parçacığına da 800 numaralı satırdan itibaren bir metin dosyasındaki kelime
sayısını sayma sorumluluğu verilir.
1199.
Değil mi?
Böylece moderatör iş parçacığının daha büyük bir iş parçasını daha küçük iş parçalarına böldüğünü ve
her bir işin ayrı bir iş parçacığına atandığını görebilirsiniz.
Doğru.
Şimdi MapReduce terminolojisinde işçi iş parçacıklarına mapper deniyor, değil mi?
Ve eşleyiciler paylaşılmayan veriler üzerinde bağımsız olarak çalışır, değil mi?
Yani burada metin dosyası aynıdır, ancak bu metin dosyasında bulunan satır sayısı işçi iş parçacıkları
arasında ayrık olmayan bir şekilde paylaştırılmıştır.
Doğru.
Bu da basitçe her bir eşleyici iş parçacığına tamamlanması gereken bir iş atandığı anlamına gelir.
Ve bu çalışmalar birbiriyle örtüşmüyor, değil mi?
Bunlar bağımsız çalışmalardır.
Şimdi, moderatör iş parçacığı işçi iş parçacıklarının her birine sorumluluk atadığında, moderatör iş parçacığı
işçi iş parçacıklarının işlerini bitirmesini ve sonuç vermesini beklemek zorundadır.
Yani bu basitçe, işçi iş parçacığının tüm işçi iş parçacıkları işlerini bitirip sonucu döndürene kadar beklemesi gerektiği
anlamına gelir.
Bu da basitçe, moderatör iş parçacığının p iş parçacığını çağırması, fonksiyona katılması ve her bir iş parçacığının işini bitirip
ilgili sonuçları döndürmesini beklemesi gerektiği anlamına gelir.
Doğru.
Bu da basitçe moderatör ipliklerinin ilk birleşme noktasında bloke olacağı anlamına gelir.
Doğru.
Bu nedenle, tüm işçilerin işlerini bitirmesini bekleyen iş parçacığına azaltıcı iş parçacığı denir.
MapReduce terminolojisinde, işçi iş parçacıklarının işlerini bitirmesini bekleyen iş parçacığına azaltıcı
iş parçacığı denir.
Yani örneğimizde, moderatör iş parçacığı aynı zamanda bir azaltıcı iş parçacığıdır, ancak zorunlu değildir.
Bir moderatör dişi, bir redüktör dişinden farklı olabilir.
Doğru.
Şimdi W1, W2 ve W3 işçi iş parçacıklarının her birinin işlerini bitirdiğini ve sonuç olarak moderatör iş parçacığına
katıldıklarını varsayalım.
Değil mi?
İşlerini bitirdikten sonra moderatör iş parçacığına geri döndüklerinde, ilgili sonuçlarıyla birlikte işçi iş
parçacığına katılırlar.
Doğru.
W1 iş parçacığının sonucunu S1 değişkeninde döndürdüğünü varsayalım.
W2 ve W3 iş parçacığı da sonucu S2 ve S3 değişkenlerinde döndürmüştür.
Doğru.
Şimdi, tüm işçi iş parçacıkları azaltıcı iş parçacığına katıldığında, moderatör iş parçacığı veya azaltıcı iş
parçacığı artık tüm birleşme noktalarının ötesinde hesaplamasına devam edebilir.
Doğru.
Bu örnekte, w bir iş parçacığının 0 ile 399 satırları arasında metin dosyasındaki
kelime sayısının X olduğunu hesapladığını ve benzer şekilde w iki iş parçacığının y ve w üç iş parçacığının
Z döndürdüğünü varsayalım.
Doğru.
Yani X, Y ve Z, işçi iş parçacıkları tarafından moderatör veya redüktör iş parçacığına döndürülen değerlerdir.
Doğru.
Şimdi, redüktör iş parçacığı ilgili işçi iş parçacıkları tarafından döndürülen tüm bu değerlere sahip olduğunda, redüktör
iş parçacığı nihai sonucu gerçekten hesaplayabilecek bir konumda olacaktır.
Peki nihai sonuç nedir?
Nihai sonuç hiçbir şey değildir ancak indirgeyici iş parçacığının yalnızca üç değeri toplaması gerekir.
Yani x artı y artı z.
Doğru.
Bu da size metin dosyasındaki toplam kelime sayısını verecektir.
Doğru.
Dediğim gibi, ılımlı bir tehdidin azaltılmasına gerek yoktur, bir tehdittir.
Farklı tehditler olabilirler.
Şimdi MapReduce'un nasıl çalıştığını anladınız.
Moderatör ipliği adı verilen ve büyük bir çalışmayı daha küçük bağımsız birimlere ayıran bir
iplik vardır.
Daha sonra bu küçük işlerin her biri eşleyici iş parçacığı adı verilen ayrı bir iş parçacığına atanır, ardından indirgeyici iş parçacıkları
tüm işçi iş parçacıklarının kendi iş parçalarını gerçekten bitirmesini, çalışmasını ve sonucu döndürmesini bekler.
Ve tüm iş parçacıkları işlerini bitirip sonuç döndürdüğünde, azaltıcı iş parçacığı her bir
iş parçacığı tarafından döndürülen sonucu kullanarak birleştirilmiş sonucu hesaplar.
Bu durumda, birleştirilmiş sonuç X artı y artı Z'dir.
Doğru.
Burada dikkat edilmesi gereken nokta, tüm eşleyici iş parçacıkları kendi sonuçlarını döndürene kadar azaltıcı iş parçacığının
engellenmesidir.
Doğru.
Bir iş parçacığı toplanmış sonucu hesaplamaya başlayamaz.
Eşleyici iş parçacıklarından herhangi biri sonucunu döndürmemişse.
Doğru.
MapReduce programlama modeli bu şekilde çalışır.
Yani böl ve yönet paradigması ilkesine göre çalışır.
Yani konsept bu.
Şimdi bu problemi postfix Multithreading çerçevesini kullanarak uygulayacağız.