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);
    }
}
相关推荐
B站_计算机毕业设计之家8 分钟前
大数据实战:Python+Flask 汽车数据分析可视化系统(爬虫+线性回归预测+推荐 源码+文档)✅
大数据·python·数据分析·flask·汽车·线性回归·预测
Elastic 中国社区官方博客23 分钟前
Simple MCP Client - 连接到 Elasticsearch MCP 并进行自然语言搜索
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
QYResearch1 小时前
QYResearch水平井钻井市场规模调研
大数据
QYResearch1 小时前
QYResearch调研全球仓储物流机器人市场报告
大数据
weixin_456904272 小时前
# Pandas 与 Spark 数据操作完整教程
大数据·spark·pandas
百度Geek说3 小时前
百度APP日志处理框架升级之路
大数据·spark
yumgpkpm5 小时前
CMP (类Cloudera) CDP7.3(400次编译)在华为鲲鹏Aarch64(ARM)信创环境中的性能测试过程及命令
大数据·hive·hadoop·python·elasticsearch·spark·cloudera
hg01185 小时前
“中非咖桥 世界湘见”2025首届星沙-非洲咖啡嘉年华系列活动启动
大数据
Q26433650236 小时前
大数据实战项目-基于K-Means算法与Spark的豆瓣读书数据分析与可视化系统-基于python的豆瓣读书数据分析与可视化大屏
大数据·hadoop·机器学习·数据分析·spark·毕业设计·kmeans
yumgpkpm7 小时前
CMP平台(类Cloudera CDP7.3)在华为鲲鹏的Aarch64信创环境中的性能表现
大数据·flink·kafka·big data·flume·cloudera