Hadoop实现WordCount详解

news/2024/12/26 23:54:18/

文章目录

  • Hadoop实现WordCount详解
    • 一、引言
    • 二、Hadoop WordCount实现步骤
      • 1、环境搭建
      • 2、编写WordCount程序
        • 2.1、Mapper类
        • 2.2、Reducer类
        • 2.3、驱动类
    • 三、编译与打包
    • 四、运行WordCount程序
    • 五、总结

Hadoop实现WordCount详解

一、引言

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

二、Hadoop WordCount实现步骤

1、环境搭建

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

2、编写WordCount程序

2.1、Mapper类

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

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();@Overrideprotected 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输出的中间结果,并汇总每个单词的总频率。

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();@Overrideprotected 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,以及输入输出路径。

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集群上运行。

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

四、运行WordCount程序

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

cd /opt/hadoop/hadoop/sbin
start-all.sh

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

hadoop jar wc.jar WordCountDriver /input/path /output/path

五、总结

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


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

参考文章

  • IDEA运行WordCount程序(详细步骤)
  • Hadoop实现WordCount(从零开始)

http://www.ppmy.cn/news/1558384.html

相关文章

RPA系列-uipath 学习笔记3

用uipath读取excel填写表单 所有素材都搬运自uipath academy 读取数据 现在手头上有这样一份数据 需要按行依次把数据填入到浏览器中的表单中&#xff0c;首先创建一个空的process 在activity中拉入excel process scope,同时在里面点击use_excel_file,选择你要使用的file,并…

Redis 安装部署[主从、哨兵、集群](linux版)

说明&#xff1a;如果打算将本文内容应用于生产环境&#xff0c;建议对相关参数进行适当调整&#xff0c;以确保系统的稳定性和性能优化。 背景 长期以来&#xff0c;我们一直在使用Redis&#xff0c;但始终未能形成一个高效的运维模式来快速搭建Redis环境。因此&#xff0c;我…

shardingsphere分库分表项目实践5-自己用java写一个sql解析器+完整项目源码

前1节我们介绍了 shardingsphere 分表分库的sql解析与重写&#xff1a; shardingsphere分库分表项目实践4-sql解析&重写-CSDN博客 那么shardingsphere sql 解析底层究竟是怎么实现的呢&#xff0c;其实它直接用了著名的开源软件 antlr . antlr 介绍&#xff1a; ANTLR&a…

微信小程序的消息头增加的字段不能有下滑线,字段大写字母自动转换消息字母

微信小程序的消息头增加的字段不能有下滑线&#xff0c;字段大写字母自动转换消息字母。这个是微信小程序的坑。 正式环境&#xff1a; 微信小程序的消息头增加了一个字段device_id,结果node.js打印出来的字段没有该字段。 [2024-12-20T09:45:54.476] [DEBUG] app - ctx.head…

几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码

引言 差分进化算法&#xff08;Differential Evolution&#xff0c;简称DE&#xff09;是一种全局优化算法&#xff0c;由Storn和Price于1995年首次提出。它主要用于求解实数优化问题&#xff0c;属于演化算法的一种。DE算法以其结构简单、容易实现、收敛快速和鲁棒性强等特点…

建筑工地AI安全检测系统:YOLO11数据标注训练与PyQt5界面设计应用开发

“随着建筑行业的快速发展&#xff0c;工地的安全监管显得尤为重要。传统的人工监管方式效率低、成本高&#xff0c;难以及时发现潜在的安全隐患。为了解决这一问题&#xff0c;本项目基于YOLOv11目标检测算法&#xff0c;利用2800多张建筑工地影像数据及其标注数据&#xff0c…

linux-20 根文件系统(二)命名规则、学习范围概述

接下来说一说linux这些文件系统中的文件以及文件目录的命名规则&#xff0c;要自己创建文件的话&#xff0c;怎么给这个文件起名&#xff1f;之前提到过&#xff0c;linux是严格区分文件的名称&#xff0c;大小写的对吧&#xff1f;严格区分大小写&#xff0c;但是还要记住以下…

前端数据加载慢的解决方法

都是和前端性能优化非常类似的做法。 1. 懒加载 (Lazy Loading) 对于图片、视频等资源&#xff0c;或者某些组件&#xff0c;在用户滚动到相关区域时再加载&#xff0c;而不是页面一开始就加载所有内容。使用 IntersectionObserver 实现懒加载&#xff0c;或者一些 UI 框架&am…