
(十)MapReduce案例之WordCount(1)
项目根目录中添加您的输入文件 指定输出文件路径,确保目标目录已在Hadoop集群中存在。 执行命令后,任务会自动完成,结果可以在输出目录
发布日期:2021-05-16 12:59:44
浏览次数:41
分类:精选文章
本文共 3066 字,大约阅读时间需要 10 分钟。
使用Hadoop MapReduce实现大规模文本文件单词计数
Hadoop MapReduce是一种将大规模数据处理任务分解并并行执行的框架。在本文中,我们将使用Hadoop MapReduce开发一个简单但功能强大的单词计数应用程序,用于处理和分析大量文本文件。
项目目标
本项目旨在统计大量文本文件中每个单词的出现次数。这一任务对大数据处理能力提出了较高要求,适合使用分布式计算框架如Hadoop MapReduce来完成。
MapReduce实现思路
Map阶段
在Map阶段,我们将从HDFS存储的源文件中读取每一行文本数据,按照单词进行拆分,然后将每个单词以键值对的形式(键为单词,值为1)发送到Reduce阶段。
Reduce阶段
在Reduce阶段,我们接收Map阶段生成的键值对,将相同单词的键值对汇聚在一起,并对每组的值进行求和,得到每个单词的总出现次数。然后将统计结果以键值对的形式输出到目标文件中。
实现细节与代码
项目依赖管理
在项目的POM文件中,我们需要导入Hadoop MapReduce相关依赖。以下是一个示例:
org.apache.hadoop hadoop-mapreduce-client-core 2.6.5
WordCount应用程序
package MapReduce;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public class WordCountApp { public static class MyMapper extends Mapper{ LongWritable one = new LongWritable(1); @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); String[] words = line.split(" "); for (String word : words) { context.write(new Text(word), one); } } } public static class MyReducer extends Reducer { @Override protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException { long sum = 0; for (LongWritable value : values) { sum += value.get(); } context.write(key, new LongWritable(sum)); } } public static void main(String[] args) throws Exception { Configuration configuration = new Configuration(); Job job = Job.getInstance(configuration, "wordcount"); job.setJarByClass(WordCountApp.class); FileInputFormat.setInputPaths(job, new Path(args[0])); job.setMapperClass(MyMapper.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(LongWritable.class); job.setReducerClass(MyReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(LongWritable.class); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); }}
打包与部署
使用Maven进行项目打包,可以通过以下命令执行:
mvn clean package -DskipTests
生成的目标文件位于target/
目录下的JAR包。接下来,可以将JAR包上传到服务器,并使用以下命令执行WordCount应用程序:
hadoop jar HadoopTest-1.0-SNAPSHOT.jar MapReduce.WordCountApp hdfs://master:9000/text.txt hdfs://master:9000/output/wc
使用说明
text.txt
。hdfs://master:9000/output/wc
中找到。通过以上步骤,您可以高效地统计大规模文本文件中单词的出现次数,利用Hadoop MapReduce的分布式计算能力,轻松应对海量数据挑战。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年05月04日 23时26分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
EnvironmentNotWritableError: The current user does not have write permissions to the target environm
2023-01-23
Hyper-V系列:微软官方文章
2023-01-23
Java系列:【注释模板】IDEA中JAVA类、方法注释模板教程
2023-01-23
kali安装docker(亲测有效)
2023-01-23
Linux系列:Linux目录分析:[/] + [/usr] + [/usr/local] + [/usr/local/app-name]、Linux最全环境配置 + 动态库/静态库配置
2023-01-23
Nessus扫描结果出现在TE.IO或者ES容器结果查看问题解决方案
2023-01-23
PHP系列:PHP 基础编程 2(时间函数、数组---实现登录&注册&修改)
2023-01-23
PHP系列:使用PHP实现登录注册功能的完整指南
2023-01-23
Python&aconda系列:conda踩坑记录2.UnsatisfiableError: The following specifications were found to be incompa
2023-01-23
Python&aconda系列:(W&L)Conda使用faiss-gpu报错及解决办法、安装numpy的坑、cmd执行Python脚本找不到第三方库、安装tensorflow-gpu时遇到的from
2023-01-23
"WARNING: Increasing RAM size to 1GB" and "Cannot set up guest memory 'xxx.ram': Invalid argument".
2023-01-23
#if 0 #elif 1 #else #endif 用法
2023-01-23
#include <gdiplus.h>出错
2023-01-23
$ajax({}).done 和 $ajax({}) success 区别
2023-01-23