• Like
  • Save
クラウド時代の並列分散処理技術
Upcoming SlideShare
Loading in...5
×
 

クラウド時代の並列分散処理技術

on

  • 6,303 views

福岡県Ruby・コンテンツ産業振興センター開所記念Rubyビジネスセミナー

福岡県Ruby・コンテンツ産業振興センター開所記念Rubyビジネスセミナー
http://www.f-ruby.com/news/event/13

Statistics

Views

Total Views
6,303
Views on SlideShare
6,303
Embed Views
0

Actions

Likes
3
Downloads
28
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • We are involved the problem. This is the IDC study. In 2009, we have 0.8 Zetta byte digital data. Zetta bytes means million times of Peta bytes, You know, Mega bytes, Giga, Tera, Peta. Exa, Zetta. We are in “Cloud Era”. Data we have to process get bigger and bigger. In 2020, it will grow by 35 zetta bytes, it’s huge! We all should tackle this “Information Explosion” like this.
  • バズワードは消えていくものだが、クラウドは残る。 ガートナーのハイプサイクル
  • クラウドの向こう側には、データが集約される かつて、世界に5台のコンピュータがあればいいと IBM 初代社長のトーマス・ワトソン・シニアが言ったといわれる クラウドは向こう側で処理をするということなので、集約するほうが費用対効果が高い。ハード・ソフトとも となると、データはますます集約されて大きくなる
  • Ruby はインターネットサービス開発と親和性が高い。開発効率や言語としての柔軟性が高い。 Java と Ruby をつなぐ JRuby という技術を用いる。
  • ドメイン毎に DSL( ドメイン特化言語 ) という形でフレームワーク化し、開発者に MapReduce を意識しない形で処理を書くことができるようにする。 そのフレームワークはオープンソース化していろいろな分野の DSL が開発できるようにする。
  • Hudson という継続的ビルドツールを Hadoop 処理サーバ環境として利用。その上で DSL が実行できるようにする。

