当完成读取之后,将切片完的数据作为Map的输入,进行Map;每个切片执行一个Map;
mapper要实现Mapper接口,在其中编写map方法;同时继承MapReduceBase类;实现mapper接口,其中有四种形式的参数,keyin,value,keyout,valueout,分别来指定输入key,value类型,输出key,value类型;
Mapper类中还提供了setup(),map(),cleanup(),run()方法,分别用于执行map之前的准备工作,在所有map任务完成后被调用,进行数据处理的主要操作;用于执行setup()-》run()-》cleanup()-》过程;前两个用于资源管理和利用;
就是通过map类实现mapper接口,即实现map()方法,通过指定输入输出格式来输入输出,其中有几种预定的mapper类如下:
IdentityMapper<key,value>原封不动的将输出为中间结果;
InverseMapper<key,value>将输入的<key,value>作为输出的<key,value> (inverse:逆)
RegexMapper<key>为每一个匹配的正则表达式生成一个(match,1)键值对;(regex:正则表达式)
TokenCountMapper<key>当输入值被标记时,生成一个(token,1)键值对;
MultithreadedMapper(key,value)多线程执行map方法;
Combin/partition
Combine主要负责将map中相同的key,value进行合并,避免重复传输造成文件冗余,但也可以作为结果reduce,其实它就是一种reduce,其默认实现为IndentityReducer类;
Partition过程是将map的运行结果发送到相应的Reduce中,因为reduce数量可能少,可以通过实现Partitioner接口来实现自己的Partition过程来提高负载均衡和分配效率;
Reduce过程实现reducer接口,实现reduce方法,同时继承MapReduceBase;
reduce类将Map的输出作为输入,重写reduce()方法;其中接口的四个参数和map相似;
reducer接收mapper传递过来的key/value对,然后根据key来排序,分组,并生成<key2,list<value2>>最后reducer根据<key2,list<value2>生成<key3,value3>;
预定义的reducer有以下几种:
IndentityReducer<key,value>将输入的<key,value>原封不动的输出为结果;
LongSumReducer<key>对长整型的value值求和;
IntSumReducer对整型的value值求和;
OutputFormat:
数据格式类型和InputFormat类型相似,多了个LazyOUtputFormat类型,延迟输出,保证第一条记录输出的时候才真正的创建文件;
getOutputCommit类管理任务输出;