SlideShare a Scribd company logo
1 of 14
Download to read offline
分散ストリーム処理
 フレームワーク
  Apache S4

 ヱヂリウム株式会社
   渡邉卓也
Apache S4
✜特徴
 ❚ 汎用分散ストリーム処理フレームワーク
 ❚ スケーラブル
   ノード数に制限無し
 ❚ それなりの耐障害性
 ❚ 高い拡張性
   JSON経由で様々な言語とやりとり可能
✜記述言語
 ❚ Java

          Advanced Tech Night No. 4   1
開発状況
✜歴史
 ❚ 2008年10月:Yahoo! Labsで開発開始
 ❚ 2009年9月:オープンソース化
 ❚ 2011年10月:Apache Incubatorへ
✜現行バージョン
 ❚ 0.3.0



                   http://incubator.apache.org/s4/

           Advanced Tech Night No. 4                 2
「リアルタイム」?
✜ 素早い応答
 ❚ ミリ秒台から遅くても数秒を想定
 ❚ ただし、(組み込み系のような)応答時間に絶対
   的な制約がある用途向きではない
✜ 開発者の想定している用途
 ❚ 集計・フィルタ処理から
   例:クリックスルーレートを算出
 ❚ より高度な、適応的な処理までさまざま
   例:ユーザの検索行動をリアルタイムに解析、個々人に
    最適化された広告を表示
   実際にYahoo!でパーソナライズドサーチに利用されてい
    る、そうです
          Advanced Tech Night No. 4   3
アーキテクチャ
✜ 構成要素
 ❚ PE (Processing Elements)
 ❚ App
    ストリームで繋がったPEたち
 ❚ イベント
    PEにより生成、消費
    ストリーム上を流れる

                                                  App
                     PE1          イベント

                                            PE2
                             ストリーム

                Advanced Tech Night No. 4               4
イベント
✜実体
 ❚ Javaのオブジェクト
✜構成要素
 ❚ 属性(attribute)と値
 ❚ MapReduceと類似
 ❚ ただし
   型付けされている
   複数存在できる
   PEはどの属性をキーにするかを選べる(key
    attribute)
           Advanced Tech Night No. 4   5
Processing Elements
✜ 特殊なPE
 ❚ キー無しPE
   入力ストリーム中の全てのイベントを消費
   最初のPEに使われる事が多い
 ❚ プロトタイプ
   キー属性毎に一つ作られる
✜ 通常のPE
 ❚ インスタンス
   属性の値毎に作られる
   プロトタイプをコピーすることで生成される
   各ノードに分散して配置


            Advanced Tech Night No. 4   6
簡単なPEの例
                                             必ずこのクラスを継承する

 public class SentenceReceiverPE extends AbstractPE {

     public void processEvent(Sentence sentence) {
         System.out.printf("Sentence is '%s', location %sn", sentence.getText(),
                           sentence.getLocation());
     }

     @Override
     public void output() {                    型毎に定義
         // not called in this example
     }

     @Override
     public String getId() {
         return this.getClass().getName();
     }
 }




                      http://docs.s4.io/manual/getting_events_into_s4.html
                             Advanced Tech Night No. 4                              7
定義ファイルの例

                       PEプロトタイプの名前
  <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <bean id="eventCatcher" class="io.s4.example.speech01.SentenceReceiverPE">
      <property name="keys">
        <list>
           <value>RawSentence *</value>
        </list>
      </property>
    </bean>
  </beans>                         全てのキーを受け取る(キー無し)

   入力ストリームの名前


                    http://docs.s4.io/manual/getting_events_into_s4.html
                          Advanced Tech Night No. 4                              8
<bean id="rerouteSentencePE" class="io.s4.processor.ReroutePE">
ジョイン処理用                      <property name="id" value="rerouteSentencePE"/>
                             <property name="dispatcher" ref="dispatcher"/>
定義ファイルの例                     <property name="keys">
                               <list>
                                 <value>RawSentence *</value>
                               </list>
                             </property>                出力のキーを指定する
                             <property name="outputStreamName" value="Sentence"/>
                           </bean>

