SlideShare ist ein Scribd-Unternehmen logo
1 von 15
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017Shigeru Hanada
 
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」Tsuyoshi Yamamoto
 
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術Koichi Fujikawa
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_bodyPg14_sql_standard_function_body
Pg14_sql_standard_function_bodykasaharatt
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)Satoshi Yamada
 
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料kasaharatt
 
Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207Jun Ohtani
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろうPostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろうkasaharatt
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-uedayou
 
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQLPostgreSQLとPythonとSQL
PostgreSQLとPythonとSQLSatoshi Yamada
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccYujiSoftware
 
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)Satoshi Yamada
 
PostgreSQL:行数推定を読み解く
PostgreSQL:行数推定を読み解くPostgreSQL:行数推定を読み解く
PostgreSQL:行数推定を読み解くHiroya Kabata
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwToshi Harada
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」Nagi Teramo
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)Satoshi Yamada
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会Nao Minami
 
Boostライブラリ一周の旅
Boostライブラリ一周の旅 Boostライブラリ一周の旅
Boostライブラリ一周の旅 Akira Takahashi
 

Was ist angesagt? (20)

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

Andere mochten auch

Technology Plan For Stevenson Ms Table
Technology Plan For Stevenson Ms TableTechnology Plan For Stevenson Ms Table
Technology Plan For Stevenson Ms TableDana Luterman
 
GUIAS DE NADAL
GUIAS DE NADALGUIAS DE NADAL
GUIAS DE NADALboello
 
Cloud computing competition by Hapyrus
Cloud computing competition by HapyrusCloud computing competition by Hapyrus
Cloud computing competition by HapyrusKoichi Fujikawa
 
Hadoop Conf Japan 2009 After Party LT - Hadoop Ruby DSL
Hadoop Conf Japan 2009 After Party LT - Hadoop Ruby DSLHadoop Conf Japan 2009 After Party LT - Hadoop Ruby DSL
Hadoop Conf Japan 2009 After Party LT - Hadoop Ruby DSLKoichi Fujikawa
 
Design of a_dsl_by_ruby_for_heavy_computations
Design of a_dsl_by_ruby_for_heavy_computationsDesign of a_dsl_by_ruby_for_heavy_computations
Design of a_dsl_by_ruby_for_heavy_computationsKoichi Fujikawa
 

Andere mochten auch (6)

Technology Plan For Stevenson Ms Table
Technology Plan For Stevenson Ms TableTechnology Plan For Stevenson Ms Table
Technology Plan For Stevenson Ms Table
 
Trends WCM 2010
Trends WCM 2010Trends WCM 2010
Trends WCM 2010
 
GUIAS DE NADAL
GUIAS DE NADALGUIAS DE NADAL
GUIAS DE NADAL
 
Cloud computing competition by Hapyrus
Cloud computing competition by HapyrusCloud computing competition by Hapyrus
Cloud computing competition by Hapyrus
 
Hadoop Conf Japan 2009 After Party LT - Hadoop Ruby DSL
Hadoop Conf Japan 2009 After Party LT - Hadoop Ruby DSLHadoop Conf Japan 2009 After Party LT - Hadoop Ruby DSL
Hadoop Conf Japan 2009 After Party LT - Hadoop Ruby DSL
 
Design of a_dsl_by_ruby_for_heavy_computations
Design of a_dsl_by_ruby_for_heavy_computationsDesign of a_dsl_by_ruby_for_heavy_computations
Design of a_dsl_by_ruby_for_heavy_computations
 

Ähnlich wie Rakuten tech conf

ただいまHadoop勉強中
ただいまHadoop勉強中ただいまHadoop勉強中
ただいまHadoop勉強中Satoshi Noto
 
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)YoheiOkuyama
 
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうかOedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうかMinero Aoki
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義JPCERT Coordination Center
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development lifeUehara Junji
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門Yohei Sasaki
 
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うXtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うTatsumi Naganuma
 
実動するIot&hadoopから学ぶ会_資料
実動するIot&hadoopから学ぶ会_資料実動するIot&hadoopから学ぶ会_資料
実動するIot&hadoopから学ぶ会_資料FwardNetwork
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方Satoshi Nagayasu
 
第2回デザインパターン資料
第2回デザインパターン資料第2回デザインパターン資料
第2回デザインパターン資料gaaupp
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能についてshigeki_ohtsu
 
明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7Yuichi Sakuraba
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2Atsuo Yamasaki
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java心 谷本
 

Ähnlich wie Rakuten tech conf (20)

Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
MapReduce入門
MapReduce入門MapReduce入門
MapReduce入門
 
ただいまHadoop勉強中
ただいまHadoop勉強中ただいまHadoop勉強中
ただいまHadoop勉強中
 
Project lambda
Project lambdaProject lambda
Project lambda
 
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
 
Hadoop jobbuilder
Hadoop jobbuilderHadoop jobbuilder
Hadoop jobbuilder
 
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうかOedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
 
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うXtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使う
 
実動するIot&hadoopから学ぶ会_資料
実動するIot&hadoopから学ぶ会_資料実動するIot&hadoopから学ぶ会_資料
実動するIot&hadoopから学ぶ会_資料
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
 
第2回デザインパターン資料
第2回デザインパターン資料第2回デザインパターン資料
第2回デザインパターン資料
 
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
 
明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java
 

Rakuten tech conf