mapreduce作业优化-MultithreadedMapRunner

  最近日志解析框架新接入一种日志, 这些原始日志是经过加密的, mr程序解析时需要先解密再解析,实际解析过程中发先原始日志量并不大(30W), 但解析花费时间较长, 经分析,是解密操作比较耗CPU时间, 想到的一种解决方案是在日志采集阶段将日志分散到多个小文件,这样可以充分利用多map并行的优势,但缺点也很明显, HDFS系统将存在很多小文件,对namenode造成负担,同时这个方案需要修改日志采集程序,不够优化.
   另一种方案是采用多线程并行解析方案,即在一个map任务中起多个线程进行解析,充分利用多核优势, 在之前设计日志解析框架时已经考虑到多线程功能,因此无需修改解析程序,只需增加配置.
   启用多线程设置如下:
 jobConf.setMapRunnerClass(MultithreadedMapRunner.class);
默认线程数是 10
可以用
-Dmapred.map.multithreadedrunner.threads=threadNum; 参数自定义设置
   接下来对比下多线程与非多线程之间的效率
解析同一份日志 记录数 372619
非多线程:

启用多线程:

mapreduce作业优化-MultithreadedMapRunner_第1张图片

非多线程需要18分52秒 采用多线程后只需要3分钟,效果还是很明显的。

本文出自 “yyj0531” 博客,请务必保留此出处http://yaoyinjie.blog.51cto.com/3189782/911770

你可能感兴趣的:(mapreduce作业优化-MultithreadedMapRunner)