10. mapreduce实现wordcount

devtools/2024/10/24 20:11:24/
mapreduce__0">一. mapreduce 概述

mapreduce是一个并行计算框架,它起源于Google的MapReduce论文,它主要用于离线海量数据计算。

  • 优点:海量数据离线处理,开发简单,部署方便
  • 缺点:仅适用于批处理,不支持实时数据计算
wordcount_5">二. wordcount案例
1. 需求

统计一个文件中每个单词出现的次数(文件中每行的多个单词用空格分开),下面是用mapreduce实现wordcount的数据流程:
在这里插入图片描述

2. 代码实现
package mr;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class WordCountMR {// 实现map方法static class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {@Overridepublic void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String[] words = value.toString().split(" ");for (String word: words) {context.write(new Text(word), new IntWritable(1));}}}// 实现reduce方法static class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {@Overridepublic void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable val : values) {sum += val.get();}context.write(key, new IntWritable(sum));}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(WordCountMR.class);job.setJobName("WordCount");// 设置输入,输出路径FileInputFormat.setInputPaths(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));// 设置Mapperjob.setMapperClass(WordCountMapper.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);// 设置Reducerjob.setReducerClass(WordCountReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);// 设置reduce task 数量job.setNumReduceTasks(1);boolean waitFor = job.waitForCompletion(true);System.exit(waitFor ? 0 : 1);}
}

maven 依赖

<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.2.4</version>
</dependency>
3. 运行

mapreduce程序运行方式可以分为本地模式和集群模式

本地运行模式:方便程序开发与调试
在这里插入图片描述

输入文件:
在这里插入图片描述

结果文件:
在这里插入图片描述

集群运行模式:可以利用集群的计算资源,一般为生产部署方式
将代码打包,并上传到集群上去。

# 查看输入文件
[root@hadoop1 ~]# hdfs dfs -text /test/a.txt
hello world
name hello
world# 提交任务
[root@hadoop1 ~]# hadoop jar learn-1.0-SNAPSHOT.jar  mr.WordCountMR  /test/a.txt  /output# 查看结果文件
[root@hadoop1 ~]# hdfs dfs -text /output/part-r-00000
hello   2
name    1
world   2

http://www.ppmy.cn/devtools/128507.html

相关文章

push_back和emplace_back

title: push_back和emplace_back date: 2024-10-20 19:29:25 tags: categories: C modern C中提到使用考虑使用置入代替插入&#xff0c;个人理解就是使用考虑使用emplace_back代替push_back操作&#xff0c;那么这两者之间究竟有什么区别&#xff0c;想探究一下 首先这两个函…

基于单片机的搬运机器人控制系统

摘 要: 搬运机器人(transfer robot)是可以进行自动化搬运作业的工业机器人 。 搬运机器人可以通过C 语言编程实现单片机上控制,通过实验和调试,实行机器人的抓放料,也可以实现自己的自行运行。 关键词: 单片机;搬运机器人;调试 0 引 言 单片机又称单片微控制器 , 它…

torch.utils.checkpoint.checkpoint介绍

torch.utils.checkpoint.checkpoint 是 PyTorch 提供的一种内存优化工具&#xff0c;用于在计算图的反向传播过程中节省显存。它通过重新计算某些前向传播的部分&#xff0c;减少了保存中间激活值所需的显存&#xff0c;特别适用于深度模型&#xff0c;如 Transformer 等层数较…

(A-D)AtCoder Beginner Contest 376

目录 比赛链接&#xff1a; A - Candy Button 题目链接&#xff1a; 题目描述&#xff1a; 数据范围&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 样例解释&#xff1a; 分析&#xff1a; 代码&#xff1a; B - Hands on Ring (Easy) 题目链接&#xff1…

代码随想录算法训练营第三十七天|509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯

509. 斐波那契数&#xff0c;70. 爬楼梯&#xff0c;746. 使用最小花费爬楼梯 509. 斐波那契数70. 爬楼梯746. 使用最小花费爬楼梯 509. 斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面…

智慧楼宇平台,构筑未来智慧城市的基石

随着城市化进程的加速&#xff0c;城市面临着前所未有的挑战。人口密度的增加、资源的紧张、环境的恶化以及对高效能源管理的需求&#xff0c;都在推动着我们寻找更加智能、可持续的城市解决方案。智慧楼宇作为智慧城市建设的重要组成部分&#xff0c;正逐渐成为推动城市可持续…

「AIGC」AI设计工具 v0.dev

https://v0.dev/ 1.1 简介 $20 学习前端代码本身似乎并不复杂,但是有平台能够直接生成代码、预览效果,似乎更有性价比。可能对于有前端和开发经验的同学而言,直接实现某个页面效果并不算是太复杂的事情,但是对于没有代码经验的同学而言,直接使用 AI 跑出代码甚至直接落地…

Chainlit集成LlamaIndex和Chromadb实现RAG增强生成对话AI应用

前言 本文主要讲解如何使用LlamaIndex和Chromadb向量数据库实现RAG应用&#xff0c;并使用Chainlit快速搭建一个前端对话网页&#xff0c;实现RAG聊天问答增强的应用。文章中还讲解了LlamaIndex 的CallbackManager回调&#xff0c;实现案例是使用TokenCountingHandler&#xf…