Tez VS Spark-巨大的性能差异

问题描述 投票:1回答:1

我正在使用HDP 2.6.4,并且看到了Spark SQL与TeZ上的Hive的巨大差异。这是一个对约95 M行的表的简单查询]

SELECT DT, Sum(1) from mydata GROUP BY DT

[DT是分区列,一个标记日期的字符串。

在Spark Shell中,有15个执行程序,驱动程序10G内存,执行程序15G,查询运行10-15秒。

在Hive上运行(来自beeline)时,查询将运行(实际上仍在运行)500+秒。 (!!!)更糟糕的是,此应用程序比我在其中运行作业的spark shell会话占用的资源更多(很多)。

更新:完成1 row selected (672.152 seconds)

有关环境的更多信息:

  • 仅使用一个队列,并具有容量调度程序

  • 运行作业的用户是我自己的用户。我们已将Kerberos用于LDAP

  • AM资源:4096 MB

  • 通过Snappy使用tez.runtime.compress

  • 数据为Parquet格式,未应用压缩

  • tez.task.resource.memory 6134 MB

  • tez.counters.max 10000

  • tez.counters.max.groups 3000

  • tez.runtime.io.sort.mb 8110 MB

  • tez.runtime.pipelined.sorter.sort.threads 2

  • tez.runtime.shuffle.fetch.buffer.percent 0.6

  • tez.runtime.shuffle.memory.limit.percent 0.25

  • tez.runtime.unordered.output.buffer.size-mb 460 MB

  • 启用矢量化和地图矢量化为真

  • 启用缩小矢量化错误

  • hive.vectorized.groupby.checkinterval 4096

  • hive.vectorized.groupby.flush.percent 0.1

  • hive.tez.container.size 682

更多更新:

[在此link上进行矢量化检查时,我注意到当我使用explain时在任何地方都没有看到矢量化执行:true。引起我注意的另一件事是:table:{"input format:":"org.apache.hadoop.mapred.TextInputFormat","output format:":"org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat","serde:":"org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe"}

即,检查表本身时:STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'

spark和tez之间的任何比较通常都使用相对相同的术语,但是我看到了巨大的差异。

首先要检查什么?

Thx

apache-spark hive apache-spark-sql hortonworks-data-platform apache-tez
1个回答
0
投票

最后,我们放弃并安装了LLAP。我将接受它作为答案,因为我有点强迫症,而这个悬而未决的问题已经引起我足够长的关注。

© www.soinside.com 2019 - 2024. All rights reserved.