Jrubyで実現する
分散並列処理フレームワーク
   Hadoop Papyrus
         and more...

       2010/10/16
 楽天テクノロジーカンファレンス2010

   日本JRubyユーザ会/ハピルス株式会社
 藤川幸一 FUJIKAWA Koichi @fujibee
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
Hadoop Papyrus
Hadoopとは?

    大規模データ並列分散処理フレームワーク
Google MapReduceのオープンソースク



ローン

    テラバイトレベルのデータ処理に必要
    
        標準的なHDDがRead 50MB/sとして
        400TB(Webスケール)のReadだけで2000時間
    
        分散ファイルシステムと分散処理フレームワー
        クが必要
Hadoop Papyrus

HadoopジョブをRubyのDSLで実行できる



オープンソースフレームワーク
    
      本来HadoopジョブはJavaで記述する
    
      Javaだと複雑な記述がほんの数行で書ける

 IPA未踏本体2009年上期のサポート

 Hudson上でジョブを記述/実行が可能
Step.1
JavaではなくRubyで記述
Step.2
RubyによるDSLでMapReduceを
シンプルに

     Map   Reduce      Job
                    Description




                                  Log Analysis
                                      DSL
Step.3
Hadoopサーバ構成を容易に利用可能に
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
Hadoop Papyrus 詳細
Javaで書く必要があるMap/Reduce処理内
で、JRubyを利用してRubyスクリプトを呼び出す
Hadoop Papyrus 詳細 (続き)
さらに、処理したい内容(ログ分析など)を記述したDSLを用意して
おき、Map処理、Reduce処理でそれぞれ異なる動きをさせることで1
枚のDSL記述でMapReduce処理を行うことができる。
Hapyrus について
Hapyrus (ハピルス)
・HapyrusはHadoop処理などの大量並列分散処理
のベストプラクティスを共有・実行するサービス
・Amazon EC2上に構築されHadoopをサービスと
して利用できる
・内部的にJRubyを利用
 – HadoopとRuby(RoR利用)の接続として
・2010年10月からハピルス株式会社として開発開
始・鋭意開発中!
・年末にはアルファ版公開予定
                ご期待ください!
JRubyでHadoopにアクセス



                          Hadoop
                           Hadoop
           Hadoop IPC
 Client
  Client                JobTracker
                         JobTracker
<JRuby>
<JRuby>                   <Java>
                           <Java>
 Hadoop内のオブジェクトデータに
 直接アクセス可能!
ありがとうございました




  Twitter ID: @fujibee

More Related Content

PPTX
20071030
PPTX
SQLチューニング入門 入門編
PPT
20090107 Postgre Sqlチューニング(Sql編)
PDF
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
KEY
はじめてのCouch db
PDF
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
PDF
PostgreSQL 10 新機能 @オープンセミナー香川 2017
20071030
SQLチューニング入門 入門編
20090107 Postgre Sqlチューニング(Sql編)
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
はじめてのCouch db
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
PostgreSQL 10 新機能 @オープンセミナー香川 2017

What's hot (19)

PDF
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
PPT
クラウド時代の並列分散処理技術
PDF
Pg14_sql_standard_function_body
PDF
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PDF
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
PDF
Elasticsearch入門 pyfes 201207
PDF
PostgreSQLの関数属性を知ろう
PDF
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
PDF
PostgreSQLとPythonとSQL
PPTX
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
PDF
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PDF
Introduction Xtend
PDF
PostgreSQL:行数推定を読み解く
PDF
Pgunconf 20121212-postgeres fdw
PDF
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
PDF
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PDF
RailsエンジニアのためのSQLチューニング速習会
PDF
Boostライブラリ一周の旅
PPTX
R -> Python
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
クラウド時代の並列分散処理技術
Pg14_sql_standard_function_body
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
Elasticsearch入門 pyfes 201207
PostgreSQLの関数属性を知ろう
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
PostgreSQLとPythonとSQL
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
Introduction Xtend
PostgreSQL:行数推定を読み解く
Pgunconf 20121212-postgeres fdw
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
RailsエンジニアのためのSQLチューニング速習会
Boostライブラリ一周の旅
R -> Python
Ad

Viewers also liked (6)

DOC
Technology Plan For Stevenson Ms Table
PPT
Trends WCM 2010
PPT
GUIAS DE NADAL
PDF
Cloud computing competition by Hapyrus
PDF
Hadoop Conf Japan 2009 After Party LT - Hadoop Ruby DSL
PDF
Design of a_dsl_by_ruby_for_heavy_computations
Technology Plan For Stevenson Ms Table
Trends WCM 2010
GUIAS DE NADAL
Cloud computing competition by Hapyrus
Hadoop Conf Japan 2009 After Party LT - Hadoop Ruby DSL
Design of a_dsl_by_ruby_for_heavy_computations
Ad

Similar to Rakuten tech conf (12)

PDF
MapReduce入門
PDF
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
PDF
ただいまHadoop勉強中
PDF
Hadoop jobbuilder
PDF
Java x Groovy: improve your java development life
PPT
Scala on Hadoop
PDF
OSC2011 Tokyo/Spring Hadoop入門
PDF
Monadicプログラミング マニアックス
PDF
Hadoop - OSC2010 Tokyo/Spring
PDF
OSC2012 OSC.DB Hadoop
PDF
Hadoop入門
PDF
Hadoop事始め
MapReduce入門
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
ただいまHadoop勉強中
Hadoop jobbuilder
Java x Groovy: improve your java development life
Scala on Hadoop
OSC2011 Tokyo/Spring Hadoop入門
Monadicプログラミング マニアックス
Hadoop - OSC2010 Tokyo/Spring
OSC2012 OSC.DB Hadoop
Hadoop入門
Hadoop事始め

Recently uploaded (12)

PDF
R-SCoRe: Revisiting Scene Coordinate Regression for Robust Large-Scale Visual...
PPTX
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
PDF
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
PPTX
Vibe Codingを触って感じた現実について.pptx .
PPTX
Cosense - 整えずして完全勝利!Cosenseが他のwikiツールと違う理由
PDF
Working as an OSS Developer at Ruby Association Activity Report 2025
PDF
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
PDF
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
PDF
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
PDF
Yamaha DT200WR Real Enduro ENGINE CYLINDER TRANSMISSION
PDF
20250823_IoTLT_vol126_kitazaki_v1___.pdf
R-SCoRe: Revisiting Scene Coordinate Regression for Robust Large-Scale Visual...
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
Vibe Codingを触って感じた現実について.pptx .
Cosense - 整えずして完全勝利!Cosenseが他のwikiツールと違う理由
Working as an OSS Developer at Ruby Association Activity Report 2025
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
Yamaha DT200WR Real Enduro ENGINE CYLINDER TRANSMISSION
20250823_IoTLT_vol126_kitazaki_v1___.pdf

Rakuten tech conf