WEBVTT

00:05.000 --> 00:10.490
Evet arkadaşlar, şimdi birleştirilebilir ve ayrılabilir iplik kavramını uygulamanızı sağlayacak bir

00:10.490 --> 00:11.780
alıştırma yapacağız.

00:11.900 --> 00:15.980
Bu alıştırmada MapReduce kavramını uygulayacağız.

00:16.010 --> 00:19.910
Şimdi MapReduce'un ne olduğuna dair bir açıklamaya ihtiyacınız olduğuna eminim.

00:19.940 --> 00:25.760
Yani MapReduce bir şey değildir, ancak böl ve yönet paradigmasına dayanan bir programlama modelidir.

00:25.760 --> 00:26.480
Değil mi?

00:26.510 --> 00:27.890
Öyleyse şunu anlayalım.

00:27.890 --> 00:34.220
Bir örnek yardımıyla, bir metin dosyanız olduğunu ve metin dosyasının çok büyük olabileceğini varsayalım.

00:34.220 --> 00:39.470
Ancak örneğimiz için, bu metin dosyasının 1200 satır olduğunu varsayalım.

00:39.590 --> 00:41.330
1200 satır metin.

00:41.330 --> 00:41.990
Değil mi?

00:43.070 --> 00:47.990
Problem cümlemiz ise bu metin dosyasındaki kelime sayısını saymamız gerektiğidir.

00:48.080 --> 00:53.270
Şimdi, soru oldukça basit ve anlaşılır ve neden bu metin dosyalarının tüm satırlarını tarayacak

00:53.270 --> 00:58.340
ve sadece metin dosyasındaki kelime sayısını sayacak basit bir program yazmadığınızı iddia

00:58.340 --> 00:59.330
edeceksiniz.

00:59.480 --> 01:00.950
Bunu her zaman yapabilirsiniz.

01:00.950 --> 01:06.090
Ancak bizim problem cümlemiz bu problemi MapReduce kavramını kullanarak çözmektir.

01:06.110 --> 01:12.350
Bir MapReduce uygulayacağınız zaman, temel olarak birleştirilebilir ve ayrılmış iş parçacıkları kavramını

01:12.350 --> 01:13.550
uygulayacaksınız.

01:13.550 --> 01:14.300
Değil mi?

01:15.110 --> 01:21.680
MapReduce'a aşina olduktan sonra, MapReduce paradigmasının pratik etkilerinin ve kullanımının ne olduğunu

01:21.680 --> 01:23.130
tartışacağım.

01:23.150 --> 01:26.010
Şimdi öncelikle MapReduce'un ne olduğunu anlayalım.

01:26.030 --> 01:30.210
Problem cümlemiz bu metin dosyasındaki kelime sayısını saymaktı, değil mi?

01:30.230 --> 01:35.960
Şimdi MapReduce programlama modelinin bu sorunu bizim için nasıl çözebileceğini tartışalım.

01:36.230 --> 01:42.260
Diyelim ki bir ana iş parçacığımız var ya da buna moderatör iş parçacığı diyelim.

01:42.290 --> 01:43.640
Yani bir sürecimiz var.

01:43.670 --> 01:48.470
P ve süreçteki başlıklardan birine moderatör başlığı deniyor, değil mi?

01:49.260 --> 01:56.670
Ş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ı

01:56.670 --> 02:00.510
ayrı ayrı işçi iş parçacıklarına tahsis etmektir.

02:00.540 --> 02:01.170
Doğru.

02:01.170 --> 02:07.530
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

02:07.530 --> 02:09.470
sorumluluğunda olduğu anlamına gelir.

02:09.480 --> 02:16.260
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.

02:16.260 --> 02:17.100
Değil mi?

02:17.250 --> 02:24.330
Elimizde 1200 satırlık bir metin dosyası vardı ve moderatör iş parçacıkları işi böldü ve şimdi her iş

02:24.360 --> 02:31.980
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ı

02:32.010 --> 02:33.240
aralığı atandı.

