lizongbo at 618119.com 工作,生活,Android,前端,Linode,Ubuntu,nginx,java,apache,tomcat,Resin,mina,Hessian,XMPP,RPC

2010年04月11日

Windows下安装配置Apache cassandra 0.5.1

Filed under: Java — 标签:, — lizongbo @ 14:34

cassandra是facebook开源的,代码托管在apache,主页是:http://cassandra.apache.org/
目前版本0.5.1,首先下载最新版:
http://apache.freelamp.com/cassandra/0.5.1/apache-cassandra-0.5.1-bin.tar.gz
来源:
http://cassandra.apache.org/download/

解压到D:\Java\,生成到目录为:D:\Java\--0.5.1
运行D:\Java\apache-cassandra-0.5.1\bin\cassandra.bat      ,提示错误信息如下:

D:\Java\apache-cassandra-0.5.1\bin>cassandra.bat
找不到路径 – D:\Java\apache-cassandra-0.5.1\bin\lib
系统找不到指定的驱动器。
Starting Cassandra Server
Listening for transport dt_socket at address: 8888
Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/cassandra/
service/CassandraDaemon
Caused by: java.lang.ClassNotFoundException: org.apache.cassandra.service.Cassan
draDaemon
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
Could not find the main class: org.apache.cassandra.service.CassandraDaemon.  Pr
ogram will exit.

打开cassandra.bat一看,发现取的CASSANDRA_HOME是当前目录,估计cassandra的开发者不用windows操作系统开发,或者是已经配置过环境变量CASSANDRA_HOME。
于是对照Apache Tomcat的bat文件,在cassandra.bat的 SETLOCAL后面加上一行 “cd ..”。然后重新运行bat。程序启动成功。

(http://ahuaxuan.javaeye.com/blog/603106 这篇文章说”在环境变量配置中加入CD=xxxx/cassandra根目录”是不合理的,CD本身就是调用cd命令输出当前路径,
即使要加全局环境变量,也是直接配置类似CASSANDRA_HOME=D:\Java\apache-cassandra-incubating- 0.5.1即可)
cassandra-cli.bat在SETLOCAL后面加上两行:“cd ..
if NOT DEFINED CASSANDRA_HOME set CASSANDRA_HOME=%CD%”
修改后,也能成功启动。

cassandra.bat 此时会发现“我的电脑”里多了一个磁盘目录P,从cassandra.bat中可以看到是运行了以下命令:
subst P: “%CASSANDRA_HOME%\lib”
P:
set CLASSPATH=P:\

这个命令将 cassandra的lib目录用subst命令映射成了一个虚拟盘符。
再次运行cassandra.bat时可以看到提示信息:“已经对驱动器运行过 SUBST”。
于是运行subst /D P: 删除映射。

cassandra.bat对同一台机器启动两个进程不友好,于是继续修改cassandra.bat。
主要是设置classpath这段修改后如下:
———————-
REM ***** CLASSPATH library setting *****
REM Shorten lib path for old platforms
rem subst P: “%CASSANDRA_HOME%\lib”
rem P:
rem set CLASSPATH=P:\
for %%i in (%CASSANDRA_HOME%\lib\*.jar) do call :append %%i
goto okClasspath
:append
set CLASSPATH=%CLASSPATH%;%*
goto :eof
———————-

接下来发现conf/storage-conf.xml的配置也不支持同一台机器的启动多个进程。
继续修改,做成相对路径:

<CommitLogDirectory>var/lib/cassandra/commitlog</CommitLogDirectory>
<DataFileDirectories>
<DataFileDirectory>var/lib/cassandra/data</DataFileDirectory>
</DataFileDirectories>
<CalloutLocation>var/lib/cassandra/callouts</CalloutLocation>
<StagingFileDirectory>var/lib/cassandra/staging</StagingFileDirectory>

log4j.properties里也需要改成相对路径。
log4j.appender.R.File=var/log/cassandra/system.log

(最终核实,多节点通讯是以ip作为key,一台机器启动两个进程是可以,但是互为主备是没戏了。)

接下来测试数据的添加和删除。
先测试命令方式的,参考:http://wiki.woodpecker.org.cn/moin/ApacheCassandra
双击运行cassandra-cli.bat

Welcome to cassandra CLI.

Type ‘help’ or ‘?’ for help. Type ‘quit’ or ‘exit’ to quit.
cassandra> connect 127.0.0.1/9160 //连接到指定的ip和端口,
Connected to 127.0.0.1/9160
cassandra> set Keyspace1.Standard1[‘lizongbo’][‘name’] = ‘lizonbo’
Value inserted.
cassandra> set Keyspace1.Standard1[‘lizongbo’][‘age’] = ’80’
Value inserted.
cassandra> set Keyspace1.Standard1[‘lizongbo’][‘blogurl’] = ‘http://618119.com
Value inserted.
cassandra> get Keyspace1.Standard1[‘lizongbo’]
=> (column=name, value=lizonbo, timestamp=1270967368859)
=> (column=blogurl, value=http://618119.com, timestamp=1270967384812)
=> (column=age, value=80, timestamp=1270967377281)
Returned 3 results.
cassandra> get Keyspace1.Standard1[‘lizongbo’][‘blogurl’]
=> (column=blogurl, value=http://618119.com, timestamp=1270967384812)
cassandra>

没有评论 »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress