文章目录
一、参考资料
二、运行环境
- windows 10
- JDK 8
- Hadoop 3.1.3 windows版
- IDEA
三、CombineTextInputFormat 切片机制
Hadoop框架默认的TextInputFormat
切片机制是对任务按文件规划切片,不管文件多小,都会作为一个单独的切片,都会交给一个MapTask执行,当处理大量小文件时,效率会比较低。
CombineTextInputFormat切片机制作用域小文件过多的场景,可以将多个小文件从逻辑上规划到一个切片中,从而实现多个小文件交给一个MapTask处理。
虚拟存储切片最大值的设置:
CombineTextInputFormat.setMaxInputSplitSize(JOB, 4194304); // 4 MB
注:虚拟存储切片最大值最好根据实际的小文件大小情况来设置具体的值
切片机制:
生成切片过程包括:虚拟存储过程和去切片过程两部分
四、词频统计
4.1 Mapper
package com.uni.combineTextInputFormat;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
/** 词频统计
* <KEYIN, VALUEIN, KEYOUT, VALUEOUT>
* KEYIN , map 阶段输入key的类型: LongWritable
* VALUEIN, map 阶段输入value的类型: Text
* KEYOUT, map 阶段输出vkey的类型:Text
* VALUEOUT, map阶段输出的value类型:IntWritable
*/
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
// 放在上面声明防止在循环里多次创建对象,浪费空间
private Text outKey = new Text();
private IntWritable outValue = new IntWritable(1);
@Override