02:33.270 --> 02:40.080
Örneğin, W1 işçi iş parçacığına 0 ile 399 arasında değişen sayıda satır atanmıştır.

02:40.110 --> 02:46.800
İşçi iş parçacığı yalnızca bu sayıda satırı taramak ve bu satırlardaki kelime sayısını saymak zorundadır.

02:46.830 --> 02:54.130
Benzer şekilde, W2 iş parçacığı metin dosyasında 400'den 700'e kadar olan satırları saymalı ve sadece bu satırlar

02:54.130 --> 02:56.770
arasındaki kelime sayısını saymalıdır.

02:56.770 --> 02:57.460
Değil mi?

02:57.490 --> 03:03.370
Benzer şekilde, işçi iş parçacığına da 800 numaralı satırdan itibaren bir metin dosyasındaki kelime

03:03.370 --> 03:05.770
sayısını sayma sorumluluğu verilir.

03:06.960 --> 03:08.430
1199.

03:08.460 --> 03:09.260
Değil mi?

03:09.270 --> 03:16.680
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

03:16.680 --> 03:21.480
her bir işin ayrı bir iş parçacığına atandığını görebilirsiniz.

03:21.510 --> 03:22.290
Doğru.

03:23.580 --> 03:29.640
Şimdi MapReduce terminolojisinde işçi iş parçacıklarına mapper deniyor, değil mi?

03:29.640 --> 03:33.810
Ve eşleyiciler paylaşılmayan veriler üzerinde bağımsız olarak çalışır, değil mi?

03:33.810 --> 03:39.810
Yani burada metin dosyası aynıdır, ancak bu metin dosyasında bulunan satır sayısı işçi iş parçacıkları

03:39.810 --> 03:43.380
arasında ayrık olmayan bir şekilde paylaştırılmıştır.

03:43.380 --> 03:44.130
Doğru.

03:45.360 --> 03:51.420
Bu da basitçe her bir eşleyici iş parçacığına tamamlanması gereken bir iş atandığı anlamına gelir.

03:51.420 --> 03:55.560
Ve bu çalışmalar birbiriyle örtüşmüyor, değil mi?

03:55.590 --> 03:57.630
Bunlar bağımsız çalışmalardır.

03:57.840 --> 04:04.560
Şimdi, moderatör iş parçacığı işçi iş parçacıklarının her birine sorumluluk atadığında, moderatör iş parçacığı

04:04.560 --> 04:10.080
işçi iş parçacıklarının işlerini bitirmesini ve sonuç vermesini beklemek zorundadır.

04:10.110 --> 04:16.950
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

04:16.950 --> 04:18.210
anlamına gelir.

04:18.240 --> 04:24.780
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

04:24.780 --> 04:28.800
ilgili sonuçları döndürmesini beklemesi gerektiği anlamına gelir.

04:28.800 --> 04:29.550
Doğru.

04:30.390 --> 04:34.780
Bu da basitçe moderatör ipliklerinin ilk birleşme noktasında bloke olacağı anlamına gelir.

04:34.800 --> 04:35.550
Doğru.

04:35.970 --> 04:41.760
Bu nedenle, tüm işçilerin işlerini bitirmesini bekleyen iş parçacığına azaltıcı iş parçacığı denir.

04:41.790 --> 04:48.030
MapReduce terminolojisinde, işçi iş parçacıklarının işlerini bitirmesini bekleyen iş parçacığına azaltıcı

04:48.030 --> 04:49.710
iş parçacığı denir.

04:49.740 --> 04:56.790
Yani örneğimizde, moderatör iş parçacığı aynı zamanda bir azaltıcı iş parçacığıdır, ancak zorunlu değildir.

04:56.820 --> 05:00.090
Bir moderatör dişi, bir redüktör dişinden farklı olabilir.

05:00.090 --> 05:00.810
Doğru.

05:01.640 --> 05:08.930
Ş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

05:08.930 --> 05:11.660
katıldıklarını varsayalım.

05:11.660 --> 05:12.440
Değil mi?

