Tez VS Spark - 巨大的性能差异
Tez VS Spark - huge performance diffs
我正在使用 HDP 2.6.4,我发现 Spark SQL 与 TeZ 上的 Hive 存在巨大差异。这是对约 95 M 行
的 table 的简单查询
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
使用 tez.runtime.compress 和 Snappy
数据为 Parquet 格式,未应用压缩
tez.task.resource.memory 6134MB
tez.counters.max 10000
tez.counters.max.组 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
启用矢量化和地图矢量化 true
启用减少矢量化 false
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"}
即检查 table 本身时:STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
和 OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
spark 和 tez 之间的任何比较通常得出相对相同的术语,但我看到了巨大的差异。
首先要检查什么?
感谢
最后还是放弃了,安装了LLAP。我将接受它作为答案,因为我有某种强迫症,这个悬而未决的问题已经让我眼前一亮。
我正在使用 HDP 2.6.4,我发现 Spark SQL 与 TeZ 上的 Hive 存在巨大差异。这是对约 95 M 行
的 table 的简单查询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
使用 tez.runtime.compress 和 Snappy
数据为 Parquet 格式,未应用压缩
tez.task.resource.memory 6134MB
tez.counters.max 10000
tez.counters.max.组 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
启用矢量化和地图矢量化 true
启用减少矢量化 false
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"}
即检查 table 本身时:STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
和 OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
spark 和 tez 之间的任何比较通常得出相对相同的术语,但我看到了巨大的差异。
首先要检查什么?
感谢
最后还是放弃了,安装了LLAP。我将接受它作为答案,因为我有某种强迫症,这个悬而未决的问题已经让我眼前一亮。