起因

由于日常所做统计多数基于一份拼接日志,结合最近做的druid相关工作,很自然的想到把拼接日志一些统计常用字段select group by 出来通过 druid统计,这样就可以把自己从枯燥繁琐的统计脚本中解脱出来了。

性能调优

但是在执行druid的index任务时遇到了任务执行时间过久的问题,由于集群上还有其他例行服务需要资源,因此我这个低优先级的任务必须能够快速执行完成才可以。通过试错以及对网上相关资料的搜索,得到一下几种方法:

  • 通过设置yarn的调度策略,为这种默认占用资源多、执行时间久的任务单独开辟一个队列,限制其能够使用的最大资源量,从而保证其他高优先级的任务能够及时得到处理。而hadoop index任务可以通过在tuningConfig中的jobProperties设置mapreduce.job.queuename
  • 降低每个segment的行数,这个可以通过设置targetPartitionSize完成。因为一个segment对应一个reducer,所以通过减少行数,增加segments个数从而增加reducer个数,充分应用并行化。
  • 在ioConfig中设置rowFlushBoundary字段,并尽可能大。这个参数意味着在将数据写入磁盘前堆中缓存的行数,通过提高缓存从而优化任务执行效率。但也要注意设置不要超过堆内存的上限。

参考资料