我正在使用hdp2.6.4,并且看到了sparksql和tez上的hive之间的巨大差异。下面是一个关于~95m行表的简单查询
SELECT DT, Sum(1) from mydata GROUP BY DT
``` `DT` 是分区列,一个标记日期的字符串。
在sparkshell中,有15个执行器,10g内存用于驱动程序,15g内存用于执行程序,查询运行10-15秒。
在配置单元上运行时(从直线开始),查询将运行(实际上仍在运行)500多秒。(!!!)更糟糕的是,这个应用程序比我在其中运行作业的sparkshell会话需要更多的资源(显著地)。
更新:完成了 `1 row selected (672.152 seconds)` 有关环境的更多信息:
仅使用一个队列,使用容量调度程序
运行作业的用户是我自己的用户。我们将kerberos用于ldap
am资源:4096 mb
使用tez.runtime.compress和snappy
数据为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
启用矢量化和Map矢量化为真
启用减少矢量化错误
hive.vectoried.groupby.checkinterval 4096
hive.vectoried.groupby.flush.percent 0.1
Hive.tez.container.size 682
更多更新:
当检查这个链接上的向量化时,我注意到我在任何地方都没有看到向量化的执行:当我使用 `explain` . 另一件引起我注意的事情是: `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之间的任何比较通常都是相对一致的,但我看到了巨大的差异。
首先要检查的是什么?
谢谢
1条答案
按热度按时间nue99wik1#
最后,我们放弃并安装了llap。我要接受它作为一个答案,因为我有点强迫症,这个没有答案的问题已经戳我的眼睛足够长的时间了。