「Tez on EMRを試してみた」というタイトルで話しました #cmdevio2015G

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

3/27と3/29に弊社主催でDevelopers.IO 2015というイベントを開催しました。そこでApache TezをEMR上で動作させた検証結果について話しました。

内容としてはまずはEMR、Hadoop、Hive、Tezの概要を説明し、その上でEMR上でTezをインストールしてHiveのエンジンとして利用する方法と実際に簡単なSQLを実行してみた結果について話しました。

Tezとは

TezとはDAG(directed-acyclic-graph)モデルによる並列分散処理フレームワークです。具体的にはVertex(頂点)に処理を定義してEdge(辺)でVertex間を依存関係を定義するような書き方になります *1
Tez on EMRを試してみた.022
ソフトウェアスタックとしてはHadoop2で追加されたYARNというリソース管理基盤で上で、MapReduceエンジンの代わりにTezを利用できます。
Tez on EMRを試してみた.023
MapReduceエンジンの代わりにTezエンジンをそのまま利用できるため既存のMapReduceジョブ、Hiveジョブ、PigジョブなどをTezをインストールするだけで高速化することが期待できます。特にHive、PigではコンパイラでDAGモデルにコンパイルすることでMapReduceモデルにコンパイルする場合よりも処理の段数を減らすことが可能で、大幅な高速化が期待されます *2
Tez on EMRを試してみた.026

Tez on EMR

Tezに関しては現在公式のBootstrap Actionが提供されていないため *3、公式のインストール手順を参考にEMRへのインストール手順を調査しました。CloudFrontのアクセスログの集計SQLを実行したところ約1/10に処理時間が短縮されることを確認しました。
Tez on EMRを試してみた.034
前提となる環境及びインストール手順、テーブル定義やSQLについてはスライドをご参照下さい。

まとめ

Tezを利用することで処理時間が短縮されれば、既存のバッチを実行する際のノード数を減らしたり処理時間を減らすことでAWS利用費の削減が見込めます。
Tez on EMRを試してみた.039
なお、通常のHiveジョブであればSSHでログインしてSQLを実行した場合でもEMRのデバッグログを有効にしていれば[All interactive jobs]としてマネジメントコンソール上でログの確認ができます。ですが、この部分はEMR独自の拡張実装のようですので自前でTezをインストールしてもEMRのジョブの履歴としては記録されませんでした。また、本来Tezは各ノードへのインストールが不要ですが、AWSのフォーラムで提供されていたベータ版のBootstrap Actionでは各ノードにTezのjarファイルを配る実装になっていました。そのため、プロダクション環境で利用するにはAWS公式のBootstrap Actionが提供されることを待った方が無難だと考えます。

脚注

  1. あくまでイメージで、実際の引数の型や数は異なります。
  2. Tezの開発を主導しているHortonworksによると100倍早くなるとのことです。
  3. 一応、AWSのフォーラム上でベータが提供されてはいます。