<bean id="sentenceJoinPE" class="io.s4.processor.JoinPE">
  <property name="id" value="sentenceJoinPE"/>
  <property name="keys">
    <list>
      <value>Sentence speechId</value>
      <value>Speech id</value>                          select Sentence.*, Speech.location
    </list>                                             into SentenceJoined
  </property>                                           from Sentence, Speech
  <property name="includeFields">                       where Sentence.speechId = Speech.id
    <list>
      <value>Sentence *</value>
      <value>Speech location</value>
    </list>
  </property>
  <property name="outputStreamName" value="SentenceJoined"/>
  <property name="outputClassName" value="io.s4.example.speech01.Sentence"/>
  <property name="dispatcher" ref="dispatcher"/>
  <property name="ttl" value="600"/>
</bean>

                                   http://docs.s4.io/manual/joining_streams.html
インスタンスの生存期間                      Advanced Tech Night No. 4                                    9
耐障害性
✜高可用性
 ❚ 各ノードは対等
 ❚ スタンバイしているノードを常時用意
 ❚ 障害発生時に切り替え(ウォームフェイル
   オーバ)
 ❚ ZooKeeperを利用
✜チェックポインティング
 ❚ ロシー


         Advanced Tech Night No. 4   10
Stormとの比較

                       S4               Storm

                  イベント
入出力対象                                   タプル
             (オブジェクト)

ノードの役割分                               サーバ・クライ
                      対称
   担                                    アント

接続関係の定義       定義ファイル                   プログラム


全数処理の保証               無し                有り


          Advanced Tech Night No. 4             11
最近の動き
✜Prototype app builder
   ❚ EDSLで接続関係を定義できるように


pe("Print").type(PrintPE.class).asSingleton().

pe("User Count").type(CounterPE.class).fireOn(Event.class).
        afterInterval(100, TimeUnit.MILLISECONDS).
        emit(CountEvent.class).withKeyFinder(new CountKeyFinder()).to("Print").

       pe("Generate User Event").type(GenerateUserEventPE.class).timer().
       withPeriod(1, TimeUnit.MILLISECONDS).asSingleton().

       emit(UserEvent.class).withKeyFinder(new UserIDKeyFinder()).
       to("User Count").

       build();


                          Advanced Tech Night No. 4                               12
まとめ
✜MapReduceと従来のストリーム処理モ
 デルの融合
 ❚ Stormと比べモデルは複雑
 ❚ 込み入った処理はより簡潔に書けるかも




         Advanced Tech Night No. 4   13

More Related Content

What's hot

ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイドEtsuji Nakai
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!ksk_ha
 
Linux女子部 iptables復習編
Linux女子部 iptables復習編Linux女子部 iptables復習編
Linux女子部 iptables復習編Etsuji Nakai
 
オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~
オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~
オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~Satoshi Shimazaki
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
入門!Software Defined Network
入門!Software Defined Network入門!Software Defined Network
入門!Software Defined NetworkEtsuji Nakai
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例kazuhcurry
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudsamemoon
 
RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門Etsuji Nakai
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3openrtm
 
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造Etsuji Nakai
 
試して覚えるPacemaker入門 『リソース設定編』
試して覚えるPacemaker入門 『リソース設定編』試して覚えるPacemaker入門 『リソース設定編』
試して覚えるPacemaker入門 『リソース設定編』健太 松浦
 
Pacemakerを使いこなそう
Pacemakerを使いこなそうPacemakerを使いこなそう
Pacemakerを使いこなそうTakatoshi Matsuo
 
痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさ痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさTakatoshi Matsuo
 
第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介ksk_ha
 
Aeolus Conductorによる複数環境へのデプロイ自動化
Aeolus Conductorによる複数環境へのデプロイ自動化Aeolus Conductorによる複数環境へのデプロイ自動化
Aeolus Conductorによる複数環境へのデプロイ自動化Etsuji Nakai
 
第7回oss貢献者賞 森-20120316
第7回oss貢献者賞 森-20120316第7回oss貢献者賞 森-20120316
第7回oss貢献者賞 森-20120316ksk_ha
 
Pacemaker NextGen OSC2012TokyoFall-20120908
Pacemaker NextGen OSC2012TokyoFall-20120908Pacemaker NextGen OSC2012TokyoFall-20120908
Pacemaker NextGen OSC2012TokyoFall-20120908ksk_ha
 
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化Takatoshi Matsuo
 

What's hot (20)

ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!
 
