ページ

2010年9月21日

MacPortsのcassandraを一般ユーザで動かそうとしたら困ったよ、の巻

やっぱりMongo DBにしようかな、と迷いつつもcassandraをちまちま動かしたりしていました。今まではルートユーザで動かしていたんですが、めんどいので一般ユーザで動かそうとやっと思うようになりました。タイトルにも書いたように、環境はMacPortsで入れたものです。
環境変数のCASSANDRA_CONFを設定すれば、confのディレクトリが変更されると信じていました。CASSANDRA_CONFをホームディレクトリの下に設定して起動しても/opt/local/share/java/cassandraの下を参照します。/opt/local/bin/cassandraを見ると、次の順にファイルを読み込んで環境変数を設定しています。

/usr/share/cassandra/cassandra.in.sh \
/usr/local/share/cassandra/cassandra.in.sh \
/opt/local/share/java/cassandra/cassandra.in.sh \
~/.cassandra.in.sh \
`dirname $0`/cassandra.in.sh; do

ちゃんと読んでいなかったのですが、後優先で設定を上書きしていくと思ったら、最初に見つかった設定を読み込んでbreakしています。MacPortsでいれると、/opt/local/share/java/cassandra/cassandra.in.shを読み込んでbreakしています。どうりで、カレントディレクトリにcassandara.in.shを置いても読み込んでくれないはずです。

cassandraを使うときに使用する環境変数で、変更しそうなものはCASSANDRA_CONFだけだと思うのですが、/opt/local/share/java/cassandra/cassandra.in.shでは

# The directory where Cassandra's configs live (required)
CASSANDRA_CONF=$cassandra_home/conf

と見事に上書きしてくれています。もう一度/opt/local/bin/cassandraをみると、環境変数でCASSANDRA_INCLUDEを指定していると上の環境変数を指定したファイルは読み込まないので、/opt/local/share/java/cassandra/cassandra.in.shをホームディレクトリのどこかにファイルをおいて、CASSANDRA_INCLUDEでそこを指定します。次にcassandra.in.shのCASSANDRA_CONFをホームディレクトリのconfの置き場所を指定すれば、めでたしめでたし。

ちなみに、confディレクトリのlog4j.propretiesのlog4j.appender.R.Fileとstorage.xmlのCommitLogDirectoryとDataFileDirectoryは正しく設定し直すのは忘れないでね。

最後に、cassandra.in.shで、環境変数にCASSANDRA_CONFが設定されていれば、CASSANDRA_CONFを上書きしないようにすれば、みんなハッピーになれると思うんですが・・・。

0 件のコメント: