Subcribe via RSS

なぜStormを使うか

2012/2/2 | Posted in storm

Stormとは、twitterが公開して開発中のリアルタイム分散処理フレームワークです。
開発も活発で結構よいのでこれからHadoopのように使われるようになるんじゃないかと個人的に思っていて、日本語の情報が全然ないので勝手に日本語で紹介しています。

Stormの概要については前にも書いたけど、今回はその前の、なぜStormを使うのか、どういう処理がターゲットなのか、と言う話について書きます。

Stormの概要について書いた記事: twitterが発表したリアルタイム分散処理フレームワークStorm | tjun memo



本記事は、Stormの公式のRationaleを元に書いているので、できれば公式を読むことをお勧めします。




なぜStormを使うのか

最近はMapReduceやHadoop等の技術で、以前には考えられなかったスケールでデータ処理を行うことができるようになりました。しかし、それらの技術はリアルタイム処理のための技術ではありません。リアルタイム処理は、バッチ処理とは根本的に異なる要求があるため、Hadoopをリアルタイム処理に利用することはできません。
しかし、大きなスケールでのリアルタイムデータ処理に対する要求は高まっています。「リアルタイムなHadoop」がないことは、データ処理のエコシステムにおける大きな問題と言えます。

Stormはこの問題を解決します。

Storm以前は、リアルタイム処理のためには例によってキューとワーカーからなるネットワークを作り上げていたでしょう。ワーカーはキューからメッセージを取り出し、データベースを更新して、次の処理のために新たなメッセージを異なるキューへ送ります。残念ながら、この手法には、深刻な制限があります。

  1. 1. 退屈な仕事:開発者は、開発時間のほとんどをメッセージの送信先の設定、ワーカーや中間キューのデプロイに取られ、リアルタイムなデータ処理のロジックへかけられる時間はわずかです。

  2. 2. 脆弱: 耐故障性に欠けるため、あなたはワーカーとキューが落ちていないか気を配る必要があります。

  3. 3. 拡張が大変: 1つのワーカーやキューにおけるメッセージのスループットが高まった時、データをどのように分散させるか考える必要があります。メッセージの送り先が変わるため、ワーカーの再設定も必要です。

キューとワーカーによるモデルが大量のメッセージの処理を可能にしましたが、メッセージ処理がリアルタイム処理の基本となるパラダイムです。
そこで、問題となるとは、どうやって、データを失うことなく、スケールして膨大なデータに対応するか、またどうやってそれを簡単に使い、操作できるようにするか、ということです。

Stormはこれを実現します。


Stormの重要性


Stormはリアルタイム処理のための簡単な枠組みを提供します。MapReduceが並列バッチ処理をとても簡単に書けるようにしたように、Stormの基本機能は並列リアルタイム処理を簡単に書けます。

Stormの特徴は、
  1. 1. 幅広いユースケース: Stormはメッセージ処理、データベースの更新、連続的なクエリ処理、そしてクライアントに対する処理の結果のストリーミング、検索クエリのようなクエリの並列処理、などいろいろなことができます。Stormの基本機能は、これらの幅広いユースケースを実現します。

  2. 2. スケーラブル: Stormは膨大なメッセージに対してもスケールします。Topologyをスケールするには、マシンを追加して、並列数の設定を大きくするだけでいいのです。例えば、10台のノードで毎秒100万メッセージの処理と、数百回のデータベース呼び出しを行うようなシステムが作れます。ZookeeperがStormのクラスタの調停を行っているため、さらに大きいサイズへスケールさせることもできます。

  3. 3. データの保証:リアルタイム処理システムは、データが処理されることを必ず保証する必要があります。データの処理漏れがあるシステムはほとんどユースケースがないでしょう。Stormは、すべてのメッセージが処理されることを保証します。この点において、S4のようなシステムと決定的に異なります。

  4. 4. 堅牢性: Hadoopのように扱いにくいシステムと違って、Stormは管理が簡単です。Stormプロジェクトは、ユーザにとって扱いやすいクラスタを実現する、という明確なゴールを持っています。

  5. 5. 耐故障性: もし処理中に故障しても、Stormは処理の再割当てを行います。Stormは処理が動き続けることを保証します。(処理のkillをするまで)

  6. 6. 言語非依存: ロバストでスケーラブルなリアルタイム処理は、プログラミング言語に縛られるべきではない。StormのTopologyや処理のコンポーネントは、さまざまな言語で定義でき、誰でも利用できます。

今回の記事は以上です。
以下のスライドの前半部でも同じようなことが書いてあります。

Storm
View more presentations from nathanmarz




Tags:

iPhoneアプリと室伏広治

2012/1/31 | Posted in Diary, iphone

