0x00 文章内容
- 未修改前情况
- CombineTextInputFormat实现小文件优化
说明:本文章在MapReduce编程例子之Combiner与Partitioner 的Combiner例子基础上执行。
0x01 未修改前情况
1. 当前文件情况
a. 目前/files
文件夹有4个文件
[hadoop-sny@master jar]$ hadoop fs -ls /files/ Found 4 items -rw-r--r-- 1 hadoop-sny supergroup 39 2019-04-18 21:20 /files/put.txt -rw-r--r-- 1 hadoop-sny supergroup 50 2019-12-30 17:12 /files/small1.txt -rw-r--r-- 1 hadoop-sny supergroup 31 2019-12-30 17:10 /files/small2.txt -rw-r--r-- 1 hadoop-sny supergroup 49 2019-12-30 17:11 /files/small3.txt
2. 执行未修改前作业
a. 执行命令如下:
hadoop jar hadoop-learning-1.0.jar com.shaonaiyi.hadoop.CombinerWC /files/* /output/comwc/
3. 查看结果
a. 可在YARN的Web UI界面上看到有4个Map Task
0x02 CombineTextInputFormat实现小文件优化
1. 修改代码
a. 添加一行代码
//合并小文件CombineTextInputFormat job.setInputFormatClass(CombineTextInputFormat.class);
2. 执行修改后作业
a. 执行命令如下(与前面一样):
hadoop jar hadoop-learning-1.0.jar com.shaonaiyi.hadoop.CombinerWC /files/* /output/comwc/
3. 查看结果
a. 可在YARN的Web UI界面上看到只有1个Map Task
0xFF 总结
- 一个Map Task就是一个JVM进程,将一个目录下的所有文件当成了一个split来执行,可以减少JVM的启动,从而提高性能。