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


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

参考文章

相关推荐
marteker1 小时前
电通宣布与Criteo战略整合,纳入零售受众数据
大数据·人工智能·零售
摩尔元数1 小时前
质检滞后?物料浪费?MES系统破解传统制造七大死结
大数据·人工智能·制造
Edingbrugh.南空2 小时前
Kafka性能压测报告撰写
分布式·kafka
lisanmengmeng2 小时前
rabbitMQ 高可用
linux·分布式·rabbitmq
llwszx2 小时前
分布式锁的四种实现方式:从原理到实践
java·分布式·spring·分布式锁
憶巷3 小时前
TC、TM、RM如何协同解决分布式事务难题
分布式
延凡科技3 小时前
低空数联无人机AI智慧巡查平台
大数据·运维·人工智能·无人机·智慧城市·制造
yczn1234 小时前
3D可视化数字孪生智能服务平台-物联网智控节能控、管、维一体化技术架构
大数据·网络·人工智能
静听山水4 小时前
PostgreSQL/Hologres 系统表 pg_class 详解
大数据
远方16094 小时前
57-Oracle SQL Profile(23ai)实操
大数据·数据库·sql·oracle·database