Hadoop学习:MapReduce实现WordCount经典案例

简介: Hadoop学习:MapReduce实现WordCount经典案例

一、✌题目要求

> 统计文本中每个单词的数量

二、✌实现思想

> Map阶段默认输入为TextInputFormat,键值对对应为行的偏移量和每行的文本内容
> 在map函数中将每行文本进行切分,提取出每个单词
> 在Reduce阶段根据相同Key值进行累加求和
> 

三、✌代码实现

1.✌Map类

public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //获取每一行的文本
        String line = value.toString();
        //将每行文本进行切分
        String[] words = line.split(" ");
        //循环写入,写出格式为:hello 1
        for (String word : words) {
            context.write(new Text(word), new IntWritable(1));
        }
    }
}

2.✌Reduce

public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        //创建计数变量
        int sum = 0;
        //统计相同key对应的value值进行累加
        for (IntWritable value : values) {
            sum += value.get();
        }
        //写出,写出格式为:hello 3
        context.write(key, new IntWritable(sum));
    }
}

3.✌Driver类

public class WordCountDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        //设置文件输入输出路径
        args=new String[]{"D:/input/inputword","D:/output"};
        //打印日志信息
        BasicConfigurator.configure();
        //创建配置信息对象
        Configuration conf=new Configuration();
        //获取job对象
        Job job= Job.getInstance(conf);
        //关联Driver、Map、Reduce类
        job.setJarByClass(WordCountDriver.class);
        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReducer.class);
        //设置Map阶段的输出格式
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        //设置最终的输出格式
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        //配置文件路径
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        FileOutputFormat.setOutputPath(job,new Path(args[1]));
        //提交任务
        boolean result=job.waitForCompletion(true);
        System.exit(result?0:1);
    }
}


目录
相关文章
|
1月前
|
分布式计算 Hadoop Java
Hadoop MapReduce编程
该教程指导编写Hadoop MapReduce程序处理天气数据。任务包括计算每个城市ID的最高、最低气温、气温出现次数和平均气温。在读取数据时需忽略表头,且数据应为整数。教程中提供了环境变量设置、Java编译、jar包创建及MapReduce执行的步骤说明,但假设读者已具备基础操作技能。此外,还提到一个扩展练习,通过分区功能将具有相同尾数的数字分组到不同文件。
26 1
|
1月前
|
存储 分布式计算 Hadoop
Hadoop生态系统详解:HDFS与MapReduce编程
Apache Hadoop是大数据处理的关键,其核心包括HDFS(分布式文件系统)和MapReduce(并行计算框架)。HDFS为大数据存储提供高容错性和高吞吐量,采用主从结构,通过数据复制保证可靠性。MapReduce将任务分解为Map和Reduce阶段,适合大规模数据集的处理。通过代码示例展示了如何使用MapReduce实现Word Count功能。HDFS和MapReduce的结合,加上YARN的资源管理,构成处理和分析大数据的强大力量。了解和掌握这些基础对于有效管理大数据至关重要。【6月更文挑战第12天】
53 0
|
1月前
|
分布式计算 Java Hadoop
简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行
简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行
27 0
|
1月前
|
分布式计算 Hadoop Java
使用Hadoop MapReduce分析邮件日志提取 id、状态 和 目标邮箱
使用Hadoop MapReduce分析邮件日志提取 id、状态 和 目标邮箱
|
1月前
|
存储 分布式计算 Hadoop
大数据之hadoop3入门到精通(一)
大数据之hadoop3入门到精通(一)
|
1月前
|
分布式计算 Hadoop 分布式数据库
Hadoop生态系统介绍(二)大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍
Hadoop生态系统介绍(二)大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍
92 2
|
1月前
|
存储 分布式计算 Hadoop
Spark和Hadoop都是大数据处理领域的重要工具
【6月更文挑战第17天】Spark和Hadoop都是大数据处理领域的重要工具
134 59
|
20天前
|
分布式计算 Hadoop Java
优化大数据处理:Java与Hadoop生态系统集成
优化大数据处理:Java与Hadoop生态系统集成
|
26天前
|
存储 分布式计算 大数据
Hadoop 生态圈中的组件如何协同工作来实现大数据处理的全流程
Hadoop 生态圈中的组件如何协同工作来实现大数据处理的全流程
|
1月前
|
分布式计算 资源调度 Hadoop
大数据Hadoop集群部署与调优讨论
大数据Hadoop集群部署与调优讨论

相关实验场景

更多