(十)MapReduce案例之WordCount(1)
发布日期: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
  • 指定输出文件路径,确保目标目录已在Hadoop集群中存在。
  • 执行命令后,任务会自动完成,结果可以在输出目录hdfs://master:9000/output/wc中找到。
  • 通过以上步骤,您可以高效地统计大规模文本文件中单词的出现次数,利用Hadoop MapReduce的分布式计算能力,轻松应对海量数据挑战。

    上一篇:(十一)MapReduce案例之WordCount(2)
    下一篇:(九)关于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
    mysql系列:远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法 2023-01-23
    Nessus扫描结果出现在TE.IO或者ES容器结果查看问题解决方案 2023-01-23
    Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务、snmp服务 2023-01-23
    PHP系列:PHP 基础编程 2(时间函数、数组---实现登录&注册&修改) 2023-01-23
    PHP系列:使用PHP实现登录注册功能的完整指南 2023-01-23
    Python&aconda系列:cmd/powershell/anaconda prompt提示“系统找不到指定的路径”(亲测有效) 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
    python&anconda 系列:Pycharm在debug问题的N种解决方案(一般程序、web方向、人工智能方向) 2023-01-23
    python&anconda系列(亲测有效):tensorflow AttributeError: ‘str’ object has no attribute ‘decode’ 2023-01-23
    python&anconda系列:tf.keras.backend.get_session()和keras.backend.get_会话()返回不同的会话对象(待解答) 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