Pig on Tez / Hive on Tez メモ

昨年9月にPig on Tezの記事を書いて半年。 Hadoopも2.6系がリリースされ、Tezも0.6がリリース。 PigもHiveも正式にTez対応となりました。

今更ですが、Pig 0.14 + Tez 0.6.0 の組み合わせで、 Pig on Tezを実行してみようとすると動かない。

ログを見ると、クライアントのTezは0.5.2、サーバのTezは0.6.0というメッセージが。 Pig側を見ると、0.14のバイナリは Tez 0.5.2 が対応バージョンとのこと。

Tez 0.6.0 で動かしたい身として、Pigをリビルドしました。

Tez 0.6.0利用向けPig 0.14.0 ビルド

  1. Pigソースコード入手

    Pigコミュニティのダウンロードページには、0.14のソースコードも入手可能。 バイナリではなく、ソースコードを入手しました。

  2. ビルド環境準備

    HadoopMavenですが、PigはAntです。Apache Antを導入します。 ビルドのJavaは、OracleJDK 7を利用。

  3. ビルド

    普通にビルドしたのでは、Tezは0.5.2が入るため、Tezのバージョンを0.6.0にします。 Hadoopも23(Hadoop2系向け)を選択します。以下のようにビルドしました。

     [sinchii@work]$ ${ANT_HOME}/bin/ant -Dhadoopversion=23 -Dtez.version=0.6.0 jar
    

  4. 確認

    この手順でビルドしたPigとHDFSに導入したTez 0.6.0を利用して、Pig Latinを実行すると、バージョン情報でTez 0.6.0の利用を確認できます。

    2015-03-07 23:37:58,275 [main] INFO  org.apache.pig.tools.pigstats.tez.TezPigScriptStats - Script Statistics:

    HadoopVersion: 2.6.0                                                                                               
       PigVersion: 0.14.0-SNAPSHOT                                                                                     
       TezVersion: 0.6.0                                                                                               
           UserId: sinchii                                                                                             
         FileName:                                                                                                     
        StartedAt: 2015-03-07 23:37:47                                                                                 
       FinishedAt: 2015-03-07 23:37:58
    

    Pigはビルドしなおしたため、0.14.0-SNAPSHOTになってしまいました。 とはいえ、これでPig 0.14.0 でもTez 0.6.0を利用できそうです。

Hive 1.0 でも Tez 0.6.0を使う

Hive 1.0 でもTez 0.6.0を利用したいので、導入を試みてみました。 Tezを既にビルド済みの場合、Hiveはリビルドしなくても動作したようです。

  1. hive-site.xml

    Hive設定ファイルに、プロパティ名"hive.execution.engine"、値"tez"を設定する。

    また、プロパティ名"tez.lib.uris"、値"HDFS上のTezファイルのフルパス(hdfs://から始まる)を設定する。(他のファイルでも良いか?)

  2. mapred-site.xml

    MapReduce設定ファイルに、プロパティ名"mapreduce.framework.name"、値"yarn-tez"を設定する。

  3. hive-env.sh

    Hive環境設定ファイルに、以下のように記載する。(${TEZ_HOME}はビルドしたtez-0.6.0.tar.gz を展開したディレクトリを指定。)

    export HIVE_CLASSPATH=${HIVE_CLASSPATH}:${TEZ_HOME}/:${TEZ_HOME}/lib/
    

この設定で動作した。

Hive on Tezの場合、処理途中の画面で進捗率がバーで表示される。

Status: Running (Executing on YARN cluster with App id application_1425734864751_0005)

--------------------------------------------------------------------------------
        VERTICES      STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED
--------------------------------------------------------------------------------
Map 1 ..........   SUCCEEDED      1          1        0        0       0       0
Map 2 ..........   SUCCEEDED      1          1        0        0       0       0
--------------------------------------------------------------------------------
VERTICES: 02/02  [==========================>>] 100%  ELAPSED TIME: 6.79 s     
--------------------------------------------------------------------------------
OK

これで、Hive 1.0 でも Tez 0.6.0を利用できそうだ。

以前Tezは色々なバージョンを利用できそうと書いたような気がするが、 一体どれだけの人が、複数のバージョンを使い分けることになるのだろうか。 今日時点では、ちょっと見えない感じである。