在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>

*/
在java中编写map小程序(2)

  • ————————————————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
    在java中编写map小程序(2)
    在java中编写map小程序(2)