카산드라의 동작을 상세히 알아보기 위해 디버깅을 해보기로 했다.

http://wiki.apache.org/cassandra/HowToDebug

위 사이트에 카산드라를 디버깅하는 방법이 나와있지만 너무 간단히 나와있기 때문에 조금 자세히 설명해 보기로 하겠당.


1. 다운로드

이클립스를 사용하여 디버깅 할 것이므로 이클립스와 디버깅할 카산드라의 소스를 다운받아야 한다.

http://eclipse.org

http://cassandra.apache.org/

 

2. 이클립스에서 자바 프로젝트를 만든다.

3. 소스의 내용을 프로젝트 안으로 전부 카피한다.

4. build.xml 파일을 ant로 build한다.

5. 여기서부터는 위키의 내용과 비슷하다.
    프로젝트의 properties로 가서 기존의 src폴더를 지우고 위키에 나와 있는 대로 수정한다.

1) src/gen-java
2) interface/thrift/gen-java
3) src/resources
4) src/java
5)
src/avro

6. build/classes를 라이브러리에 추가한다.

7. 다음 jar파일들을 라이브러리에 추가한다.

lib/*.jar
build/lib/jars/hadoop-core-*.jar,
build/lib/jars/jna-*.jar,
build/lib/jars/commons-logging-*.jar,
build/lib/jars/pig-*.jar,
build/lib/apache-rat-*.jar 

8. run/debug configuration을 만들어준다.

1) src/java에 있는 org.apache.cassandra.thrift.cassandradaemon 클래스를 메인 클래스로 지정한다.
2) classpath에 conf 폴더를 추가한다(advanced를 누르면 폴더를 추가할 수 있다.)
3) 다운받은 소스 중 bin/cassandra.bat을 열어 JAVA options 부분(set JAVA_OPTS로 시작되는 부분)아래부터 classpath 부분 전까지를 복사해서 VM arguments에 넣어준다.

-ea
 -javaagent:(workspace의 위치)/workspace/cassandra/lib/jamm-0.2.5.jar
 -Xms1G
 -Xmx1G
 -XX:+HeapDumpOnOutOfMemoryError
 -XX:+UseParNewGC
 -XX:+UseConcMarkSweepGC
 -XX:+CMSParallelRemarkEnabled
 -XX:SurvivorRatio=8
 -XX:MaxTenuringThreshold=1
 -XX:CMSInitiatingOccupancyFraction=75
 -XX:+UseCMSInitiatingOccupancyOnly
 -Dcom.sun.management.jmxremote.port=7199
 -Dcom.sun.management.jmxremote.ssl=false
 -Dcom.sun.management.jmxremote.authenticate=false
 -Dlog4j.configuration=log4j-server.properties
 -Dlog4j.defaultInitOverride=true


중간중간에 F5를 눌러서 프로젝트를 새로고침하는 것을 잊지 말고 여기까지 하면 기본적인 준비는 끝이 났다. 소스코드에서 에러도 뜨지 않을 것이다.

만약 다음과 같은 오류가 발생한다면



windows -> preferences -> Java -> Compile -> Errors/Warnings -> Deprecated and restricted API에서 Forbidden reference를 Error에서 warning으로 바꿔주면 된다.



자, 디버깅 해보자!

이제 설치된 카산드라 위에 YCSB를 돌려보자.

전에도 말했듯이 소스로 받는 것이 조금 불편할 수 있으나 확실한 동작을 보장한다고 할 수 있으므로 소스로 가겠다 ㄱㄱㄱㄱ

이번엔 git을 이용해서 받아보자

# git clone git://github.com/brianfrankcooper/YCSB.git

git이 없으면

# apt-get install git-core

다 받아졌으면 YCSB폴더로 들어가서 빌드를 하자. 이번엔 maven을 사용한다.

# mvn clean package

역시 maven이 없으면 설치

# apt-get install maven2

하다가 에러가 났다.


으아니! 문제는 asm-3.1.jar 파일이군!

받아준다

http://www.java2s.com/Code/Jar/a/Downloadasm31jar.htm

문제가 발생한 디렉토리에 덮어씌워주고 다시

# mvn clean package


끝나면 workload를 돌리면 된다.

script를 짜도 되고 걍 돌려도 된다.


(뒤에 처자는 애교로 넘기져)


만약 다음과 같은 오류가 발생한다면 이것은 client disclosed를 의미하는 내용이기 때문에

무시해도 상관 없다고 한다.

DEBUG [pool-2-thread-2] 2011-10-05 12:00:49,374 CustomTThreadPoolServer.java (line 197) Thrift transport error occurred during processing of message. org.apache.thrift.transport.TTransportException        at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:132)        at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84)        at org.apache.thrift.transport.TFramedTransport.readFrame(TFramedTransport.java:129)        at org.apache.thrift.transport.TFramedTransport.read(TFramedTransport.java:101)        at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84)        at org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:378)        at org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:297)        at org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:204)        at org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:2877)        at org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:187)        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)        at java.lang.Thread.run(Thread.java:636) DEBUG [pool-2-thread-2] 2011-10-05 12:00:49,376 ClientState.java (line 94) logged out: #<User allow_all groups=[]>

자세한 내용은 여기



이번에 연구실에서 진행하는 프로젝트를 위해 YCSB를 돌려봐야 되는데

이를 위해 Nosql DB인 Cassandra를 설치해 보겠다.


1. 다운로드

apt-get 으로도 설치할 수 있는 것 같지만 나는 최신버전은 필요 없기도 하고 물리적으로 접근할 수 없는 노드에서 설치해야하기에 관리하기가 편하기도 하고 소스코드에서 설치하는게 뭔가 안심되기도 하기 때문에 소스코드에서부터 설치하도록 하겠다.


다운로드 : http://cassandra.apache.org/


0.8.10 버전을 받아 설치하도록 하겠당!

# wget http://apache.mirror.cdnetworks.com/cassandra/0.8.10/apache-cassandra-0.8.10-src.tar.gz


2. 압축풀기

# tar -xvzf apache-cassandra-x.xx.xx-src.tar.gz


3. 자바 버전 확인

카산드라는 자바 1.6 이상의 버전에서 돌아간다.

OpenJDK, Sun 모두에서 돌아가니 버전만 간단하게 확인하고 넘어가자

# java -version


4. 환경설정

하나의 노드에 테스트용으로 설치할것이기 때문에 log폴더와 lib폴더 모두 설치폴더 안에 존재하도록 하기 위해서 폴더를 만들어준다.

(홈 디렉토리에서)

# mkdir {commitlog,log,saved_caches,data}

conf폴더에 들어가서 먼저 log4j-server.properties 파일을 보자.

중요한 부분은 log4j.rootLogger부분의 INFO를 DEBUG로 바꿔주자
이래야 서버에서 나오는 다양한 메세지들을 확인할 수 있다.

앞에서 설정한 로그폴더로 로그를 받을 수 있게 설정하자.

log4j.appender.R.File=~/log/system.log

나와서 이제 cassandra.yaml로 들어가자

data_file_directories: ~/data

commitlog_directory: ~/commitlog

saved_caches_directory: ~/saved_caches

위에서 폴더를 만들었던 곳으로 각각 고쳐준다.


만일, 하나의 컴퓨터에서 멀티 노드로 구성할 생각이라면 서로 다른 디렉토리를 사용하는것이 바람직하겠다.

또한, 아랫부분의 listen_address와 rpc_address부분도 loopback을 사용해서 127.0.0.2 같이 바꾸어야 한다.


cassandra-env.sh 파일로 넘어온다.

이 파일의 JMX_PORT부분도 위의 하나의 컴퓨터에서 멀티 노드를 구성할 때에는 서로 다르게 지정해야 한다.

5. 빌드

ant나 maven을 사용해서 빌드하면 된다.

6. 돌려본다

# bin/cassandra -f

+ Recent posts