mapreduce--单词分析

WCDriver

java 复制代码
package com.atguigu.mr.wordcount;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/*
    程序的入口
    1.创建job实例并允许
 */
public class WCDriver {
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
//        创建job实例
        Configuration conf=new Configuration();
        Job job=Job.getInstance(conf);

//        给job赋值
//        关联本程序的jar 运行必须写
        job.setJarByClass(WCDriver.class);
//        设置mapper reduce类
        job.setMapperClass(WCMapper.class);
        job.setReducerClass(WCReducer.class);
//        设置mapper输出的key value的类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);
//        设置最终输出的key value类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);

/*
设置输出路径
windows:
FileInputFormat.setInputPaths(job,new Path("//"));
FileInputFormat.setOutputPaths(job,new Path("//"));


 */
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        FileOutputFormat.setOutputPath(job,new Path(args[1]));
//        FileInputFormat.setInputPaths(job,new Path("F:\\input"));
//        FileOutputFormat.setOutputPath(job,new Path("F:\\aa\\output"));
//        运行job
        boolean b=job.waitForCompletion(true);
        System.out.println("b===="+ b);



    }
}

WCMapper

java 复制代码
package com.atguigu.mr.wordcount;

import org.apache.commons.net.imap.IMAP;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.xbill.DNS.LOCRecord;

import java.io.IOException;

/*
    mapper阶段会运行MapTask -会调用Mappper类
      在该类中实现业务逻辑
 */
public class WCMapper extends Mapper<LongWritable,Text,Text, LongWritable> {

    private Text outKey=new Text();
    private LongWritable outValue=new LongWritable();

    /**
     *
     * @param key 读取数据时的偏移量
     * @param value 读取的数据
     * @param context 上下文
     * @throws IOException
     * @throws InterruptedException
     */

    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, LongWritable>.Context context) throws IOException, InterruptedException {
//        super.map(key, value, context);
//        1.将数据进行切割



//        1.1将Text转换成string---为了使用String API
        String line=value.toString();
//        1.2对数据切割
        String[] words =line.split("");

//        2.遍历数据
        for (String word:words){
//            3.封装key,value
//            创建key,value对象


//            赋值
            outKey.set(word);
            outValue.set(1);
//            4.将 key,value写进去
            context.write(outKey,outValue);


        }
//
//

    }
}

WCReduce

java 复制代码
package com.atguigu.mr.wordcount;

import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/*
    reduce阶段会运行reduceTask -会调用reducer类
      在该类中实现业务逻辑
 */
public class WCReducer extends Reducer <Text,LongWritable,Text,LongWritable> {
    private LongWritable outValue=new LongWritable();
    /**
     *
     * @param key
     * @param values
     * @param context
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void reduce(Text key, Iterable<LongWritable> values, Reducer<Text, LongWritable, Text, LongWritable>.Context context) throws IOException, InterruptedException {
//        super.reduce(key, values, context);
        //        super.reduce(key, values, context);
        long sum =0; //value的和
//    遍历所有的value
        for (LongWritable value : values){
            long v=value.get();
//            累加
            sum+=v;

        }
        outValue.set(sum);
        context.write(key,outValue);
    }
}
相关推荐
小新学习屋2 小时前
Spark从入门到熟悉(篇三)
大数据·分布式·spark
rui锐rui2 小时前
大数据学习2:HIve
大数据·hive·学习
G皮T2 小时前
【Elasticsearch】检索高亮
大数据·elasticsearch·搜索引擎·全文检索·kibana·检索·高亮
zskj_zhyl7 小时前
智慧养老丨从依赖式养老到自主式养老:如何重构晚年生活新范式
大数据·人工智能·物联网
哲科软件7 小时前
从“电话催维修“到“手机看进度“——售后服务系统开发如何重构客户体验
大数据·智能手机·重构
zzywxc7877 小时前
AI 正在深度重构软件开发的底层逻辑和全生命周期,从技术演进、流程重构和未来趋势三个维度进行系统性分析
java·大数据·开发语言·人工智能·spring
专注API从业者7 小时前
构建淘宝评论监控系统:API 接口开发与实时数据采集教程
大数据·前端·数据库·oracle
一瓣橙子9 小时前
缺少关键的 MapReduce 框架文件
大数据·mapreduce
永洪科技16 小时前
永洪科技荣获商业智能品牌影响力奖,全力打造”AI+决策”引擎
大数据·人工智能·科技·数据分析·数据可视化·bi
weixin_3077791316 小时前
Hive集群之间迁移的Linux Shell脚本
大数据·linux·hive·bash·迁移学习