1. 환경 설정
1.1 시스템 환경설정
1.1.1 대상 파일: /etc/profile 또는 ~/.bashrc
작업:
export JAVA_HOME=/usr/lib64/jvm/java-6-sun export cassandra_home=/usr/share/Cassandra export CASSANDRA_HOME=$cassandra_home export CASSANDRA_LIB=/usr/share/Cassandra export CASSANDRA_CLASSPATH=$cassandra_home export HADOOP_HOME=/usr/lib64/hadoop export HADOOPDIR=$HADOOP_HOME/conf export HADOOP_CONF_DIR=$HADOOPDIR export HADOOP_CONF=$HADOOPDIR export HADOOP_CLASSPATH=$HADOOP_CONF:$CASSANDRA_LIB export PIG_HOME=/usr/lib64/pig export PIG_CLASSPATH=$HADOOPDIR export PIG_CONF=$HADOOPDIR export PIG_CONF_DIR=$HADOOPDIR export PATH=$PATH:$HADOOP_HOME/bin:$PIG_HOME/bin
|
1.2 Hadoop 실행환경 설정
1.1.2 대상파일: $HADOOP_HOME/conf/hadoop-env.sh
내용:
Cassandra의 library(*.jar)와 Hadoop의 LIBRARY($HADOOP_HOME/lib/*.jar) 를 HADOOP_CLASSPATH에 추가합니다.
작업:
export HADOOP_CLASSPATH=/usr/share/cassandra/*:$HADOOP_CLASSPATH:/usr/lib64/hadoop:/usr/lib64/hadoop/lib: |
1.3 Hadoop 공통 환경 설정(namenode 및 참조 Library)
1.1.3 대상파일: $HADOOP_HOME/conf/core-site.xml
내용:
Hadoop의 job_tracker와 cassandra를 연결하기 위한 설정입니다. cassandra.thrift.port 는 cassandra와 통신을 위한 포트를 설정이며 기본 포트는 9160번 입니다. cassandra.partitioner.class는 다음과 같이 소개가 되어 있습니다.
“the partitioner uses the key distribution to send the data to the reducer in a round robin fashion”
이를 위한 클래스는 Cassandra의 LIBRARY에 포함되어 있습니다.
작업
<configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:54310</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/lib64/hadoop/tmp</value> </property> <property> <name>cassandra.thrift.address</name> <value>localhost</value> </property> <property> <name>cassandra.thrift.port</name> <value>9160</value> </property> <property> <name>cassandra.partitioner.class</name> <value>org.apache.cassandra.dht.RandomPartitioner</value> </property> </configuration> |
2. 실행환경 설정
2.1 PIG 스크립트 생성.
2.2.1 CLASSPATH 설정
내용
pig에서 요구되는 cassandra의 library를 CLASSPATH에 추가 합니다.
작업
for jar in $cassandra_home/*.jar; do CLASSPATH=$CLASSPATH:$jar done |
2.2.2 LOADFUNC_JAR설정
내용
PIG에서 CASSANDRA에 접근하기 위해 사용되는 UDF를 추가 합니다. 이 패키지에 CassandraStorage 클래스가 포함되어 있어야 합니다. 그러나, 현재 UBUNTU에서 패키지 인스톨러로 설치되는 CASSANDRA의 버전에는 해당 클래스가 없는 것으로 확인되어, 패키지 인스톨러로 설치된 버전과 같은 버전인 0.7.2 버전의 소스를 내려받아 ant로 빌드 후 $cassandra_home/contrib/pig/build/ 에 생성된 jar파일을 추가 합니다. 해당 jar파일은 $cassandra_home/contrib/pig에서 ant빌드를 수행해야 jar가 생성됩니다.
작업
LOADFUNC_JAR=/home/jwkim/apache-cassandra-0.7.2-src/contrib/pig/build/cassandra_loadfunc.jar |
2.2.3 $LOADFUNC_JAR를 클래스패스에 추가
작업
CLASSPATH=$CLASSPATH:$LOADFUNC_JAR |
2.2.4 PIG_JAR파일 패스 설정
내용
PIG [pig.jar]와 PIG-CORE [pig-{version}-core.jar] 를 PIG_JAR에 추가합니다.
작업
PIG_JAR=$PIG_HOME/pig.jar:$PIG_HOME/ pig-0.8.1-core.jar |
2.2.5 PIG_JAR를 클래스패스에 추가
작업
CLASSPATH=$CLASSPATH:$PIG_JAR |
2.2.6 PIG_CLASSPATH 생성
export PIG_CLASSPATH=$PIG_CLASSPATH:$CLASSPATH |
2.2.7 PIG_OPTS 생성
export PIG_OPTS=$PIG_OPTS” -Dudf.import.list=org.apache.cassandra.hadoop.pig” |
2.2.8 명령실행 줄
cat “bootstrap.pig” - | $PIG_HOME/bin/pig $* |
2.3 bootstrap.pig 생성
내용
PIG에서 호출 할 UDF를 지정합니다. pig.jar, pig-x.x-core.jar, libthrift-05.jar 세 LIABRARY포함되며 앞의 두 항목은 pig를 위한 라이브러리이고, 뒤의 것은 cassandra 에 연결하기 위한 thrift인터페이스와 그 라이브러리 입니다.
작업
register /usr/lib64/pig/pig-0.8.1-core.jar; register /usr/lib64/pig/pig.jar; register /home/jwkim/apache-cassandra-0.7.2-src/lib/libthrift-0.5.jar; |
3. 호환성
현재 Test 진행 되고 있는 버전은 각 Hadoop 20.2, PIG 0.8.1, Cassandra 0.7.2 입니다. Hadoop의 최신 버전은 20.203 입니다. PIG와 연결이 되지 않아 현재 Hadoop 20.2를 운영 합니다. Cassandra는 0.7.5가 최신 버전이나, Hadoop과 정상적으로 연계 동작을 하지 않아 0.7.2 버전을 사용합니다.