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分布式计算框架的一个很好的起点。


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

参考文章

相关推荐
阿里云大数据AI技术17 分钟前
NL2SQL 再创佳绩!阿里云论文中选 SIGMOD 2025
大数据·人工智能·云计算
chanalbert2 小时前
Nacos 技术研究文档(基于 Nacos 3)
spring boot·分布式·spring cloud
庄小焱2 小时前
【离线数仓项目】——电商域ADS层开发实战
大数据
庄小焱2 小时前
【离线数仓项目】——离线大数据系统设计
大数据
吃手机用谁付的款3 小时前
基于hadoop的竞赛网站日志数据分析与可视化(下)
大数据·hadoop·python·信息可视化·数据分析
线条14 小时前
Spark 单机模式安装与测试全攻略
大数据·分布式·spark
老周聊架构4 小时前
大数据领域开山鼻祖组件Hadoop核心架构设计
大数据
TDengine (老段)9 小时前
TDengine 使用最佳实践(2)
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
Deng94520131410 小时前
基于大数据的电力系统故障诊断技术研究
大数据·matplotlib·深度特征提取·随机森林分类算法·标签编码
C1829818257512 小时前
分布式ID 与自增区别
分布式