在java中编写map小程序(2)
在本地磁盘准备一个文件夹input,下面存放两个文件
【inpu1.txt】
hello word hello hyxy
aaa
bbb aaa aaa bbb
ccc
【input2.txt】
hello word hello avc
hello aaa
hello bbb
map ->(input) <k1, v1> -> (ouput)<k2, v2> -> reduce -><k2, v2> -> <k3, v3> (output)
<0, hello word hello hyxy> <hello,1> <hello,[1,1]> hello 2
<word,1> <word,1> hyxy 1
<hello,1> <hyxy,1> word 1
<hyxy,1>
//第一种创建对象方式,直接赋值
IntWritable one = new IntWritbale(1);
//第二种创建对象方式,通过set
IntWritable one = new IntWritbale();
one.set(1); //赋值
one.get(); //取值并返回int类型
一.集群下运行打包的MR程序:
1.新建工程,在src下创建一个lib文件夹,将hadoop.jar包拷贝到lib文件夹下(143)
2.右键构建路径
3.将log4j.properties放到src下
(本地不需要配置文件)
1)编写MR程序
package com.hyxy;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
/**
*
-
[[email protected] hadoop]$ hadoop fs -cat /input/input1.txt /input/input2.txt
-
/input/input1.txt
hello word hello hyxy
hello aaa
hello bbb
/input/input2.txt
hello ccc
ok
1111
1111 1111<k1, v1 ,k2 , v2>
k1,v1是map函数从hdfs得到的输入内容
<k1,v1>----> <0,hello word hello hyxy>
<k1,v1>----> <21,hello aaa>
<k1,v1>----> <31,hello bbb>
<k1,v1>----> <41,hello ccc>k2 , v2是mapr函数的输出结果给谁的? 给reduce的,所以reduce要接收k2 v2
<k2,v2>----> <hello,1>
<k2,v2>----> <word,1>
<k2,v2>----> <hello,1>
<k2,v2>----> <hyxy,1>
*/
- ————————————————mapper函数的输出————————————————
- k2 , v2是mapr函数的输出结果给谁的? 给reduce的,所以reduce要接收k2 v2
<k2,v2>----> <hello,1>
<k2,v2>----> <word,1>
<k2,v2>----> <hello,1>
<k2,v2>----> <hyxy,1> - ————————————————reduce函数的输入————————————————
- <k2,v2>----> <hello,[1,1,1]>
- <k2,v2>----> <word,[1]>
*/ //k2, v2 ,k3 , v3
没有一种相同类型的key,就调用一次reduce