前提
-
コミュニティ版のHadoop 2.6.0がインストールされていること
Tez 0.5.2のインストール
基本的に、公式ドキュメントに従う
ソースコードをダウンロード、展開
$ wget https://dist.apache.org/repos/dist/dev/tez/tez-0.5.2-src-rc0/apache-tez-0.5.2-src.tar.gz
$ tar xf apache-tez-0.5.2-src.tar.gz
$ cd apache-tez-0.5.2-src
ビルド
Hadoop 2.6.0に対してビルドするために、pom.xml
を修正
pom.xml
diff --git a/pom.xml b/pom.xml
index dbf5923..28cd805 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,7 +37,7 @@
<properties>
<maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
<clover.license>${user.home}/clover.license</clover.license>
- <hadoop.version>2.4.0</hadoop.version>
+ <hadoop.version>2.6.0</hadoop.version>
<jetty.version>7.6.10.v20130312</jetty.version>
<distMgmtSnapshotsId>apache.snapshots.https</distMgmtSnapshotsId>
<distMgmtSnapshotsName>Apache Development Snapshot Repository</distMgmtSnapshotsName>
@@ -74,6 +75,10 @@
<name>${distMgmtSnapshotsName}</name>
<url>${distMgmtSnapshotsUrl}</url>
</repository>
+ <repository>
+ <id>org.apache.hadoop</id>
+ <url>https://repository.apache.org/content/repositories/orgapachehadoop-1012</url>
+ </repository>
</repositories>
<pluginRepositories>
@@ -89,6 +94,10 @@
<url>${distMgmtSnapshotsUrl}</url>
<layout>default</layout>
</pluginRepository>
+ <pluginRepository>
+ <id>org.apache.hadoop</id>
+ <url>https://repository.apache.org/content/repositories/orgapachehadoop-1012</url>
+ </pluginRepository>
</pluginRepositories>
- Hadoop 2.6.0が正式リリースされたら、後半2つのdiff(レポジトリのURL設定)は不要になる
ビルドのコマンド
$ mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true
HDFS上へTezのライブラリを配置
既にHDFSが動作していることを想定
$ hdfs dfs -mkdir -p /apps/tez-0.5.2
$ hdfs dfs -put tez-dist/target/tez-0.5.2.tar.gz /apps/tez-0.5.2/
-
tez-0.5.2.tar.gz
のかわりにtez-0.5.2-minimal.tar.gz
を使う方法もある。この場合、pom.xml
を編集してHadoopのバージョンを指定してビルドする必要はないが、tez-site.xml
を編集して、tez.use.cluster.hadoop-libs
プロパティをtrue
に設定する必要がある。
パラメータ設定
tez-site.xml
<configuration>
<property>
<name>tez.lib.uris</name>
<value>${fs.defaultFS}/apps/tez-0.5.2/tez-0.5.2.tar.gz</value>
</property>
</configuration>
- MapReduce on Tezも試すので、
mapred-site.xml
のプロパティmapreduce.framework.name
をyarn
からyarn-tez
に修正する
クライアントにjarを配置
$ mkdir -p /usr/local/tez-jars/0.5.2
$ export TEZ_JARS=/usr/local/tez-jars/0.5.2
# export文は、bashrcあたりに書いておく
$ tar xvzf tez-dist/target/tez-0.5.2-minimal.tar.gz -C $TEZ_JARS
HADOOP_CLASSPATH
に配備したjarを指定する
hadoop-env.sh
for f in $HADOOP_HOME/contrib/capacity-scheduler/*.jar; do
if [ "$HADOOP_CLASSPATH" ]; then
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f
else
export HADOOP_CLASSPATH=$f
fi
done
+
+ # tez-site.xmlを配置したディレクトリを指定する
+ export TEZ_CONF_DIR=$HADOOP_HOME/etc/hadoop
+
+ export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${TEZ_CONF_DIR}:${TEZ_JARS}/*:${TEZ_JARS}/lib/*
# The maximum amount of heap to use, in MB. Default is 1000.
#export HADOOP_HEAPSIZE=
#export HADOOP_NAMENODE_INIT_HEAPSIZE=""
動作確認
ResourceManager, NodeManagerを起動し、MapReduceジョブを走らせる
- とりあえずPiEstimator
$ hadoop jar hadoop-mapreduce-examples-2.6.0.jar pi 10 1000
Number of Maps = 10
Samples per Map = 1000
14/11/12 17:34:50 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Wrote input for Map #4
Wrote input for Map #5
Wrote input for Map #6
Wrote input for Map #7
Wrote input for Map #8
Wrote input for Map #9
Starting Job
14/11/12 17:34:54 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
14/11/12 17:34:55 INFO input.FileInputFormat: Total input paths to process : 10
14/11/12 17:34:55 INFO mapreduce.JobSubmitter: number of splits:10
14/11/12 17:34:56 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1415780973920_0001
14/11/12 17:34:56 INFO client.YARNRunner: Number of stages: 2
14/11/12 17:34:57 INFO client.TezClient: Tez Client Version: [ component=tez-api, version=0.5.2, revision=${buildNumber}, SCM-URL=scm:git:https://git-wip-us.apache.org/repos/asf/tez.git, buildTIme=2014-11-12T05:39:28Z ]
14/11/12 17:34:57 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
14/11/12 17:34:57 INFO client.TezClient: Submitting DAG application with id: application_1415780973920_0001
14/11/12 17:34:57 INFO client.TezClientUtils: Using tez.lib.uris value from configuration: hdfs://localhost:9000/apps/tez-0.5.2/tez-0.5.2.tar.gz
14/11/12 17:34:57 INFO client.TezClient: Tez system stage directory hdfs://localhost:9000/tmp/hadoop-yarn/staging/root/.staging/job_1415780973920_0001/.tez/application_1415780973920_0001 doesn't exist and is created
14/11/12 17:34:57 INFO client.TezClient: Submitting DAG to YARN, applicationId=application_1415780973920_0001, dagName=QuasiMonteCarlo
14/11/12 17:34:57 INFO impl.YarnClientImpl: Submitted application application_1415780973920_0001
14/11/12 17:34:57 INFO client.TezClient: The url to track the Tez AM: http://localhost:8088/proxy/application_1415780973920_0001/
14/11/12 17:34:57 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
14/11/12 17:34:57 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
14/11/12 17:34:57 INFO mapreduce.Job: The url to track the job: http://localhost:8088/proxy/application_1415780973920_0001/
14/11/12 17:34:57 INFO mapreduce.Job: Running job: job_1415780973920_0001
14/11/12 17:35:14 INFO mapreduce.Job: Job job_1415780973920_0001 running in uber mode : false
14/11/12 17:35:14 INFO mapreduce.Job: map 0% reduce 0%
14/11/12 17:36:07 INFO mapreduce.Job: map 30% reduce 0%
14/11/12 17:36:08 INFO mapreduce.Job: map 40% reduce 0%
14/11/12 17:36:09 INFO mapreduce.Job: map 80% reduce 0%
14/11/12 17:36:10 INFO mapreduce.Job: map 100% reduce 0%
14/11/12 17:36:10 INFO mapreduce.Job: map 100% reduce 100%
14/11/12 17:36:10 INFO mapreduce.Job: Job job_1415780973920_0001 completed successfully
14/11/12 17:36:10 INFO mapreduce.Job: Counters: 0
Job Finished in 76.579 seconds
- 細かいけど、
revision=${buildNumber}
と表示されているのはなんだか怪しい。Git repositoryをチェックアウトするのではなく、ソースコードを直接ダウンロードしてビルドしたからなのかな。
ResourceManagerのWebUIを見ても、確かにTEZで動いていることがわかる
- 話がそれるが、StartTime, FinishTimeがGMTで表示される問題はHadoop 2.7.0で修正予定 (YARN-570)
最後に
Hive on Tezを試してみようとしたのですが、Tezのインストールだけで結構な量(ただし手順はそれほど多くない)になってしまったので、この記事はTezだけになりました。次の記事はHive on Tezの予定です。
追記 (2016/8/19)
最近のTezだとtez-uiが搭載されていて、ビルドするためにbzip2が必要。CentOS 7のminimalだと入っていないのでインストールしておく必要がある。