AWS
hadoop
EMR
Tez

Hive on EMRで手っ取り早くTezを使う

More than 3 years have passed since last update.


サマリ

社内でTezのデモを見たんだけど、非常に使い始めが簡単で、しかもクエリ高速化の効果がかなり高いので使い方をまとめておく。手順的にはビルド済みのTezをEMRのBootstrap actionでS3から配布する感じ。

Hiveの実行エンジンをMapReduceからTezに変えるだけで25%から、場合によっては50%以上も性能が上がるので、費用対効果としてはかなり高い施策だと思う。


クラスタ起動

aws emr create-cluster \

--name tez_installed_cluster \
--ami-version 3.5.0 \
--applications Name=Hive \
--instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=c3.xlarge InstanceGroupType=CORE,InstanceCount=4,InstanceType=c3.xlarge \
--ec2-attributes SubnetId=YOUR_SUBNET_ID,KeyName=YOUR_KEY_PAIR \
--log-uri s3://PATH/TO/LOG/ \
--enable-debugging \
--bootstrap-actions Name=tez,Path=s3://support.elasticmapreduce/bootstrap-actions/ami/3.2.x/install-tez.beta \
--steps Name=setup-tez,Jar=s3://elasticmapreduce/libs/script-runner/script-runner.jar,Args=s3://support.elasticmapreduce/bootstrap-actions/ami/3.2.x/setup-tez.beta

ポイントはbootstrap actionで起動されるinstall-tez.betaとsetup-tezと命名したstepで実行されるsetup-tez.betainstall-tez.betaでビルド済みのTezをダウンロードしてきて、setup-tez.betaでHDFSに配置したりいろいろしてる感じ。

まあこの2行については何も変える必要はないのでコピペして動かせばOK。


Tezを使う

Tezを使うのはすごく簡単

$ hive

hive> set hive.execution.engine=tez; 

これでOK。あとはHiveでいつもどおりクエリするだけ。


MapReduceとくらべてみる

AmplabのビッグデータベンチマークのRankingsテーブルを使って比べてみることにする。

hive> CREATE EXTERNAL TABLE Rankings (

pageURL STRING,
pageRank STRING,
avgDuration STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS SEQUENCEFILE
LOCATION 's3://big-data-benchmark/pavlo/sequence/1node/rankings/';

hive> select count(1) from rankings;
Status: Finished successfully
OK
17999999

ということでこの1800万行のテーブルへのクエリをMapReduceとTezで比べてみる。


MapReduce

hive> set hive.execution.engine=mr; 

hive> select pagerank, count(1) from rankings group by pagerank;
Time taken: 97.975 seconds, Fetched: 3213 row(s)


Tez

hive> set hive.execution.engine=tez; 

hive> select pagerank, count(1) from rankings group by pagerank;
Time taken: 72.925 seconds, Fetched: 3213 row(s)

所要時間 MR 97.975秒 vs Tez 72.925秒ということで、 劇的に とまではいかないが25%くらいの高速化はされている。もちろん、クエリの性質にも依存してると思うのでいろいろなパターンを検証してみないとより精緻な数値は出ない。

が、エンジンを変えるだけでこれだけ性能があたるというのはだいぶお得感がある。


お約束

このポストは個人のメモであり、私の所属する組織を代表するものではありません。