问题
I just built Spark 2 with hive support and deploy it to a cluster with Hortonworks 2.3.4. However I find that this Spark 2.0.3 is slower than the standard spark 1.5.3 that comes with HDP 2.3
When I check explain
it seems that my Spark 2.0.3 is not using tungsten. Do I need to create special build to enable Tungsten?
Spark 1.5.3 Explain
== Physical Plan ==
TungstenAggregate(key=[id#2], functions=[], output=[id#2])
TungstenExchange hashpartitioning(id#2)
TungstenAggregate(key=[id#2], functions=[], output=[id#2])
HiveTableScan [id#2], (MetastoreRelation default, testing, None)
Spark 2.0.3
== Physical Plan ==
*HashAggregate(keys=[id#2481], functions=[])
+- Exchange hashpartitioning(id#2481, 72)
+- *HashAggregate(keys=[id#2481], functions=[])
+- HiveTableScan [id#2481], MetastoreRelation default, testing
回答1:
It still uses Tungsten, class was renamed: https://github.com/apache/spark/commit/8900c8d8ff1614b5ec5a2ce213832fa13462b4d4
回答2:
The asterisk before the method indicates that WholeStageCodeGen was used for those tasks. This is Spark2's evolution of the original Tungsten-optimizations. If you see the asterisk, than that means, that Spark2's most optimized code is being used. If this runs (significantly) slower than previously, I would assume that there are configuration differences between your two test environments.
回答3:
I would think it's enabled by default but you can set spark.sql.tungsten.enabled=true
来源:https://stackoverflow.com/questions/43504744/how-to-enable-tungsten-optimization-in-spark-2