MapReduce framework(kütüphane)'ü 2 önemli task(görev)'i içerir.
- Map
- Reduce
Bir MapReduce job'ı, genellikle girilen verilere bağımsız olarak block'lara ayırır ki bunlar parallel bir şekilde map task tarafında yürütülür. Framework(kütüphane), map'in çıktıklarını sort(sıralar) eder ve sonra reduce task ile girdileri azaltır(gruplar).
MapReduce iş akışı oluşturmak için 2 script yazmak gerekir, bunlar map ve reduce scriptleridir. Şimdi bir senaryo üzerinde MapReduce uygulaması gerçekleştirelim
Senaryo:Yaygın olarak kullanılan wordcount uygulaması, yani HDFS'te bulunan bir file'daki kelimelerin kaç kez kullanıldığını gösteren MapReduce uygulaması.
Yukardaki MapReduce örneğinin scripti aşağıda yer almaktadır.
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount {
public static class TokenizerMapper
extends Mapper
Yukardaki java kodunu kendi sisteminizde uygulamanız için aşağıdaki işlemleri sırasıyla yapmanız gerekemektedir.
1-Aşağıdaki ortam değişkenlilerini sistem set etmelisiniz
export JAVA_HOME=/usr/java/default
export PATH=${JAVA_HOME}/bin:${PATH}
export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar
2-Yukarıda oluşturmuş olduğumuz wordcount java dosyasını compile(derlemek) edip ve jar dosyası oluşturmamiz gerekmektedir.
$bin/hadoop com.sun.tools.javac.main wordcount.java
$jar cf wc.jar wordcount*.class
3-Wordcount jar dosyası için input ve output diresctory'ları HDFS'te oluşturmamız gerekmektedir.
- /user/sukru/wordcount/input - input directory in HDFS
- /user/sukru/wordcount/output - output directory in HDFS
4-Input için HDFS'de /user/sukru/wordcount/input directory'sinde 2 file(file01,file02) tanımladığımızı varsayalım. Aşağıdaki komutlarlar ile de dosya içeriğini görelim
$bin/hadoop fs -cat /user/sukru/wordcount/input/file01
Dear, Bear,River
$bin/hadoop fs -cat /user/sukru/wordcount/input/file02
Car,Car,River,Dear,Car,Bear
5-Şimdi uygulamayı çalıştıralım.
$bin/hadoop jar wc.jar wordcount /user/sukru/wordcount/input /user/sukru/wordcount/output
6-Uygulama çıktısını görelim.
$bin/hadoop fs -cat /user/sukru/wordcount/output/part-r-0000
Bear 2
Car 3
River 2
Dear 2
0 yorum:
Yorum Gönder