狠狠撸
Submit Search
Rakuten tech conf
?
1 like
?
1,066 views
Koichi Fujikawa
Follow
Rakuten Technology Conference 2010
Read less
Read more
1 of 15
Download now
Download to read offline
More Related Content
Rakuten tech conf
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.
闯搁耻产测で贬补诲辞辞辫にアクセス
Hadoop Hadoop Hadoop IPC Client Client JobTracker JobTracker <JRuby> <JRuby> <Java> <Java> Hadoop内のオブジェクトデータに 直接アクセス可能!
15.
ありがとうございました Twitter
ID: @fujibee
Download