CDH버전에서 tez를 그대로 빌드하면 샘플 jar는 잘 되는데 hive에서는 오류가 나기때문에 빌드부터 주의하기 바란다.
여기 적는건 CDH버전이 Hadoop 2.6.0-cdh5.4.4 이다. 참고할것.
1. 빌드하기
우선 소스코드부터 받자.
wget http://www.eu.apache.org/dist/tez/0.7.0/apache-tez-0.7.0-src.tar.gz
이제 JobContextImpl.java와 pom.xml을 조금 수정해야한다.
http://tonywutao.github.io/2015/05/21/Build-Tez-for-CDH5-4-0/ 에 가보면 잘 설명잘되어는데
편의상 pom.xml과 JobContextImpl.java 수정한 파일도 첨부하겠다.
이제 빌드해보자.
mvn -Pcdh5.4.4 clean package -Dtar -DskipTests=true -Dmaven.javadoc.skip=true
오류가 난다면 protocol buffer 2.5가 안깔렸거나, nodejs/npm 등의 설치가 안된걸수 있다. 이건 알아서 해결해라.
2. 필요한 파일 hdfs상에 올리기
빌드한곳의 ./tez-dist/target/ 폴더에보면 tez-0.7.0-minimal.tar.gz, tez-0.7.0.tar.gz 파일이 존재할것이다.
어짜피 해당 파일은 각 노드에 복사해야하고, tez-site파일도 만들어야하는데 hdfs에 올리자.
* tez-site.xml을 만들자
<configuration>
<property>
<name>tez.lib.uris</name>
<value>hdfs:///apps/tez-0.7.0/tez-0.7.0.tar.gz</value>
</property>
</configuration>
* hdfs상에 tar.gz 파일이랑 설정을 /apps/tez-0.7.0 에 올릴것이다.
hdfs dfs -mkdir -p /apps/tez-0.7.0/
hdfs put ./tez-dist/target/*.gz /apps/tez-0.7.0
hdfs put tez-site.xml /apps/tez-0.7.0
3. 각노드에 복사하기
이제 hdfs올린걸 하둡 하위 노드에 설치하자
편의상 /home1/user/tez-jar/0.7.0 폴더에 설치할것이다. 잘기억해두자.
각 서버 돌면서 저거 실행하면 tar.gz 다운받고 압축풀어주는것뿐이다. 그리고 설정파일(tez-site.xml이랑)
mkdir -p /home1/user/tez-jars/0.7.0/
hdfs dfs -get /apps/tez-0.7.0/tez-0.7.0-minimal.tar.gz /home1/user/tez-jars/0.7.0
hdfs dfs -get /apps/tez-0.7.0/tez-site.xml /home1/user/tez-jars/0.7.0
tar xvzf /home1/user/tez-jars/0.7.0/tez-0.7.0-minimal.tar.gz -C /home1/user/tez-jars/0.7.0/
4. 환경변수 지정하기
여기서부터는 조금 삽질하다가 어느순간 돌아간거라 좀 애매한데 hadoop-env.sh 와 hive-env.sh 에 추가로 적어줬었다.
* hadoop-env.sh
...생략...
export HADOOP_CLIENT_OPTS="-Djava.net.preferIPv4Stack=true $HADOOP_CLIENT_OPTS"
export TEZ_JARS=/home1/user/tez-jars/0.7.0
export TEZ_CONF_DIR=/home1/user/tez-jars/0.7.0
export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${TEZ_CONF_DIR}:${TEZ_JARS}/*:${TEZ_JARS}/lib/*
...생략...
* hive-env.sh
...생략...
TEZ_INSTALL_DIR=/home1/user/tez-jars/0.7.0
TEZ_JARS=$(echo "$TEZ_INSTALL_DIR"/*.jar | tr ' ' ':'):$(echo "$TEZ_INSTALL_DIR"/lib/*.jar | tr ' ' ':')
HIVE_AUX_JARS_PATH=$TEZ_JARS
...생략....
그리고 하둡 재기동후 hive커멘드에서 set hive.execution.engine = tez; 로 하면 tez엔진으로 돌아간다 (기본값은 mr)
가장 도움이 되었던 사이트 링크
* 빌드관련
http://tonywutao.github.io/2015/05/21/Build-Tez-for-CDH5-4-0/
http://tez.apache.org/install.html
* 환경세팅관련
http://qiita.com/ajis_ka/items/257dbb19d740e963830b