Linux女子部 iptables復習編
Linux女子部 iptables復習編Linux女子部 iptables復習編
Linux女子部 iptables復習編
 
オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~
オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~
オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
入門!Software Defined Network
入門!Software Defined Network入門!Software Defined Network
入門!Software Defined Network
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloud
 
RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
 
試して覚えるPacemaker入門 『リソース設定編』
試して覚えるPacemaker入門 『リソース設定編』試して覚えるPacemaker入門 『リソース設定編』
試して覚えるPacemaker入門 『リソース設定編』
 
Pacemakerを使いこなそう
Pacemakerを使いこなそうPacemakerを使いこなそう
Pacemakerを使いこなそう
 
痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさ痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさ
 
第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介
 
Aeolus Conductorによる複数環境へのデプロイ自動化
Aeolus Conductorによる複数環境へのデプロイ自動化Aeolus Conductorによる複数環境へのデプロイ自動化
Aeolus Conductorによる複数環境へのデプロイ自動化
 
第7回oss貢献者賞 森-20120316
第7回oss貢献者賞 森-20120316第7回oss貢献者賞 森-20120316
第7回oss貢献者賞 森-20120316
 
Pacemaker NextGen OSC2012TokyoFall-20120908
Pacemaker NextGen OSC2012TokyoFall-20120908Pacemaker NextGen OSC2012TokyoFall-20120908
Pacemaker NextGen OSC2012TokyoFall-20120908
 
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 

Viewers also liked

ビッグデータ関連Oss動向調査とニーズ分析
ビッグデータ関連Oss動向調査とニーズ分析ビッグデータ関連Oss動向調査とニーズ分析
ビッグデータ関連Oss動向調査とニーズ分析Yukio Yoshida
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムSatoshi Iijima
 
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkTakanori Suzuki
 
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11MapR Technologies Japan
 
DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術DMM.com
 
Maxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミングMaxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミングNVIDIA Japan
 
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11MapR Technologies Japan
 

Viewers also liked (9)

ビッグデータ関連Oss動向調査とニーズ分析
ビッグデータ関連Oss動向調査とニーズ分析ビッグデータ関連Oss動向調査とニーズ分析
ビッグデータ関連Oss動向調査とニーズ分析
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システム
 
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache Flink
 
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
 
ストリームデータ分散処理基盤Storm
ストリームデータ分散処理基盤Stormストリームデータ分散処理基盤Storm
ストリームデータ分散処理基盤Storm
 
DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術
 
Maxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミングMaxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミング
 
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
事例から見るNoSQLの使い方 - db tech showcase Tokyo 2015 2015/06/11
 
Flink vs. Spark
Flink vs. SparkFlink vs. Spark
Flink vs. Spark
 

Similar to 分散ストリーム処理フレームワーク Apache S4

最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)Rui Hirokawa
 
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性JPCERT Coordination Center
 
明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7Yuichi Sakuraba
 
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成Yu Nobuoka
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情takezoe
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter IntegrationKazuki Nakajima
 
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発Nomura Yusuke
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangTakeru INOUE
 
Java ee6 with scala
Java ee6 with scalaJava ee6 with scala
Java ee6 with scalaSatoshi Kubo
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolateskoichik
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaYuta Kawadai
 

Similar to 分散ストリーム処理フレームワーク Apache S4 (20)

最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
 
明日から使える Java SE 7
明日から使える Java SE 7明日から使える Java SE 7
明日から使える Java SE 7
 
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
Java EE8 Report
Java EE8 ReportJava EE8 Report
Java EE8 Report
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
Gaej Jdo
Gaej JdoGaej Jdo
Gaej Jdo
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Spock's world
Spock's worldSpock's world
Spock's world
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
 
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / Erlang
 
Java ee6 with scala
Java ee6 with scalaJava ee6 with scala
Java ee6 with scala
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
 

More from AdvancedTechNight

CSS3Rendererを使ってiOSでもサクサク3D
CSS3Rendererを使ってiOSでもサクサク3DCSS3Rendererを使ってiOSでもサクサク3D
CSS3Rendererを使ってiOSでもサクサク3DAdvancedTechNight
 
D3.jsと学ぶVisualization(可視化)の世界
D3.jsと学ぶVisualization(可視化)の世界D3.jsと学ぶVisualization(可視化)の世界
D3.jsと学ぶVisualization(可視化)の世界AdvancedTechNight
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めようAdvancedTechNight
 
CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現AdvancedTechNight
 
これから利用拡大?WebSocket
これから利用拡大?WebSocketこれから利用拡大?WebSocket
これから利用拡大?WebSocketAdvancedTechNight
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験AdvancedTechNight
 
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
TypeScriptのススメ ~JavaエンジニアのためのJava(like)ScriptTypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
TypeScriptのススメ ~JavaエンジニアのためのJava(like)ScriptAdvancedTechNight
 
three.jsで作る3Dの世界
three.jsで作る3Dの世界three.jsで作る3Dの世界
three.jsで作る3Dの世界AdvancedTechNight
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」AdvancedTechNight
 
Hadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバックHadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバックAdvancedTechNight
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOneAdvancedTechNight
 
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちAdvancedTechNight
 
ATN No.1 Hadoop vs Amazon EMR
ATN No.1 Hadoop vs Amazon EMRATN No.1 Hadoop vs Amazon EMR
ATN No.1 Hadoop vs Amazon EMRAdvancedTechNight
 
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersAdvancedTechNight
 

More from AdvancedTechNight (18)

CSS3Rendererを使ってiOSでもサクサク3D
CSS3Rendererを使ってiOSでもサクサク3DCSS3Rendererを使ってiOSでもサクサク3D
CSS3Rendererを使ってiOSでもサクサク3D
 
D3.jsと学ぶVisualization(可視化)の世界
D3.jsと学ぶVisualization(可視化)の世界D3.jsと学ぶVisualization(可視化)の世界
D3.jsと学ぶVisualization(可視化)の世界
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
 
CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現
 
これから利用拡大?WebSocket
これから利用拡大?WebSocketこれから利用拡大?WebSocket
これから利用拡大?WebSocket
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 
Backbone.js入門
Backbone.js入門Backbone.js入門
Backbone.js入門
 
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
TypeScriptのススメ ~JavaエンジニアのためのJava(like)ScriptTypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
 
three.jsで作る3Dの世界
three.jsで作る3Dの世界three.jsで作る3Dの世界
three.jsで作る3Dの世界
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
Spine入門
Spine入門Spine入門
Spine入門
 
ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」
 
Hadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバックHadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバック
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOne
 
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
 
ATN No.1 Hadoop vs Amazon EMR
ATN No.1 Hadoop vs Amazon EMRATN No.1 Hadoop vs Amazon EMR
ATN No.1 Hadoop vs Amazon EMR
 
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlers
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 

