Hadoop实现WordCount详解

文章目录

Hadoop实现WordCount详解

一、引言

在大数据处理领域,WordCount是一个经典的入门级程序,它用于统计文本中每个单词出现的次数。通过Hadoop实现WordCount,我们可以利用Hadoop的分布式计算能力,高效地处理大规模数据集。本文将详细介绍如何使用Hadoop来实现WordCount程序,包括程序的编写、配置和运行。

二、Hadoop WordCount实现步骤

1、环境搭建

在开始编写WordCount程序之前,我们需要搭建一个Hadoop全分布模式集群。这里直接略过了,如果需要自行百度

2、编写WordCount程序

2.1、Mapper类

Mapper类负责读取输入的文本数据,并将其分割成单词,然后输出中间键值对。这里,我们将每个单词作为键,值为1。

java 复制代码
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;

public class WordCountMapper extends Mapper<Object, Text, Text, IntWritable> {
    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    @Override
    protected void map(Object key, Text value, Context context) throws IOException, InterruptedException {
        String[] words = value.toString().split("\\s+");
        for (String w : words) {
            word.set(w);
            context.write(word, one);
        }
    }
}
2.2、Reducer类

Reducer类负责接收Mapper输出的中间结果,并汇总每个单词的总频率。

java 复制代码
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;

public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    private IntWritable result = new IntWritable();

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int sum = 0;
        for (IntWritable val : values) {
            sum += val.get();
        }
        result.set(sum);
        context.write(key, result);
    }
}
2.3、驱动类

驱动类负责设置作业的配置,定义Mapper和Reducer,以及输入输出路径。

java 复制代码
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
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;

public class WordCountDriver {
    public static void main(String[] args) throws Exception {
        if (args.length != 2) {
            System.err.println("Usage: WordCount <input path> <output path>");
            System.exit(-1);
        }
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "word count");
        job.setJarByClass(WordCountDriver.class);
        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

三、编译与打包

编译WordCount.java文件,并将其打包成jar包,以便在Hadoop集群上运行。

bash 复制代码
bin/hadoop com.sun.tools.javac.Main WordCount.java #将WordCount.java编译成.class文件
jar cf wc.jar WordCount*.class #将.class文件打包成jar包

四、运行WordCount程序

启动Hadoop集群,并提交WordCount作业。

bash 复制代码
cd /opt/hadoop/hadoop/sbin
start-all.sh

然后,使用hadoop命令提交作业:

bash 复制代码
hadoop jar wc.jar WordCountDriver /input/path /output/path

五、总结

通过本文的介绍,我们了解了如何使用Hadoop实现WordCount程序。从环境搭建到程序编写,再到作业的提交和运行,每一步都是实现大数据处理的关键。WordCount程序虽然简单,但它是理解Hadoop分布式计算框架的一个很好的起点。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

相关推荐
2501_9436953325 分钟前
大专市场调查与统计分析专业,怎么辨别企业招聘的“画饼”岗位?
大数据
七夜zippoe29 分钟前
CANN Runtime跨进程通信 共享设备上下文的IPC实现
大数据·cann
威胁猎人36 分钟前
【黑产大数据】2025年全球电商业务欺诈风险研究报告
大数据
十月南城1 小时前
Hadoop基础认知——HDFS、YARN、MapReduce在现代体系中的位置与价值
hadoop·hdfs·mapreduce
L543414461 小时前
告别代码堆砌匠厂架构让你的系统吞吐量翻倍提升
大数据·人工智能·架构·自动化·rpa
证榜样呀1 小时前
2026 大专计算机专业必考证书推荐什么
大数据·前端
LLWZAI1 小时前
让朱雀AI检测无法判断的AI公众号文章,当创作者开始与算法「躲猫猫」
大数据·人工智能·深度学习
難釋懷1 小时前
分布式锁的原子性问题
分布式
SickeyLee1 小时前
产品经理案例分析(五):电商产品后台设计:撑起前台体验的 “隐形支柱”
大数据
callJJ2 小时前
Spring AI 文本聊天模型完全指南:ChatModel 与 ChatClient
java·大数据·人工智能·spring·spring ai·聊天模型