Gizzardを試してみた
Twitterから新しい分散フレームワークのGizzardというものがOSSで公開されたようです [http://github.com/twitter/gizzard)。Sharding? とかよく分からないのでとりあえず試してみることにしました(が、結局うまくいきませんでした)。
gizzard のビルド
github でソースコードが公開されているのでまずは git で取得
$ git clone git://github.com/twitter/gizzard.git
まずは何も考えずビルド
$ cd gizzard $ ant : compile-thrift: [mkdir] Created dir: /home/nigaky/git/gizzard/target/gen-java BUILD FAILED /home/nigaky/git/gizzard/ant/compile.xml:44: The following error occurred while executing this line: /home/nigaky/git/gizzard/ant/compile.xml:18: Execute failed: java.io.IOException: Cannot run program "thrift": java.io.IOException: error=2, No such file or directory
どうも thrift ってやつを入れないとだめっぽい。しかも github の Issues を見ると、古い thrift を要求するようで、thrift のソースコードが丸ごと公開されていた (http://github.com/twitter/thrift)。
$ git clone git://github.com/twitter/thrift.git $ cd thrift $ sh ./bootstrap.sh $ ./configure $ make $ make install
インストールできた。
この libthrift.jar を使いたいけど、クラスパスの設定がよく分からなかったので ivy の jar を上書きする。
$ cp lib/java/libthrift.jar ~/.ivy2/cache/thrift/libthrift/jars/libthrift-0.2.0.jar
再度ビルドしてみる。
$ ant : compile-scala: [scalac] Compiling 58 source files to /home/atsji/git/gizzard/target/classes [scalac] /home/atsji/git/gizzard/src/main/scala/com/twitter/gizzard/thrift/TSelectorServer.scala:10: error: value thrift is not a member of package org.apache [scalac] import org.apache.thrift._ [scalac] ^ : BUILD FAILED /home/nigaky/git/gizzard/ant/compile.xml:89: Compile failed with 4 errors; see the compiler error output for details.
まだダメだ。どうもパッケージの指定がおかしいような気がするので無理矢理修正。
diff --git a/src/main/scala/com/twitter/gizzard/thrift/TSelectorServer.scala b/src/main/scala/com/twitter/gizzard/thrift/TSelecto rServer.scala index ee1d90b..ac6a9a0 100644 --- a/src/main/scala/com/twitter/gizzard/thrift/TSelectorServer.scala +++ b/src/main/scala/com/twitter/gizzard/thrift/TSelectorServer.scala @@ -7,10 +7,10 @@ import java.util.concurrent.{ConcurrentLinkedQueue, LinkedBlockingQueue, ThreadP TimeoutException, TimeUnit} import scala.collection.jcl import scala.collection.mutable -import org.apache.thrift._ -import org.apache.thrift.protocol._ -import org.apache.thrift.transport._ -import org.apache.thrift.server._ +import com.facebook.thrift._ +import com.facebook.thrift.protocol._ +import com.facebook.thrift.transport._ +import com.facebook.thrift.server._ import com.twitter.ostrich.Stats import com.twitter.xrayspecs.{Duration, Time} import com.twitter.xrayspecs.TimeConversions._
再度ビルド。テストを通すため DB_USERNAME, DB_PASSWORD を設定しておく。
$ ant -DDB_USERNAME=hoge -DDB_PASSWORD=fuga : package: [tar] Building tar: /home/nigaky/git/gizzard/dist/gizzard-a62ff4a3.tar.bz2 [ivy:publish] :: publishing :: com.twitter#gizzard [ivy:publish] published gizzard to /home/nigaky/git/gizzard/dist/repo/com/twitter/gizzard/1.0/gizzard-1.0.jar [ivy:publish] published gizzard to /home/nigaky/git/gizzard/dist/repo/com/twitter/gizzard/1.0/gizzard-1.0.pom [ivy:publish] published ivy to /home/nigaky/git/gizzard/dist/repo/com/twitter/gizzard/1.0/ivy-1.0.xml BUILD SUCCESSFUL
なにか間違っているかもしれないが一応ビルドはできた。
使ってみるのはまた後ほど。
Rowz (サンプルプログラム) のビルド
サンプルアプリケーションの Rowz (http://github.com/nkallen/Rowz)。
最初からこちらだけビルドすればよかった。
こちらも同じく thrift 関係でビルド失敗。私の知識ではこれ以上無理なので諦めた。