">

Hadoop'da ilk Deneme :)

Hadoop'da ilk Deneme :)


Merhaba Arkadaşlar,

Hadoopda yapacağımız ilk çalışma dosyadaki kelimeleri sayan bir program yazmak. bu deneme benim içinde ilk olacak:) Aşağıdaki siteyi refans olarak görstermekte fayda var :)

https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html

  • ilk olarak hadoop file sistemini açarız.

          hdfs namenod -format

  • Aşağıdaki kodu WordCount.java isimli dosyaya kaydedili.

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<Object, Text, Text, IntWritable>{

 

    private final static IntWritable one = new IntWritable(1);

    private Text word = new Text();

 

    public void map(Object key, Text value, Context context

                    ) throws IOException, InterruptedException {

      StringTokenizer itr = new StringTokenizer(value.toString());

      while (itr.hasMoreTokens()) {

        word.set(itr.nextToken());

        context.write(word, one);

      }

    }

  }

 

  public static class IntSumReducer

       extends Reducer<Text,IntWritable,Text,IntWritable> {

    private IntWritable result = new IntWritable();

 

    public void reduce(Text key, Iterable<IntWritable> values,

                       Context context

                       ) throws IOException, InterruptedException {

      int sum = 0;

      for (IntWritable val : values) {

        sum += val.get();

      }

      result.set(sum);

      context.write(key, result);

    }

  }

 

  public static void main(String[] args) throws Exception {

    Configuration conf = new Configuration();

    Job job = Job.getInstance(conf, "word count");

    job.setJarByClass(WordCount.class);

    job.setMapperClass(TokenizerMapper.class);

    job.setCombinerClass(IntSumReducer.class);

    job.setReducerClass(IntSumReducer.class);

    job.setOutputKeyClass(Text.class);

    job.setOutputValueClass(IntWritable.class);

    FileInputFormat.addInputPath(job, new Path(args[0]));

    FileOutputFormat.setOutputPath(job, new Path(args[1]));

    System.exit(job.waitForCompletion(true) ? 0 : 1);

  }

}


  • Aşağıdaki export komutunu set etmeden find ile o jar bulunu ve opath set edilir.

Find /usr/lib/hadoop –name tools.far

export HADOOP_CLASSPATH=/usr/java/jdk1.7.0_67-cloudera/lib/tools.jar

  • Aşağıdaki komut çalıştırılarak classlar oluşturulur.
hadoop com.sun.tools.javac.Main WordCount.java 
  • Aşağıdaki komut ile jar oluşturulur.
jar cf wc.jar WordCount*.class
  • Daha sonra aşağıdaki komutlar ile iki adet dosya oluşturulur.

Echo “engin yılmaz deneme hadoop öğreniyor deneme hadoop deneme” >>test.txt

Echo “istanbul istanbul istatanbul engin deneme” >> test2.txt

  • Bu oluşan dosyaları hadoop’a da input diye bir klasör oluşturup içerisine koyalım

Hadoop fs –mkdir input

Hadoop fs –moveFromLocal text.txt

Hadoop fs –moveFromLocal text2.txt

Hadoop fs –mv text*.txt input

  • Dahasonra aşağıdaki komutu çalıştırarak output diye bir kalasör oluşturup text.txt ve text2.txt dosyalarında yazan kelimelerin kaç tane olduğunu saydıracağız.

hadoop jar wc.jar WordCount input output

  • Aşağıdaki komut ile dosyadaki yazan kelimelerin kaçar tane olduğunu söleyen dosyayı görüntüleyebiliriz.Ekran görüntüsüde aşağıda mevcuttur.

hadoop fs -cat output/part-r-00000

Umarım faydalı olmuştur...

Yorumlar

Henüz yorum yapılmadı.

Yorum Yapın