More Related Content Similar to Tez on EMRを試してみた (20) More from Satoshi Noto (9) Tez on EMRを試してみた1. Developer Day
Tez on EMRを試してみた
1
G-‐‑‒1
クラスメソッド株式会社 能登 諭
Ⓒ Classmethod, Inc.
2015年年03⽉月29⽇日
#cmdevio2015G
5. Ⓒ Classmethod, Inc.
Amazon Elastic MapReduce
• http://aws.amazon.com/jp/
elasticmapreduce
• AWSが提供するHadoopのウェブサービス
5
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-what-is-emr.html
6. Ⓒ Classmethod, Inc.
Apache Hadoop
• http://hadoop.apache.org/
• HDFS(分散ファイルシステム)とMapReduce(並
列分散処理フレームワーク)を基礎とするオープン
ソースソフトウェア
• Hadoop2でYARN(リソース管理基盤)を追加
6
7. Ⓒ Classmethod, Inc.
Hadoop Distributed File System
• Master-Slave型の分散ファイルシステム
• ノードを追加することでスケール可能
7
https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html
8. Ⓒ Classmethod, Inc.
MapReduce
• 処理をMapとReduceに分解して実装する並列分散
処理フレームワーク
• Data node上で処理を行うことでデータ転送時間を
最小化している
8
http://insights.wired.com/profiles/blogs/a-beginner-s-guide-to-cloud-apache-hadoop-and-mapreduce-paradigm
9. Ⓒ Classmethod, Inc.
EMRの特徴
• インフラの構築、保守が不要
• 処理の間だけ起動する
• 必要に応じてノード数を増減可能
• データはS3に保持する
• AWSの各種サービスとの連携が容易
9
http://aws.amazon.com/jp/elasticmapreduce/details/
12. Ⓒ Classmethod, Inc.
Apache Hive
• https://hive.apache.org/
• HiveQL(SQL風の言語)を利用してMapReduce
処理を実行できるデータウェアハウス
12
https://cwiki.apache.org/confluence/display/Hive/Design
13. Ⓒ Classmethod, Inc.
HiveQLをMRジョブにコンパイル
hive> EXPLAIN SELECT COUNT(*) FROM impressions;
OK
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-0 is a root stage
!
STAGE PLANS:
Stage: Stage-1
Map Reduce
Map Operator Tree:
TableScan
alias: impressions
...
!
Reduce Operator Tree:
Group By Operator
aggregations: count(VALUE._col0)
mode: mergepartial
outputColumnNames: _col0
Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
Select Operator
...
!
Stage: Stage-0
Fetch Operator
limit: -1
13
15. Ⓒ Classmethod, Inc.
一番いいのを頼む
15
2013/05 https://amplab.cs.berkeley.edu/benchmark/v1/
2014/01
http://hortonworks.com/blog/benchmarking-apache-
hive-13-enterprise-hadoop/
2014/01
http://blog.cloudera.com/blog/2014/01/impala-
performance-dbms-class-speed
2014/02 https://amplab.cs.berkeley.edu/benchmark/
2014/05
http://blog.cloudera.com/blog/2014/05/new-sql-choices-
in-the-apache-hadoop-ecosystem-why-impala-continues-
to-lead/
2014/09
http://blog.cloudera.com/blog/2014/09/new-
benchmarks-for-sql-on-hadoop-impala-1-4-widens-the-
performance-gap/
2014/11
http://www.slideshare.net/hadoopxnttdata/sql-on-
hadoop-201411
19. Ⓒ Classmethod, Inc.
EMRで利用可能なプロダクト
19
Hive Application
http://docs.aws.amazon.com/ja_jp/
ElasticMapReduce/latest/DeveloperGuide/
emr-hive.html
AMI Version 3.6.0だとHive
0.13.1
Impala Application
http://docs.aws.amazon.com/ja_jp/
ElasticMapReduce/latest/DeveloperGuide/
emr-impala.html
AMI Version 3.6.0だとImpala
1.2.4
Spark
Bootstrap
Action
https://github.com/awslabs/emr-bootstrap-
actions/tree/master/spark
Spark 1.3.0 (1.3.0.d) with EMR
AMI 3.5.x and later
Presto
Bootstrap
Action
https://github.com/awslabs/emr-bootstrap-
actions/tree/master/presto まだベータらしい
Drill
Bootstrap
Action
https://github.com/awslabs/emr-bootstrap-
actions/tree/master/drill
動く?
Phoenix
Bootstrap
Action
https://github.com/awslabs/emr-bootstrap-
actions/tree/master/phoenix
動く?
Tez
Bootstrap
Action
https://forums.aws.amazon.com/thread.jspa?
threadID=170560
ベータかつGitHubにも公開され
ていない
21. Ⓒ Classmethod, Inc.
Apache Tez
• http://tez.apache.org/
• YARN上で動作するDAG(directed-acyclic-
graph)モデルによる並列分散処理フレームワーク
21
http://www.slideshare.net/ydn/tez-bikas/2
22. Ⓒ Classmethod, Inc.
DAG API
• 直接DAGを記述するAPIとなっている
22
http://hortonworks.com/blog/expressing-data-processing-in-apache-tez/
24. Ⓒ Classmethod, Inc.
デプロイが簡単
• YARN Applicationとして作られているためクラス
タの個々のノードへのインストールが不要
• 利用ライブラリは予めHDFSにコピーしておく
• 複数バーションを同時に利用できる
24
!
!
Client
Machine
!
!
Node
Manager
TezTask !
!
Node
Manager
TezTaskTezClient
HDFS
Tez Lib 1 Tez Lib 2
!
!
Client
Machine
TezClient
http://www.slideshare.net/ydn/tez-bikas/8
25. Ⓒ Classmethod, Inc.
Hive on Tez
• https://cwiki.apache.org/confluence/
display/Hive/Hive+on+Tez
• Hiveの実行エンジンとしてMRの代わりにTezを利用
25
http://tm.durusau.net/?p=48476
26. Ⓒ Classmethod, Inc.
Hive on MRとの比較
• DAGで表現することで段数を減らす事ができる
26
http://www.slideshare.net/Hadoop_Summit/w-235phall1pandey/9
28. Ⓒ Classmethod, Inc.
前提
• AMI Version 3.6.0
• Hadoop 2.4.0
• Hive 0.13.1
• Tez 0.4.1-incubating(※1)
!
※1 Tez 0.5を利用するにはHive 0.14が必要なため
今回はTez 0.4.1を利用した
28
30. Ⓒ Classmethod, Inc.
セットアップ手順(1)
# Tezのビルド用にMavenとProtocol Buffersをインストール
sudo wget http://repos.fedorapeople.org/repos/dchen/apache-
maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-
apache-maven.repo
sudo sed -i s/$releasever/6/g /etc/yum.repos.d/epel-apache-
maven.repo
sudo yum install -y apache-maven
sudo yum install -y protobuf-devel
!
# Tezのダウンロードとビルド
wget http://archive.apache.org/dist/incubator/tez/tez-0.4.1-
incubating/tez-0.4.1-incubating-src.tar.gz
tar xzf tez-0.4.1-incubating-src.tar.gz
cd tez-0.4.1-incubating-src
mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true
30
31. Ⓒ Classmethod, Inc.
セットアップ手順(2)
# mapred-site.xmlの更新(Hiveのみ利用の場合は不要)
cd
sed -i -e 's:<name>mapreduce.framework.name</
name><value>yarn</value>:<name>mapreduce.framework.name</
name><value>yarn-tez</value>:g' conf/mapred-site.xml
!
# ジョブの起動用のtezフォルダ作成
mkdir tez tez/conf tez/jars
cp -r tez-0.4.1-incubating-src/tez-dist/target/tez-0.4.1-
incubating/tez-0.4.1-incubating/* tez/jars
!
# HDFS上にTez実行用のライブラリをコピー
hadoop fs -mkdir -p /apps/tez-0.4.1
hadoop fs -copyFromLocal tez/jars/* /apps/tez-0.4.1/
hadoop fs -copyFromLocal share/hadoop/mapreduce /apps/
tez-0.4.1/
31
32. Ⓒ Classmethod, Inc.
セットアップ手順(3)
# Tezの設定ファイルの作成
cat << 'EOF' >> tez/conf/tez-site.xml
<?xml version="1.0"?>
<configuration>
<property><name>tez.lib.uris</name><value>${fs.defaultFS}/apps/tez-0.4.1/,$
{fs.defaultFS}/apps/tez-0.4.1/lib/,${fs.defaultFS}/apps/tez-0.4.1/mapreduce/,$
{fs.defaultFS}/apps/tez-0.4.1/mapreduce/lib/</value></property>
<property><name>tez.use.cluster.hadoop-libs</name><value>true</value></
property>
</configuration>
EOF
!
# hiveJars用にホームディレクトリを作っておく
hadoop fs -mkdir ./
!
# Tezの設定ファイルとライブラリをHive起動時にクラスパスに追加するように環境変数を設
定
TEZ_CONF_DIR=/home/hadoop/tez/conf/
TEZ_JARS=/home/hadoop/tez/jars/
export HADOOP_CLASSPATH=${TEZ_CONF_DIR}:${TEZ_JARS}/*:${TEZ_JARS}/lib/*
32
34. Ⓒ Classmethod, Inc.
検証結果
• CloudFrontのアクセスログの集計
• レコード数: 112,019
• EMRのノード数
• Master: 1(m3.xlarge)
• Core: 2(m3.xlarge)
• レスポンスタイム
• Hive on MR: 約220秒
• Hive on Tez: 約18秒
34
35. Ⓒ Classmethod, Inc.
テーブル定義
CREATE EXTERNAL TABLE IF NOT EXISTS impressions (
dt STRING,
tm STRING,
xedgelocation STRING,
scbytes INT,
cip STRING,
csmethod STRING,
cshost STRING,
csuristem STRING,
csstatus STRING,
csreferrer STRING,
csuseragent STRING,
csuriquery STRING,
cscookie STRING,
edgeresulttype STRING,
edgerequestid STRING,
hostheader STRING,
protocol STRING,
csbytes INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY 't'
LOCATION 's3://cf-logs/';
35
37. Ⓒ Classmethod, Inc.
Hive on MRと比較する場合
• mapreduce.framework.name=yarnのままにす
る必要がある。yarn-tezとするとMRの実行エンジ
ンがTezになる
37
MR
MR
YARN
MR
Tez
Tez
mapreduce.frame
work.name
Hive Hive Hive
hive.execution.en
gine
38. Ⓒ Classmethod, Inc.
セットアップのポイント
• tez.use.cluster.hadoop-libs=trueとする
• 実行環境のHadoopのライブラリを利用するオプション。EMRは独自の拡張が
あるため有効にした方が確実
• tez.lib.urisとして/home/hadoop/share/hadoop/mapreduce
配下のライブラリを含める
• yarn.application.classpathに/home/hadoop/share/hadoop/mapreduce
配下が含まれていないため別途HDFS上にコピーする
• hiveJars用にHDFS上にホームディレクトリを作成しておく
• https://cwiki.apache.org/confluence/display/Hive/Configuration
+Properties#ConfigurationProperties-hive.jar.directory
• 公式ドキュメントも読んだ方がよい
• http://tez.apache.org/install_pre_0_5_0.html
38
39. Ⓒ Classmethod, Inc.
まとめ
• EMRでもTezを利用することで既存のジョブの高速
化が期待できる。特にMRジョブが高速化されるのは
他のフレームワークにはないメリット
• EMRに自前でTezを入れるのはかなり無理矢理なの
で公式サポートを待った方が無難
39