クラウド時代の並列分散処理技術 クラウド時代の並列分散処理技術 Presentation Transcript

  • クラウド時代の 並列分散処理技術 2010/12/22 Ruby ビジネスセミナー ハピルス株式会社 藤川幸一 Twitter: @fujibee
  •  
  • アジェンダ
    • 自己紹介
    • クラウド時代と大量データ
    • なぜ並列分散処理が必要か
    • 未踏プロジェクトについて
    • Hapyrus について
    • まとめ
    • 質疑応答
  • 自己紹介
    • 藤川幸一 ハピルス株式会社代表
    • 学生時代から IT ベンチャーに参加
    • Yahoo! JAPAN -> テクノロジックアート -> シンプレクス・テクノロジー -> シリウステクノロジーズ -> 独立
    • 未踏人材育成事業クリエータ
    • 現在は Hadoop を Web サービスとして使うプロダクトを開発中
  • クラウド時代と大量データ
  • クラウド時代とは
    • 「クラウド」がバズワードの時代は終わった?
    • サービス側から見たクラウド
    • システムの構成要素としてのクラウド
  • クラウドと大量データ
    • クラウドの向こう側には・・・
    • クラウドは必然的に集約に向かう
    • 大量データ時代は必然
  • 並列分散処理技術
  • 大量データを処理するには
    • 例えば 400TB( テラバイト・メガバイトの 100 万倍 )
    • 1台で処理すると・・・
      • 読み込みだけで 100 日くらいかかる!
      • 400TB ÷ 50MB/sec ≒ 80,000sec ≒ 2,000 時間 ≒ 92 日
    並列分散の仕組みが必要 例えば: ファイルシステム・処理技術
  • スケールアップとスケールアウト
    • スケールアップ
      • 1台の性能を向上させる
    性能 価格 ある程度まで行くと 価格と性能が比例しない
  • スケールアップとスケールアウト
    • スケールアウト
      • 複数台を並行処理させて性能を向上させる
    性能 価格 ( 台数 ) 価格と性能は (ある程度まで)比例する
  • 並列分散処理は難しい
    • ボトルネックが発生
      • データのやり取り
      • 結果集計
      • 処理を分散させる仕組み
    • 耐障害性
    • プログラミングが難しい
    • 資源の効率的な利用
    引用: Think IT http://thinkit.co.jp/story/2010/06/11/1608
  • 並列分散処理フレームワーク MapReduce
    • Google が開発->論文で公開
    • 開発者は Map と Reduce と呼ばれるプログラムを書く
    • その他の分散に必要な仕組みはフレームワークでカバー
  • Hadoop
    • Google 論文から作られたオープンソースクローン
    • 分散ファイルシステム HDFS を含む
    • ジョブのスケジューリング
    • 部分的にサーバが機能しなくても処理継続できる仕組み
    • などなど
  • 分散データストア技術
    • スケールアウト可能なデータ格納機構
    • 分散キーバリューストア
      • Memcached
      • Cassandra (Facebook)
      • Hbase (Hadoop)
      • Redis (github)
      • 国産のものも
        • Kumofs
        • Roma ( 楽天 )
        • TokyoCabinet
  • Ruby による並列分散処理技術
    • 楽天技術研究所
      • fairy
      • Roma
    • Hadoop を Ruby で利用する
      • Hadoop Streaming
      • Hadoop Papyrus ( 後述 )
  • 未踏プロジェクトについて
  • IPA 未踏人材育成事業
    • 独立行政法人 情報処理推進機構 = IPA
    • 未踏人材育成事業
      • もともとは「未踏ソフトウェア」と呼ばれる
      • 有望なプロジェクトを PM が採択し開発・成果発表を行う
      • 2009 年上期に採択される
  • 私のプロジェクト
    • MapReduce 汎用化のための DSL 基盤・実行基盤の開発
    • もっと簡単に Hadoop を使えるようにしたい!
      • Ruby で
      • DSL( ドメイン特化言語 ) を使って
      • 環境を簡単に準備して実行
  • Hadoop Papyrus
    • Hadoop ジョブを Ruby の DSL で実行できるオープンソースフレームワーク
      • 本来 Hadoop ジョブは Java で記述する
      • Java だと複雑な記述がほんの数行で書ける
    • 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 ; import java.io.IOException ; import java.util.StringTokenizer ; import org.apache.hadoop.conf.Configuration ; 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 ; import org.apache.hadoop.mapreduce.Reducer ; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat ; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat ; import org.apache.hadoop.util.GenericOptionsParser ; public class WordCount { public static class TokenizerMapper extends Mapper < Object , Text , Text , IntWritable > { private final static IntWritable one = new IntWritable ( 1 ); private Text word = new Text (); public void map( Object key , Text value , Context context ) throws IOException , InterruptedException { StringTokenizer itr = new StringTokenizer ( value . toString ()); while ( itr . hasMoreTokens ()) { word . set ( itr . nextToken ()); context . write ( word , one ); } } } public static class IntSumReducer extends Reducer < Text , IntWritable , Text , IntWritable > { private IntWritable result = new IntWritable (); public void reduce( Text key , Iterable < IntWritable > values , Context context ) throws IOException , InterruptedException { int sum = 0 ; for ( IntWritable val : values ) { sum += val . get (); } result . set ( sum ); context . write ( key , result ); } } public static void main( String [] args ) throws Exception { Configuration conf = new Configuration (); String [] otherArgs = new GenericOptionsParser ( conf , args ) . getRemainingArgs (); if ( otherArgs . length != 2 ) { System . err . println ( &quot;Usage: wordcount <in> <out>&quot; ); System . exit ( 2 ); } Job job = new Job ( conf , &quot;word count&quot; ); job . setJarByClass ( WordCount . class ); job . setMapperClass ( TokenizerMapper . class ); job . setCombinerClass ( IntSumReducer . class ); job . setReducerClass ( IntSumReducer . class ); job . setOutputKeyClass ( Text . class ); job . setOutputValueClass ( IntWritable . class ); FileInputFormat . addInputPath ( job , new Path ( otherArgs [ 0 ])); FileOutputFormat . setOutputPath ( job , new Path ( otherArgs [ 1 ])); System . exit ( job . waitForCompletion (true) ? 0 : 1 ); } } 同様な処理が Java では 70 行必要だが、 HadoopPapyrus だと 10 行に! dsl 'LogAnalysis‘ from ‘test/in‘ to ‘test/out’ pattern /[[([^|]:]+)[^]:]*]]/ column_name :link topic &quot;link num&quot;, :label => 'n' do       count_uniq column[:link] end Java Hadoop Papyrus
  • 実際の画面など
    • DEMO
  • Hapyrus について
  • Hadoop は敷居が高い
    • 簡単な試行は簡単
    • でも、ちゃんとしたアプリケーションは難しい
      • 環境構築
      • アプリケーション開発
  • Hadoop をサービスとして使う
    • 環境だけではなく、アプリケーション開発も
    • 用意されたスクリプトによってノウハウを手にできる
  • Hapyrus
    • まもなくベータテスト開始
    • そのフィードバックをもとに、 2011 年早いうちに公開予定
  • Sneak Preview
    • DEMO
  • まとめ
    • クラウド時代は大量データ時代
    • 大量データを処理するには並列分散技術が必要
    • 数々の並列分散処理技術
      • 特に Hadoop について
    • 私の取り組みの紹介
      • 未踏での Ruby x Hadoop
      • Hapyrus
  • ご清聴ありがとうございました