前言
公司有日志排序的需求,目前收集环节会产生大量小文件,目前我们没有使用flume和Hbase,本次优化只涉及HDFS和MapReduce。
关于小文件对Namenode影响,本文不涉及,我们现在使用HAR归档小文件。
本文的结论基于HDFS大量小文件的情况。
一 、开启Jvm重用对Job影响:
|
文件数 |
文件大小 |
JVM重用 |
耗时 |
Jobid |
|
4815 |
7.54 GB |
Y |
26mins, 5sec |
job_201202211018_0034 |
|
N |
51mins, 49sec |
job_201202211018_0044 |
结论:对于大量小文件Job,开启JVM重用减少50%运行时间
二、Map压缩对Job影响(开启JVM重用)
2.1大量小文件情况
|
文件数 |
文件大小 |
压缩Map输出 |
耗时 |
Jobid |
|
4815
|
7.54 GB |
gz |
38mins, 38sec |
job_201202211018_0034 |
|
— |
27mins, 26sec |
job_201202211018_0031 | ||
|
lzo |
27mins, 17sec |
job_201202211018_0036 |
2.2每个文件140MB情况:
|
文件数 |
文件大小 |
压缩Map输出 |
耗时 |
Jobid |
|
48(合并小文件)
|
7.54 GB |
gz |
29mins, 37sec |
job_201202211018_0039 |
|
— |
24mins, 32sec |
job_201202211018_0042 | ||
|
lzo |
19mins, 18sec |
job_201202211018_0040 |
结论:
- 对于大量小文件Job,使用lzo压缩可以比gz压缩减少28%运行时间。
- 平均140MB输入文件的 Job比大量小文件Job减少30%的时间(jvm重用、map输出lzo)
三、 参数mapred.reduce.parallel.copies
|
任务时间 |
mapred.reduce.parallel.copies |
|
54mins, 21sec |
5(默认值) |
|
45mins, 30sec |
20 |
结论:通过配置参数mapred.reduce.parallel.copies可以提升16%性能
四、 总结
|
优化项 |
优化方法 |
可以减少Job时间 |
|
Jvm重用 |
开启jvm重用 |
50% |
|
mapred.reduce.parallel.copies |
默认值为5,优化值20 |
16% |
|
Map输出LZO格式 |
默认输出为gz,修改为lzo |
28% |
|
合并小文件 |
合并小文件 |
30% |
--本文来自heipark iteye博客
HDFS与MapReduce优化
本文探讨了HDFS中大量小文件对MapReduce作业的影响,并通过实验对比了不同配置下的性能变化,包括JVM重用、Map输出压缩、并行复制参数调整及文件合并等优化手段。
4468

被折叠的 条评论
为什么被折叠?



