[Work-In-Progress] 
MapReduce/Spark/Tez の 
フェアな 
性能比較に向けて 
oza
背景 
• MapReduce-style フレームワークでは Extract, Transform, Load 
処理を行うことが多い 
• Hadoop/MapReduce 
• Spark 
• Tez 
• 主な ETL workload 
• ソート,集約,ジョインを前処理なしで行う 
• ETL の比較をフェア”に行いたい
背景 
• Spark もディスクベースで高速に動作するらしいの 
で試したい 
• Spark won Daytona GraySort on Nov. 5th, 2014
“フェア” とは? 
• セマンティクスを全て同じにする 
• sort の回数,チェックポイントの回数を同じに 
した上での比較を行いたい 
• Tez と MapReduce は API 互換があるので 
そのまま動かせば良い 
• Spark は API を駆使してがんばる
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
当初想定していたworkload 
• [WIP]TeraSort (sort) 
• 50GB 
• WordCount (aggregation) 
• 20GB (10GB per node) 
• Join 
• やってない
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
Wordcount 20GB 
• MapReduce 11m13.173s 
• Tez 7m19.763s 
• Spark 4m 17s 
• Spark is too fast … why?
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
reduceByKey 
• Working without Sorting - not fair 
• MapReduce は reduce 後に 
キーのソートを行う
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"); 
• => 無理な気がする
困った 
• 何か手はないか?
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/
アーキテクチャ 
Spark API (SparkContext) 
Disk-based RDD 
on Tez 
In-memory RDD 
on Spark
Why do so? 
• ユーザ面の利点 
• Tez は Disk に最適化されているので,ディスクベースのワー 
クロードで高速に動作する…かも? 
• YARN の機能を利用することでマルチユーザ環境で高いス 
ループットを実現 
• ベンチマーク視点で見ると… 
• API が合うのでフェアなベンチマークが可能になるかも 
• https://github.com/hortonworks/spark-native-yarn
benchmark by 
Hortonworks
まとめ 
• Spark/Tez/MapReduce のベンチマークをしようとしたところ, Spark 挙動を併せる 
のがかなり合わせるのが大変だと判明 
• Tez/MapReduce は容易に比較が可能 
• WordCount/TeraSort ベンチマーク中では 
MapReduce と比較して Tez が高速に動作 
• Tez/Spark は Spark on Tez の ON/OFF でベンチマークをするのが無難そう 
• 今後の予定 
• Tez と Spark の比較を行う 
!

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

  • 1.
    [Work-In-Progress] MapReduce/Spark/Tez の フェアな 性能比較に向けて oza
  • 2.
    背景 • MapReduce-styleフレームワークでは Extract, Transform, Load 処理を行うことが多い • Hadoop/MapReduce • Spark • Tez • 主な ETL workload • ソート,集約,ジョインを前処理なしで行う • ETL の比較をフェア”に行いたい
  • 3.
    背景 • Sparkもディスクベースで高速に動作するらしいの で試したい • Spark won Daytona GraySort on Nov. 5th, 2014
  • 4.
    “フェア” とは? •セマンティクスを全て同じにする • sort の回数,チェックポイントの回数を同じに した上での比較を行いたい • Tez と MapReduce は API 互換があるので そのまま動かせば良い • Spark は API を駆使してがんばる
  • 5.
    Environment • GoogleCompute 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
  • 6.
    当初想定していたworkload • [WIP]TeraSort(sort) • 50GB • WordCount (aggregation) • 20GB (10GB per node) • Join • やってない
  • 7.
    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
  • 8.
    Wordcount 20GB •MapReduce 11m13.173s • Tez 7m19.763s • Spark 4m 17s • Spark is too fast … why?
  • 9.
    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
  • 11.
    reduceByKey • Workingwithout Sorting - not fair • MapReduce は reduce 後に キーのソートを行う
  • 12.
    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"); • => 無理な気がする
  • 13.
  • 14.
    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/
  • 15.
    アーキテクチャ Spark API(SparkContext) Disk-based RDD on Tez In-memory RDD on Spark
  • 16.
    Why do so? • ユーザ面の利点 • Tez は Disk に最適化されているので,ディスクベースのワー クロードで高速に動作する…かも? • YARN の機能を利用することでマルチユーザ環境で高いス ループットを実現 • ベンチマーク視点で見ると… • API が合うのでフェアなベンチマークが可能になるかも • https://github.com/hortonworks/spark-native-yarn
  • 17.
  • 18.
    まとめ • Spark/Tez/MapReduceのベンチマークをしようとしたところ, Spark 挙動を併せる のがかなり合わせるのが大変だと判明 • Tez/MapReduce は容易に比較が可能 • WordCount/TeraSort ベンチマーク中では MapReduce と比較して Tez が高速に動作 • Tez/Spark は Spark on Tez の ON/OFF でベンチマークをするのが無難そう • 今後の予定 • Tez と Spark の比較を行う !