Your SlideShare is downloading. ×
0
Hadoop Job Builder型安全なジョブ設定     2011-02-22  Hadoop Conference   @miyakawa_taku
要旨• Hadoop MapReduce のジョブ設定って面倒です• 中間データ (map の出力 = reduce の入力) の型を  一致させる事がとりわけ面倒です⇒ 簡潔かつ型安全にジョブを設定する Hadoop Job  Builder...
文書中の単語を数える    word-count ジョブの mapper と reducerpublic class WordCountMapper ①  extends Mapper<LongWritable, Text, Text, Int...
中間データの型は一致させる必要がある      map の出力 = reduce の入力public class WordCountMapper          ①        ②  extends Mapper<LongWritable,...
word-count のジョブ設定                    こんなに書くJob job = new Job( getConf() );job.setJobName( "word-count" );job.setJarByClass...
やっかいな中間データの設定Job job = new Job( getConf() );job.setJobName( "word-count" );job.setJarByClass( getClass() );job.setMapperCl...
combiner や partitioner を使うと          これらの型も一致させる必要があるJob job = new Job( getConf() );job.setJobName( "word-count" );job.set...
ちょっとしたパフォーマンスチューニングでpublic class WordCountMapper                   ①  extends Mapper<LongWritable, Text, Text, IntWritable...
型が一致しなくなるとpublic class WordCountMapper                   ①  extends Mapper<LongWritable, Text, Text, IntWritable> {  ...}p...
コンパイルは通って             タスクの処理中に実行時エラー11/02/20 03:07:21 INFO mapred.JobClient: Task Id :attempt_201102200304_0001_r_000000_2...
MapReduce API は気が利かない• map, reduce のクラス定義に型情報が含まれてい  るのに、別途わざわざ型を指定するのは冗長• 型が一致していなかったらコンパイル時にエラーが  出てほしい⇒ 簡潔かつ型安全にジョブを設定し...
簡潔かつ型安全にジョブが設定できる        ライブラリを作りましたJob job = JobBuilder.of(    new WordCountMapper() , new WordCountReducer() )  .jobName...
中間データの型をクラス定義から推論して設定      ⇒ 型が省略できるJob job = JobBuilder.of(                         ①                ②    new WordCountMa...
型が一致しないとコンパイルエラー           ⇒ 型安全Job job = JobBuilder.of(                         ①                ②    new WordCountMapper...
combiner や partitioner も型安全に設定Job job = JobBuilder.of(                         ①                  ②    new WordCountMapper...
他にも便利  16
出力データの型をクラス定義から推論して設定Job job = JobBuilder.of(    new WordCountMapper() , new WordCountReducer() )  .jobName( "word-count" ...
入力元・出力先を簡潔に設定Job job = JobBuilder.of(    new WordCountMapper() , new WordCountReducer() )  .jobName( "word-count" )  .dete...
分散キャッシュを簡潔に設定Job job = JobBuilder.of(    new WordCountMapper() , new WordCountReducer() )  .jobName( "word-count" )  .dete...
総括• Hadoop Job Builder は簡潔かつ型安全に Hadoop  のジョブを設定するライブラリです• BitBucket に公開しています  – https://bitbucket.org/miyakawa_taku/hadoo...
Upcoming SlideShare
Loading in...5
×

Hadoop jobbuilder

1,499

Published on

Presentation about the Hadoop Job Builder library on Hadoop Conference Japan 2011.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,499
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Hadoop jobbuilder"

  1. 1. Hadoop Job Builder型安全なジョブ設定 2011-02-22 Hadoop Conference @miyakawa_taku
  2. 2. 要旨• Hadoop MapReduce のジョブ設定って面倒です• 中間データ (map の出力 = reduce の入力) の型を 一致させる事がとりわけ面倒です⇒ 簡潔かつ型安全にジョブを設定する Hadoop Job Builder というライブラリを作りました 2
  3. 3. 文書中の単語を数える word-count ジョブの mapper と reducerpublic class WordCountMapper ① extends Mapper<LongWritable, Text, Text, IntWritable> { ...}public class WordCountReducer ② extends Reducer<Text, IntWritable, Text, IntWritable> { ...} 3
  4. 4. 中間データの型は一致させる必要がある map の出力 = reduce の入力public class WordCountMapper ① ② extends Mapper<LongWritable, Text, Text, IntWritable> { ...}public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> { ... ③ ④} 4
  5. 5. word-count のジョブ設定 こんなに書くJob job = new Job( getConf() );job.setJobName( "word-count" );job.setJarByClass( getClass() );job.setMapperClass( WordCountMapper.class );job.setMapOutputKeyClass( Text.class );job.setMapOutputValueClass( IntWritable.class );job.setReducerClass( WordCountReducer.class );job.setOutputKeyClass( Text.class );job.setOutputValueClass( IntWritable.class );job.setInputFormatClass( TextInputFormat.class );FileInputFormat.addInputPath( job , new Path( "wordcount/in" ) );job.setOutputFormatClass( SequenceFileOutputFormat.class );FileOutputFormat.setOutputPath( job , new Path( "wordcount/out" ) ); 5
  6. 6. やっかいな中間データの設定Job job = new Job( getConf() );job.setJobName( "word-count" );job.setJarByClass( getClass() );job.setMapperClass( WordCountMapper.class ); ①job.setMapOutputKeyClass( Text.class ); ②job.setMapOutputValueClass( IntWritable.class ); ③job.setReducerClass( WordCountReducer.class ); ④job.setOutputKeyClass( Text.class );job.setOutputValueClass( IntWritable.class );job.setInputFormatClass( TextInputFormat.class );FileInputFormat.addInputPath( job , new Path( "wordcount/in" ) );job.setOutputFormatClass( SequenceFileOutputFormat.class );FileOutputFormat.setOutputPath( job , new Path( "wordcount/out" ) ); 6
  7. 7. combiner や partitioner を使うと これらの型も一致させる必要があるJob job = new Job( getConf() );job.setJobName( "word-count" );job.setJarByClass( getClass() );job.setMapperClass( WordCountMapper.class ); ①job.setMapOutputKeyClass( Text.class ); ②job.setMapOutputValueClass( IntWritable.class ); ③job.setReducerClass( WordCountReducer.class ); ④job.setCombinerClass( WordCountCombiner.class ); ⑤job.setPartitionerClass( WordCountPartitioner.class ); ⑥job.setOutputKeyClass( Text.class );job.setOutputValueClass( IntWritable.class );job.setInputFormatClass( TextInputFormat.class );FileInputFormat.addInputPath( job , new Path( "wordcount/in" ) );job.setOutputFormatClass( SequenceFileOutputFormat.class );FileOutputFormat.setOutputPath( job , new Path( "wordcount/out" ) ); 7
  8. 8. ちょっとしたパフォーマンスチューニングでpublic class WordCountMapper ① extends Mapper<LongWritable, Text, Text, IntWritable> { ...}public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> { ... ②} 8
  9. 9. 型が一致しなくなるとpublic class WordCountMapper ① extends Mapper<LongWritable, Text, Text, IntWritable> { ...}public class WordCountReducer extends Reducer<Text, VIntWritable, Text, VIntWritable> { ... ②} 9
  10. 10. コンパイルは通って タスクの処理中に実行時エラー11/02/20 03:07:21 INFO mapred.JobClient: Task Id :attempt_201102200304_0001_r_000000_2, Status : FAILEDjava.lang.ClassCastException: org.apache.hadoop.io.IntWritable cannot be cast toorg.apache.hadoop.io.VIntWritable at org.example.WordCountReducer.reduce(WordCountReducer.java:76) at org.example.WordCountReducer.reduce(WordCountReducer.java:67) at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:176) at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:566) at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:408) at org.apache.hadoop.mapred.Child.main(Child.java:170) 10
  11. 11. MapReduce API は気が利かない• map, reduce のクラス定義に型情報が含まれてい るのに、別途わざわざ型を指定するのは冗長• 型が一致していなかったらコンパイル時にエラーが 出てほしい⇒ 簡潔かつ型安全にジョブを設定したい 11
  12. 12. 簡潔かつ型安全にジョブが設定できる ライブラリを作りましたJob job = JobBuilder.of( new WordCountMapper() , new WordCountReducer() ) .jobName( "word-count" ) .detectJar() .detectKeyValue() .inputTextFrom( "wordcount/in" ) .outputSequenceFileOn( "wordcount/out" ) .buildJob( getConf() ); 12
  13. 13. 中間データの型をクラス定義から推論して設定 ⇒ 型が省略できるJob job = JobBuilder.of( ① ② new WordCountMapper() , new WordCountReducer() ) .jobName( "word-count" ) .detectJar() .detectKeyValue() ③ .inputTextFrom( "wordcount/in" ) .outputSequenceFileOn( "wordcount/out" ) .buildJob( getConf() ); 13
  14. 14. 型が一致しないとコンパイルエラー ⇒ 型安全Job job = JobBuilder.of( ① ② new WordCountMapper() , new WordCountReducer() ) .jobName( "word-count" ) .detectJar() .detectKeyValue() .inputTextFrom( "wordcount/in" ) .outputSequenceFileOn( "wordcount/out" ) .buildJob( getConf() ); 14
  15. 15. combiner や partitioner も型安全に設定Job job = JobBuilder.of( ① ② new WordCountMapper() , new WordCountReducer() ) .jobName( "word-count" ) .detectJar() .detectKeyValue() ③ .combiner( new WordCountCombiner() ) ④ .partitioner( new WordCountPartitioner() ) .inputTextFrom( "wordcount/in" ) .outputSequenceFileOn( "wordcount/out" ) .buildJob( getConf() ); 15
  16. 16. 他にも便利 16
  17. 17. 出力データの型をクラス定義から推論して設定Job job = JobBuilder.of( new WordCountMapper() , new WordCountReducer() ) .jobName( "word-count" ) .detectJar() .detectKeyValue() .inputTextFrom( "wordcount/in" ) .outputSequenceFileOn( "wordcount/out" ) .buildJob( getConf() ); 17
  18. 18. 入力元・出力先を簡潔に設定Job job = JobBuilder.of( new WordCountMapper() , new WordCountReducer() ) .jobName( "word-count" ) .detectJar() .detectKeyValue() .inputTextFrom( "wordcount/in" ) .outputSequenceFileOn( "wordcount/out" ) .buildJob( getConf() ); 18
  19. 19. 分散キャッシュを簡潔に設定Job job = JobBuilder.of( new WordCountMapper() , new WordCountReducer() ) .jobName( "word-count" ) .detectJar() .detectKeyValue() .inputTextFrom( "wordcount/in" ) .outputSequenceFileOn( "wordcount/out" ) .cacheFileWithSymlink( "/share/dict.txt" , "dict.txt" ) .buildJob( getConf() ); 19
  20. 20. 総括• Hadoop Job Builder は簡潔かつ型安全に Hadoop のジョブを設定するライブラリです• BitBucket に公開しています – https://bitbucket.org/miyakawa_taku/hadoop-job- builder/wiki/Home.ja• 感想ください ⇒ @miyakawa_taku ⇒ BitBucket の issue tracker 20
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×