Rakuten tech conf

  • 1,459 views
Uploaded on

Rakuten Technology Conference 2010

Rakuten Technology Conference 2010

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,459
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
10
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Jrubyで実現する 分散並列処理フレームワーク Hadoop Papyrus and more... 2010/10/16 楽天テクノロジーカンファレンス2010 日本JRubyユーザ会/ハピルス株式会社 藤川幸一 FUJIKAWA Koichi @fujibee
  • 2. JRubyユーザ会 ・2010年5月に設立 ・Jrubyユーザの交流の場として、勉強会などを  行っている ・第0回 設立準備会 ・第1回 Google AppEngine with JRuby ・第2回 JRubyユーザ会 in RubyKaigi2010 ・第3回 <今ココ> ・参加希望はML(Google Group)へ登録!  http://groups.google.com/group/jruby-users-jp
  • 3. Hadoop Papyrus
  • 4. Hadoopとは?  大規模データ並列分散処理フレームワーク Google MapReduceのオープンソースク  ローン  テラバイトレベルのデータ処理に必要  標準的なHDDがRead 50MB/sとして 400TB(Webスケール)のReadだけで2000時間  分散ファイルシステムと分散処理フレームワー クが必要
  • 5. Hadoop Papyrus HadoopジョブをRubyのDSLで実行できる  オープンソースフレームワーク  本来HadoopジョブはJavaで記述する  Javaだと複雑な記述がほんの数行で書ける  IPA未踏本体2009年上期のサポート  Hudson上でジョブを記述/実行が可能
  • 6. Step.1 JavaではなくRubyで記述
  • 7. Step.2 RubyによるDSLでMapReduceを シンプルに Map Reduce Job Description Log Analysis DSL
  • 8. Step.3 Hadoopサーバ構成を容易に利用可能に
  • 9. package org.apache.hadoop.examples; Java import java.io.IOException; import java.util.StringTokenizer; 同様な処理がJavaでは70行必要だが、 import org.apache.hadoop.conf.Configuration ; HadoopPapyrusだと10行に! 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 ; public static class IntSumReducer extends import org.apache.hadoop.mapreduce.Reducer ; Reducer<Text, IntWritable, Text, IntWritable> { import org.apache.hadoop.mapreduce.lib.input.FileInputFormat ; private IntWritable result = new IntWritable(); import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat ; import org.apache.hadoop.util.GenericOptionsParser ; public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { public class WordCountint sum = 0; { for (IntWritable val : values) { sum += val.get(); public static class TokenizerMapper extends } Mapper<Object, Text, Text, IntWritable> { result.set(sum); Hadoop Papyrus context.write(key, result); } private final static IntWritable one = new IntWritable(1); dsl 'LogAnalysis‘ } private Text word = new Text(); public static void main(String[] args) throws Exception { public void map(Object key, Text value,conf = new Configuration(); Configuration Context context) from ‘test/in‘ throws IOException, InterruptedException { = new GenericOptionsParser(conf, args) String[] otherArgs StringTokenizer itr = new StringTokenizer(value.toString()); .getRemainingArgs(); to ‘test/out’ while (itr.hasMoreTokens()) {(otherArgs.length != 2) { if word.set(itr.nextToken()); System.err.println("Usage: wordcount <in> <out>"); context.write(word, one); System.exit(2); } } } pattern /[[([^|]:]+)[^]:]*]]/ Job job = new Job(conf, "word count"); } job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); column_name :link job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); topic "link num", :label => 'n' do FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); count_uniq column[:link] } } end
  • 10. Hadoop Papyrus 詳細 Javaで書く必要があるMap/Reduce処理内 で、JRubyを利用してRubyスクリプトを呼び出す
  • 11. Hadoop Papyrus 詳細 (続き) さらに、処理したい内容(ログ分析など)を記述したDSLを用意して おき、Map処理、Reduce処理でそれぞれ異なる動きをさせることで1 枚のDSL記述でMapReduce処理を行うことができる。
  • 12. Hapyrus について
  • 13. Hapyrus (ハピルス) ・HapyrusはHadoop処理などの大量並列分散処理 のベストプラクティスを共有・実行するサービス ・Amazon EC2上に構築されHadoopをサービスと して利用できる ・内部的にJRubyを利用 – HadoopとRuby(RoR利用)の接続として ・2010年10月からハピルス株式会社として開発開 始・鋭意開発中! ・年末にはアルファ版公開予定 ご期待ください!
  • 14. JRubyでHadoopにアクセス Hadoop Hadoop Hadoop IPC Client Client JobTracker JobTracker <JRuby> <JRuby> <Java> <Java> Hadoop内のオブジェクトデータに 直接アクセス可能!
  • 15. ありがとうございました Twitter ID: @fujibee