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


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

参考文章

相关推荐
她说..13 小时前
基于Redis实现的分布式唯一编号生成工具类
java·数据库·redis·分布式·springboot
西岭千秋雪_13 小时前
Kafka客户端参数(一)
java·分布式·后端·kafka·linq
q***494513 小时前
分布式监控Skywalking安装及使用教程(保姆级教程)
分布式·skywalking
paperxie_xiexuo14 小时前
七款 AI PPT 工具新解:智能驱动演示升级,解锁多元创作场景
大数据·人工智能·powerpoint·大学生·ppt
q***766614 小时前
显卡(Graphics Processing Unit,GPU)架构详细解读
大数据·网络·架构
九河云14 小时前
不同级别华为云代理商的增值服务内容与质量差异分析
大数据·服务器·人工智能·科技·华为云
阿里云大数据AI技术14 小时前
【跨国数仓迁移最佳实践 12】阿里云 MaxCompute 实现 BigQuery 10 万条 SQL 智能转写迁移
大数据·sql
Elastic 中国社区官方博客14 小时前
Elasticsearch:Microsoft Azure AI Foundry Agent Service 中用于提供可靠信息和编排的上下文引擎
大数据·人工智能·elasticsearch·microsoft·搜索引擎·全文检索·azure
列星随旋15 小时前
初识RabbitMQ
分布式·rabbitmq·ruby
小坏讲微服务15 小时前
Docker-compose搭建Docker Hub镜像仓库整合SpringBootCloud
运维·分布式·spring cloud·docker·云原生·容器·eureka