分散ストリーム処理フレームワーク Apache S4

  • 1. 分散ストリーム処理 フレームワーク Apache S4 ヱヂリウム株式会社 渡邉卓也
  • 2. Apache S4 ✜特徴 ❚ 汎用分散ストリーム処理フレームワーク ❚ スケーラブル ノード数に制限無し ❚ それなりの耐障害性 ❚ 高い拡張性 JSON経由で様々な言語とやりとり可能 ✜記述言語 ❚ Java Advanced Tech Night No. 4 1
  • 3. 開発状況 ✜歴史 ❚ 2008年10月:Yahoo! Labsで開発開始 ❚ 2009年9月:オープンソース化 ❚ 2011年10月:Apache Incubatorへ ✜現行バージョン ❚ 0.3.0 http://incubator.apache.org/s4/ Advanced Tech Night No. 4 2
  • 4. 「リアルタイム」? ✜ 素早い応答 ❚ ミリ秒台から遅くても数秒を想定 ❚ ただし、(組み込み系のような)応答時間に絶対 的な制約がある用途向きではない ✜ 開発者の想定している用途 ❚ 集計・フィルタ処理から 例:クリックスルーレートを算出 ❚ より高度な、適応的な処理までさまざま 例:ユーザの検索行動をリアルタイムに解析、個々人に 最適化された広告を表示 実際にYahoo!でパーソナライズドサーチに利用されてい る、そうです Advanced Tech Night No. 4 3
  • 5. アーキテクチャ ✜ 構成要素 ❚ PE (Processing Elements) ❚ App ストリームで繋がったPEたち ❚ イベント PEにより生成、消費 ストリーム上を流れる App PE1 イベント PE2 ストリーム Advanced Tech Night No. 4 4
  • 6. イベント ✜実体 ❚ Javaのオブジェクト ✜構成要素 ❚ 属性(attribute)と値 ❚ MapReduceと類似 ❚ ただし 型付けされている 複数存在できる PEはどの属性をキーにするかを選べる(key attribute) Advanced Tech Night No. 4 5
  • 7. Processing Elements ✜ 特殊なPE ❚ キー無しPE 入力ストリーム中の全てのイベントを消費 最初のPEに使われる事が多い ❚ プロトタイプ キー属性毎に一つ作られる ✜ 通常のPE ❚ インスタンス 属性の値毎に作られる プロトタイプをコピーすることで生成される 各ノードに分散して配置 Advanced Tech Night No. 4 6
  • 8. 簡単なPEの例 必ずこのクラスを継承する public class SentenceReceiverPE extends AbstractPE { public void processEvent(Sentence sentence) { System.out.printf("Sentence is '%s', location %sn", sentence.getText(), sentence.getLocation()); } @Override public void output() { 型毎に定義 // not called in this example } @Override public String getId() { return this.getClass().getName(); } } http://docs.s4.io/manual/getting_events_into_s4.html Advanced Tech Night No. 4 7
  • 9. 定義ファイルの例 PEプロトタイプの名前 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="eventCatcher" class="io.s4.example.speech01.SentenceReceiverPE"> <property name="keys"> <list> <value>RawSentence *</value> </list> </property> </bean> </beans> 全てのキーを受け取る(キー無し) 入力ストリームの名前 http://docs.s4.io/manual/getting_events_into_s4.html Advanced Tech Night No. 4 8
  • 10. <bean id="rerouteSentencePE" class="io.s4.processor.ReroutePE"> ジョイン処理用 <property name="id" value="rerouteSentencePE"/> <property name="dispatcher" ref="dispatcher"/> 定義ファイルの例 <property name="keys"> <list> <value>RawSentence *</value> </list> </property> 出力のキーを指定する <property name="outputStreamName" value="Sentence"/> </bean> <bean id="sentenceJoinPE" class="io.s4.processor.JoinPE"> <property name="id" value="sentenceJoinPE"/> <property name="keys"> <list> <value>Sentence speechId</value> <value>Speech id</value> select Sentence.*, Speech.location </list> into SentenceJoined </property> from Sentence, Speech <property name="includeFields"> where Sentence.speechId = Speech.id <list> <value>Sentence *</value> <value>Speech location</value> </list> </property> <property name="outputStreamName" value="SentenceJoined"/> <property name="outputClassName" value="io.s4.example.speech01.Sentence"/> <property name="dispatcher" ref="dispatcher"/> <property name="ttl" value="600"/> </bean> http://docs.s4.io/manual/joining_streams.html インスタンスの生存期間 Advanced Tech Night No. 4 9
  • 11. 耐障害性 ✜高可用性 ❚ 各ノードは対等 ❚ スタンバイしているノードを常時用意 ❚ 障害発生時に切り替え(ウォームフェイル オーバ) ❚ ZooKeeperを利用 ✜チェックポインティング ❚ ロシー Advanced Tech Night No. 4 10
  • 12. Stormとの比較 S4 Storm イベント 入出力対象 タプル (オブジェクト) ノードの役割分 サーバ・クライ 対称 担 アント 接続関係の定義 定義ファイル プログラム 全数処理の保証 無し 有り Advanced Tech Night No. 4 11
  • 13. 最近の動き ✜Prototype app builder ❚ EDSLで接続関係を定義できるように pe("Print").type(PrintPE.class).asSingleton(). pe("User Count").type(CounterPE.class).fireOn(Event.class). afterInterval(100, TimeUnit.MILLISECONDS). emit(CountEvent.class).withKeyFinder(new CountKeyFinder()).to("Print"). pe("Generate User Event").type(GenerateUserEventPE.class).timer(). withPeriod(1, TimeUnit.MILLISECONDS).asSingleton(). emit(UserEvent.class).withKeyFinder(new UserIDKeyFinder()). to("User Count"). build(); Advanced Tech Night No. 4 12
  • 14. まとめ ✜MapReduceと従来のストリーム処理モ デルの融合 ❚ Stormと比べモデルは複雑 ❚ 込み入った処理はより簡潔に書けるかも Advanced Tech Night No. 4 13