読者です 読者をやめる 読者になる 読者になる

nigakyのブログ

雑多なメモです。

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 関係でビルド失敗。私の知識ではこれ以上無理なので諦めた。