我打算在spark上执行一个基于hive的sql,设置如下:
select a,b,sum(c) from tbl_a group by a,b
set hive.execution.engine=spark;设置spark.sql.shuffle.partitions=1201;
然后在应用程序启动后,我只能看到spark yarn网页上并行运行的82个任务,这并不像预期的那样。我测试了另一个更复杂的sql(其中包含groupbycube、嵌套sql查询),它在stage-2只产生17个任务,这将导致繁重的完全gc。知道为什么吗 spark.sql.shuffle.partitions
没有任何效果?谢谢!
1条答案
按热度按时间1sbrub3j1#
在强制执行以下两个设置之后,分区号将变为正常,并再次如预期的那样。
set hive.exec.reducers.bytes.per.reducer=67108864; set mapred.reduce.tasks=1201;
似乎hiveonspark仍然应用一些hadoop参数来决定执行计划,并掩盖了相应的spark参数。我已经写了一篇文章详细的场景回放和参考。