そろそろiPhoneじゃないケータイにしたいなぁと思い、もうiPhoneが使えなくなってもいいや、っていう視点に立ったときに、iPhoneを投げてその距離を計測して、他の人と距離や滞空時間を競いあうっていうクソアプリを思いつきました。誰もいらないけど、ネタアプリとしては結構レベルが高いきがする。
iPhone Sensor
Creative Commons License photo credit: raneko

調べてみたら、投げて滞空時間を競うアプリはあった。
iPhoneを空中に放り投げて滞空時間を競うアプリ『iPhone Hang Time』 | 100SHIKI

でもこれは、あとでキャッチすることを想定しているみたいで、ぶっ飛びきれてない。
もっと2階からぶん投げるくらいの、壊れるか壊れないかギリギリを攻めるようなやつがいい。


で、加速度センサを使えば、たぶんだいたいの距離は出せるんじゃないか、と思い、”加速度センサ 投 距離” というキーワードでググってみたら室伏広治オフィシャルウェブサイトがトップにヒットしてびっくりした。 research っていうカテゴリがあって、なんかもうすごいです。思わずlikeボタンを押してしまいました。

残念ながらクソアプリ開発に使える情報はなかったので、とりあえず加速度センサの値を記録するアプリでも作ってiPhoneを投げるときの加速度の変化を見てみる実験をするのがいいと思ってます。iPhoneを思いっきり投げられる場所と、思いっきり投げても大丈夫なiPhoneが必要。

※1 たぶん挫折するので、このアプリのネタを使いたい人がいたら、どうぞ。
※2 これを読む限り、iPhoneが壊れそうになるアプリはAppleの審査通らないようだ
iPhone投げが2度拒否された理由 « iPhoneアプリ練習帳




Tags: ,

ブログを書く理由

2012/1/30 | Posted in Diary

You Must Have Remembered it Wrong.
Creative Commons License photo credit: gogoloopie

このブログをなんで書いているかっていうと、プログラム書いていたり何かソフトを使ったりしていて問題が発生したときに、いろいろググったりして調べて解決できたことをメモっておくことで、同じ問題ではまった人(自分含む)がこのブログの記事を読んで簡単に解決できればいいかな、と思って書いています。

英語のドキュメントしかなかったり、ググっても簡単に分からなかったり、ってことはときどきあるので。
だから、記事の内容もrubyだったりjavaだったりmacだったりcentosだったりと、バラバラ。

あとはブログという目的以外にも、VPSにwebサーバ立ててwordpress入れて設定とかいじって…、っていう実験台なところもあります。

でも、こんなブログをsubscribeしている人が30人くらいいて、脈絡のない技術的な話ばかりだとたぶんほとんどの記事は興味が沸かない気がするので、もうちょっと近況とか考え的なこと、誰でも読める内容のものをもうちょっと書こうかなあと思う最近思ったりします。




gem install memcached ではまったメモ

2012/1/20 | Posted in linux, ruby

Error:

$gem install memcached
...
rlibmemcached_wrap.c: In function ‘_wrap_MemcachedSt_sasl_callbacks_set’:
rlibmemcached_wrap.c:6669: error: ‘sasl_callback_t’ undeclared (first use in this function)
rlibmemcached_wrap.c:6669: error: (Each undeclared identifier is reported only once
rlibmemcached_wrap.c:6669: error: for each function it appears in.)
rlibmemcached_wrap.c:6669: error: ‘arg2’ undeclared (first use in this function)
rlibmemcached_wrap.c:6669: error: expected expression before ‘)’ token
rlibmemcached_wrap.c:6687: error: expected expression before ‘)’ token
rlibmemcached_wrap.c:6688: error: ‘struct memcached_st’ has no member named ‘sasl_callbacks’
rlibmemcached_wrap.c:6688: error: expected ‘)’ before ‘const’
rlibmemcached_wrap.c:6688: error: expected ‘;’ before ‘arg2’
rlibmemcached_wrap.c: In function ‘_wrap_MemcachedSt_sasl_callbacks_get’:
rlibmemcached_wrap.c:6700: error: ‘sasl_callback_t’ undeclared (first use in this function)
rlibmemcached_wrap.c:6700: error: ‘result’ undeclared (first use in this function)
rlibmemcached_wrap.c:6711: error: expected expression before ‘)’ token
rlibmemcached_wrap.c:6711: error: ‘struct memcached_st’ has no member named ‘sasl_callbacks’
rlibmemcached_wrap.c: In function ‘_wrap_memcached_set_sasl_callbacks’:
rlibmemcached_wrap.c:12021: error: ‘sasl_callback_t’ undeclared (first use in this function)
rlibmemcached_wrap.c:12021: error: ‘arg2’ undeclared (first use in this function)
rlibmemcached_wrap.c:12021: error: expected expression before ‘)’ token
rlibmemcached_wrap.c:12039: error: expected expression before ‘)’ token
rlibmemcached_wrap.c:12040: error: expected ‘)’ before ‘const’
rlibmemcached_wrap.c:12040: error: expected ‘)’ before ‘arg2’
rlibmemcached_wrap.c: In function ‘_wrap_memcached_get_sasl_callbacks’:
rlibmemcached_wrap.c:12122: error: ‘sasl_callback_t’ undeclared (first use in this function)
rlibmemcached_wrap.c:12122: error: ‘result’ undeclared (first use in this function)
rlibmemcached_wrap.c:12133: error: expected expression before ‘)’ token
rlibmemcached_wrap.c: In function ‘Init_rlibmemcached’:
rlibmemcached_wrap.c:13285: error: ‘SASL_OK’ undeclared (first use in this function)
make: *** [rlibmemcached_wrap.o] Error 1