05:12.920 --> 05:18.890
İşlerini bitirdikten sonra moderatör iş parçacığına geri döndüklerinde, ilgili sonuçlarıyla birlikte işçi iş

05:18.890 --> 05:20.390
parçacığına katılırlar.

05:20.390 --> 05:21.080
Doğru.

05:21.290 --> 05:28.280
W1 iş parçacığının sonucunu S1 değişkeninde döndürdüğünü varsayalım.

05:28.310 --> 05:35.510
W2 ve W3 iş parçacığı da sonucu S2 ve S3 değişkenlerinde döndürmüştür.

05:35.540 --> 05:36.230
Doğru.

05:37.360 --> 05:44.500
Ş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ş

05:44.500 --> 05:50.160
parçacığı artık tüm birleşme noktalarının ötesinde hesaplamasına devam edebilir.

05:50.170 --> 05:50.860
Doğru.

05:53.030 --> 05:59.300
Bu örnekte, w bir iş parçacığının 0 ile 399 satırları arasında metin dosyasındaki

05:59.300 --> 06:08.210
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

06:08.210 --> 06:12.160
Z döndürdüğünü varsayalım.

06:12.170 --> 06:12.940
Doğru.

06:12.950 --> 06:20.930
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.

06:20.960 --> 06:21.710
Doğru.

06:22.470 --> 06:28.920
Ş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

06:28.920 --> 06:33.190
iş parçacığı nihai sonucu gerçekten hesaplayabilecek bir konumda olacaktır.

06:33.210 --> 06:34.700
Peki nihai sonuç nedir?

06:34.710 --> 06:41.100
Nihai sonuç hiçbir şey değildir ancak indirgeyici iş parçacığının yalnızca üç değeri toplaması gerekir.

06:41.100 --> 06:42.720
Yani x artı y artı z.

06:42.960 --> 06:43.650
Doğru.

06:43.650 --> 06:47.010
Bu da size metin dosyasındaki toplam kelime sayısını verecektir.

06:47.010 --> 06:47.700
Doğru.

06:48.570 --> 06:51.900
Dediğim gibi, ılımlı bir tehdidin azaltılmasına gerek yoktur, bir tehdittir.

06:51.930 --> 06:53.640
Farklı tehditler olabilirler.

06:53.970 --> 06:57.060
Şimdi MapReduce'un nasıl çalıştığını anladınız.

06:57.300 --> 07:03.480
Moderatör ipliği adı verilen ve büyük bir çalışmayı daha küçük bağımsız birimlere ayıran bir

07:03.480 --> 07:04.490
iplik vardır.

07:04.500 --> 07:10.320
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ı

07:10.320 --> 07:16.440
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.

07:16.440 --> 07:22.440
Ve tüm iş parçacıkları işlerini bitirip sonuç döndürdüğünde, azaltıcı iş parçacığı her bir

07:22.440 --> 07:28.610
iş parçacığı tarafından döndürülen sonucu kullanarak birleştirilmiş sonucu hesaplar.

07:28.620 --> 07:32.100
Bu durumda, birleştirilmiş sonuç X artı y artı Z'dir.

07:32.100 --> 07:32.820
Doğru.

07:32.820 --> 07:39.090
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

07:39.090 --> 07:40.770
engellenmesidir.

07:40.800 --> 07:41.550
Doğru.

07:42.330 --> 07:46.350
Bir iş parçacığı toplanmış sonucu hesaplamaya başlayamaz.

07:46.380 --> 07:50.190
Eşleyici iş parçacıklarından herhangi biri sonucunu döndürmemişse.

07:50.190 --> 07:50.940
Doğru.

07:51.780 --> 07:54.930
MapReduce programlama modeli bu şekilde çalışır.

07:54.930 --> 07:59.130
Yani böl ve yönet paradigması ilkesine göre çalışır.

07:59.580 --> 08:00.900
Yani konsept bu.

08:00.930 --> 08:06.450
Şimdi bu problemi postfix Multithreading çerçevesini kullanarak uygulayacağız.
