Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
MapReduce入門 2011-04-08 社内勉強会
MapReduceとは並列分散処理用のフレームワークです。mapとreduceという処理を組み合わせて処理を行う点が特徴です。
map処理入力ファイルの各行からKeyとValueの組み合わせを作る処理です。例えば、ファイルの中にある単語数を数えるような処理(wordcount)の場合、各行にある単語毎にKeyとValueの組み合わせを作ることになります。
reduce処理map処理で作られたKeyとValueの組み合わせから別のKeyとValueの組み合わせを作る処理です。なお、reduceの入力は自動的にMapReduceによって自動的にKey毎にValueがまとめられた状態になっています。
wordcount:map処理wordcountであるため、keyが単語、valueが「1」となります。
wordcount:reduce処理reduceの入力時にkey(単語)ごとにvalue「1」がまとめられます。そしてreduceにおいて「1」を足して出現回数が求められます。
wordcountのソース(1) : map処理public static class TokenizerMapper extends  Mapper<Object, Text, Text, IntWritable> {    private ...
wordcountのソース(2) : reduce処理public static class IntSumReducer extends     Reducer<Text, IntWritable, Text, IntWritable> {  ...
wordcountのソース(3) : main処理public static void main(String[] args) throws Exception {  Configuration conf = new Configuration...
wordcountのソース(4) : Driverpublic class ExampleDriver {  public static void main(String argv[]){     int exitCode = -1;     ...
wordcount(1)【内容】ファイル中の単語数をカウントするMapReduceジョブです。Hadoopに付属しているサンプルプログラムです。以下のようにして実行します。【コマンド】$ hadoop jar /usr/src/hadoop-0...
wordcount(2)【内容】wordcountの処理結果の確認をします。ホームディレクトリにwordcountというディレクトリが作成されていることが分かります。【コマンド】$ hadoop fs -ls【結果】Found 2 items-...
wordcount(3)【内容】wordcountディレクトリの中に処理結果のファイル(part-r-00000)が格納されていることを確認します。【コマンド】$ hadoop fs -ls wordcount【結果】Found 2 items...
wordcount(4)【内容】処理結果のファイル(part-r-00000)の中身を見てみます。【コマンド】$ hadoop fs -cat wordcount/p* | less【結果】To    2You 1a    1access 1a...
MapReduceの構成
MapReduceがやってくれること 分散処理の制御   複数台のコンピューターの制御(タスクの割り当て)   タスクを割り当てたコンピューターに障害が発生した場合に   別のコンピューターに割り当てて再実行 入力ファイルの分割   各mapに...
その他の機能不良レコードのスキップカウンタージョブスケジューラーHadoopストリーミング  スクリプト言語でmapおよびreduce処理を実装できる。Hadoop Pipes  C++でmapおよびreduce処理を実装できる。
Upcoming SlideShare
Loading in …5
×

MapReduce入門

25,008 views

Published on

  • Sex in your area is here: ❤❤❤ http://bit.ly/2F90ZZC ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2F90ZZC ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Get Paid On Social Media Sites? YES! View 1000s of companies hiring social media managers now! ●●● https://tinyurl.com/rbrfd6j
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

MapReduce入門

  1. 1. MapReduce入門 2011-04-08 社内勉強会
  2. 2. MapReduceとは並列分散処理用のフレームワークです。mapとreduceという処理を組み合わせて処理を行う点が特徴です。
  3. 3. map処理入力ファイルの各行からKeyとValueの組み合わせを作る処理です。例えば、ファイルの中にある単語数を数えるような処理(wordcount)の場合、各行にある単語毎にKeyとValueの組み合わせを作ることになります。
  4. 4. reduce処理map処理で作られたKeyとValueの組み合わせから別のKeyとValueの組み合わせを作る処理です。なお、reduceの入力は自動的にMapReduceによって自動的にKey毎にValueがまとめられた状態になっています。
  5. 5. wordcount:map処理wordcountであるため、keyが単語、valueが「1」となります。
  6. 6. wordcount:reduce処理reduceの入力時にkey(単語)ごとにvalue「1」がまとめられます。そしてreduceにおいて「1」を足して出現回数が求められます。
  7. 7. wordcountのソース(1) : map処理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); } }}
  8. 8. wordcountのソース(2) : reduce処理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); }}
  9. 9. wordcountのソース(3) : main処理public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args) .getRemainingArgs(); if (otherArgs.length != 2) { System.err.println("Usage: wordcount <in> <out>"); System.exit(2); } Job job = new Job(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(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true) ? 0 : 1);}
  10. 10. wordcountのソース(4) : Driverpublic class ExampleDriver { public static void main(String argv[]){ int exitCode = -1; ProgramDriver pgd = new ProgramDriver(); try { pgd.addClass("wordcount", WordCount.class, "A map/reduce program that counts the words in the input files."); pgd.driver(argv); // Success exitCode = 0; } catch(Throwable e){ e.printStackTrace(); } System.exit(exitCode); }}
  11. 11. wordcount(1)【内容】ファイル中の単語数をカウントするMapReduceジョブです。Hadoopに付属しているサンプルプログラムです。以下のようにして実行します。【コマンド】$ hadoop jar /usr/src/hadoop-0.20.1+133/hadoop-0.20.1+133-examples.jar wordcount hdfs_readme wordcount【構文】$ hadoop jar <jarファイルのpath> <実行するジョブ> <入力ファイル...> <出力ディレクトリ>
  12. 12. wordcount(2)【内容】wordcountの処理結果の確認をします。ホームディレクトリにwordcountというディレクトリが作成されていることが分かります。【コマンド】$ hadoop fs -ls【結果】Found 2 items-rw-r--r-- 1 training supergroup 538 2010-12-13 09:09 /user/training/hdfs_readmedrwxr-xr-x - training supergroup 0 2010-12-15 06:16 /user/training/wordcount
  13. 13. wordcount(3)【内容】wordcountディレクトリの中に処理結果のファイル(part-r-00000)が格納されていることを確認します。【コマンド】$ hadoop fs -ls wordcount【結果】Found 2 itemsdrwxr-xr-x - training supergroup 0 2010-12-15 06:15 /user/training/wordcount/_logs-rw-r--r-- 1 training supergroup 582 2010-12-15 06:15 /user/training/wordcount/part-r-00000
  14. 14. wordcount(4)【内容】処理結果のファイル(part-r-00000)の中身を見てみます。【コマンド】$ hadoop fs -cat wordcount/p* | less【結果】To 2You 1a 1access 1all 1and 3
  15. 15. MapReduceの構成
  16. 16. MapReduceがやってくれること 分散処理の制御 複数台のコンピューターの制御(タスクの割り当て) タスクを割り当てたコンピューターに障害が発生した場合に 別のコンピューターに割り当てて再実行 入力ファイルの分割 各mapに処理対象となる入力ファイルを割り当てる mapで処理した結果をreduceに渡す その際にmapの出力結果についてkey単位でvalueをまとめる
  17. 17. その他の機能不良レコードのスキップカウンタージョブスケジューラーHadoopストリーミング スクリプト言語でmapおよびreduce処理を実装できる。Hadoop Pipes C++でmapおよびreduce処理を実装できる。

×