$ gem clean memcached

centos
$ yum install cyrus-sasl2 cyrus-sasl-devel

ubuntu, debian
$ apt-get install libsasl2-2 libsasl2-dev




Tags: ,

stormのcluster環境のセットアップ(centos)

2012/1/9 | Posted in centos, storm

Stormと、その設定やローカルモードでの実行は下記の記事を参照してください。


今回は、stormのnimbusやsupervisorを利用する、クラスタ環境をセットアップするときのメモです。
centosで試していますが、linux環境であれば同じような感じで動くと思います。
マシンは複数台を想定していますが、1台の中で動かすこともできます。

関連モジュールのインストール

stormを動かすのに必要なものをインストールします。
基本的には、ここに書かれている手順に従います。

zookeeper のセットアップ


Apache zookeeper からリリースのアーカイブを取得(今回は 3.3.3 を使いました)

wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
tar zxf zookeeper-3.3.3.tar.gz
sudo cp -R zookeeper-3.3.3 /usr/local/
sudo ln -s /usr/local/zookeeper-3.3.3/ /usr/local/zookeeper


インストールしたディレクトリを ZOOKEEPER_HOME に設定し、$ZOOKEEPER_HOME/bin の実行パスに設定。
export ZOOKEEPER_HOME="/usr/local/zookeeper" 
export PATH=$PATH:$ZOOKEEPER_HOME/bin

$ZOOKEEPER_HOME/conf/zoo.cfg を作成する
zoo_sample.cfg をベースに修正。
sudo cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg 
dataLogDir を追加して、ログの場所を決める。今回は “/var/log/zookeeper” とした。
ディレクトリの作成も忘れずに。
sudo mkdir /tmp/zookeeper
sudo mkdir /var/log/zookeeper


zeromq & jzmq のインストール


以下の手順に従ってインストール。

wget http://download.zeromq.org/historic/zeromq-2.1.7.tar.gz
tar zxf zeromq-2.1.7.tar.gz
cd zeromq-2.1.7
./configure
make
sudo make install

LD_LIBRARY_PATH に /usr/local/lib を追加しておく。
そのあと
sudo ldconfig

#install jzmq
git clone git://github.com/nathanmarz/jzmq.git
cd jzmq
./autogen.sh
./configure
make
sudo make install

uuid-dev が無いと言われたら yum install uuid-devel


python 2.6.6 インストール


python のバージョンが 2.4.3 なので 2.6.6 を入れる。

以下を参考に、古いものを共存させながらインストール。



Stormのインストール

前の記事と同様です。
https://github.com/nathanmarz/storm/downloads から最新のstormをダウンロードして、zipを解凍してください。(2011/12/27の最新verは0.6.0)

そして、storm-*.*.*/binにpathを通します。

$ wget https://github.com/downloads/nathanmarz/storm/storm-0.6.0.zip --no-check-certificate
$ unzip storm-0.6.0.zip
$ sudo cp -R storm-0.6.0 /usr/local/
$ export STORM_HOME=/usr/local/storm-0.6.0
$ export PATH=$PATH:$STORM_HOME/bin

今回はここまで。
次回は、1台のマシンでnimbusもsupervisorも動かして、クラスタモードでサンプルプログラムを動かすところまでを書きます。


参考になりそうな日本語サイト




Tags:
  • 書いてる人:

    Junichiro Takagi
    高木潤一郎

    http://tjun.jp
    mail@tjun.jp

    未踏でクリエータやってました。メーカーでエンジニアやってます。
    このブログは、会社とは関係なく個人の意見を書いています。

    RSS:


  • friendfeed: