18
[Work-In-Progress] MapReduce/Spark/Tez の フェアな 性能比較に向けて oza

MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

Embed Size (px)

DESCRIPTION

■MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

Citation preview

Page 1: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

[Work-In-Progress] MapReduce/Spark/Tez の

フェアな 性能比較に向けて

oza

Page 2: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

背景• MapReduce-style フレームワークでは Extract, Transform, Load 処理を行うことが多い

• Hadoop/MapReduce

• Spark

• Tez

• 主な ETL workload

• ソート,集約,ジョインを前処理なしで行う

• ETL の比較をフェア”に行いたい

Page 3: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

背景• Spark もディスクベースで高速に動作するらしいので試したい

• Spark won Daytona GraySort on Nov. 5th, 2014

Page 4: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

“フェア” とは?• セマンティクスを全て同じにする

• sort の回数,チェックポイントの回数を同じにした上での比較を行いたい

• Tez と MapReduce は API 互換があるのでそのまま動かせば良い

• Spark は API を駆使してがんばる

Page 5: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

Environment• Google Compute Engine

• slave x 2 (WIP!)

• CPU 8 cores

• memory 64GB

• SSD x 8

• Version

• Hadoop 2.5.1

• Tez branch-0.5.2

• Spark branch-1.1.1

Page 6: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

当初想定していたworkload• [WIP]TeraSort (sort)

• 50GB

• WordCount (aggregation)

• 20GB (10GB per node)

• Join

• やってない

Page 7: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

TeraSort 50GB• MapReduce 22m34.220s

• Tez 14m52.593s

• Spark [ポーティング中]

• spark-perf is good place to port

• https://github.com/rxin/spark/blob/terasort/examples/src/main/scala/org/apache/spark/examples/terasort/TeraSort.scala

Page 8: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

Wordcount 20GB

• MapReduce 11m13.173s

• Tez 7m19.763s

• Spark 4m 17s

• Spark is too fast … why?

Page 9: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

Benchmark comparision• MapReduce and Tez

• bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.1.jar terasort -Dmapreduce.job.reduces=16 teragenInput50G out

• Spark

• sc.textFile("hdfs:///user/ozawa/wordcountInput20G") .flatMap(line => line.split(" ")) .map(word => (word, 1)).persist() .reduceByKey((a, b) => a + b, 16) .saveAsTextFile(“hdfs:///user/ozawa/sparkWordcountOutNew1");

• Checking reduceByKey

Page 10: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)
Page 11: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

reduceByKey• Working without Sorting - not fair

• MapReduce は reduce 後にキーのソートを行う

Page 12: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

To be fair…• 同じセマンティクスでやるとしたらどうなるか?

• sc.textFile("hdfs:///user/ozawa/wordcountInput20G") .flatMap(line => line.split(" ")) .map(word => (word, 1)).persist() (ここでパーティションごとにCombiner アリでソート) .reduceByKey((a, b) => a + b, 16) .saveAsTextFile(“hdfs:///user/ozawa/  sparkWordcountOutNew1");

• => 無理な気がする

Page 13: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

困った

• 何か手はないか?

Page 14: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

Spark on Tez• Allow for pluggable execution contexts in Spark

• https://issues.apache.org/jira/browse/SPARK-3561

• Exposing Spark API to everyone :-)

• http://hortonworks.com/blog/improving-spark-data-pipelines-native-yarn-integration/

Page 15: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

アーキテクチャ

Spark API (SparkContext)

Disk-based RDD on Tez

In-memory RDD on Spark

Page 16: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

Why do so?• ユーザ面の利点

• Tez は Disk に最適化されているので,ディスクベースのワークロードで高速に動作する…かも?

• YARN の機能を利用することでマルチユーザ環境で高いスループットを実現

• ベンチマーク視点で見ると…

• API が合うのでフェアなベンチマークが可能になるかも

• https://github.com/hortonworks/spark-native-yarn

Page 17: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

benchmark by Hortonworks

Page 18: MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)

まとめ• Spark/Tez/MapReduce のベンチマークをしようとしたところ, Spark 挙動を併せるのがかなり合わせるのが大変だと判明

• Tez/MapReduce は容易に比較が可能

• WordCount/TeraSort ベンチマーク中ではMapReduce と比較して Tez が高速に動作

• Tez/Spark は Spark on Tez の ON/OFF でベンチマークをするのが無難そう

• 今後の予定

• Tez と Spark の比較を行う

!