Monday, April 16, 2018

HiveOnSpark系列:spark jobs partition数量调优问题


HiveOnSpark上跑Spark application时,发现部分stage对应的task数量很少,导致full-gc严重。例如下图中的stage只有17个tasks在跑。即使设置了spark.sql.shuffle.partitions=1201和spark.default.parallelism=1202也没有用,依旧是17个。

通过trace spark源码发现mapred.reduce.tasks参数虽然已经deprecated,但会优先spark.sql.shuffle.partitions设置到环境变量中。(spark-2.0:SetCommand:44)



同时,根据同事给的hadoop参数优化项里hive.exec.reducers.bytes.per.reducer,把两者按如下配置后,4个stage启动的tasks数量分别从82/33/17/526变为了82/1201/1201/1201,大大增加了partition数量并as expected. 由此可见,HiveOnSpark时,Spark的execution plan应该还是走了Hive的逻辑,所以部分hadoop相关的参数会主导spark的执行计划的生成逻辑和结果


set hive.exec.reducers.bytes.per.reducer=67108864;
set mapred.reduce.tasks=1201;



P.S. 
Hive version: 0.23 
Spark version: 2.0.3

REFERENCE:
  • https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-hive.exec.reducers.bytes.per.reducer

No comments:

Post a Comment