IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MapReduce——01MapReduce编程规范 -> 正文阅读

[大数据]MapReduce——01MapReduce编程规范

1.Mapper阶段

在这里插入图片描述
每一个<k,v>调用一次,也即每一行调用一次

2.Reducer阶段

在这里插入图片描述

3.Driver阶段

在这里插入图片描述

WordCount案例实操

1.需求

给定数据,统计每个单词出现的次数

2.输入

word.txt文件
input.txt文件

3.输出

单词 数量
单数 数量

分析:按照Mapreduce编程规范

  1. Mapper
    1.1.将MapTask传给我们的文本内容转换成String
    1.2.根据空格将每一行都切分为单词
    1.3将单词输出为<单词,1>
  2. Reducer
    2.1.汇总各个key的个数
    2.2输出该key的总次数
  3. Driver
    3.1.获取配置信息,获取job对象实例
    3.2.指定本程序的jar包所在的本地路径
    3.3.关联Mapper/Reducer业务类
    5.4.指定Mapper输出数据的key类型
    5.5.指定最终输出的数据的key类型
    5.6.指定job的输入原数文件所在目录
    5.7.指定job的输出结果所在目录
    5.8.提交作业

1.查看Mapper源码,重写map()

可以看到run方法,有一个while循环,每次读取一个数据之后执行map方法
在这里插入图片描述
所以map每次处理一行数据,map的参数就是每一个数据的key,value和context

重写map方法:

public static class WordcountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
		private final IntWritable one = new IntWritable(1); 
        private Text word = new Text(); 
		public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException{
			// vlaue : atguigu atguigu
			String line = value.toString();
			StringTokenizer tonken = new StringTokenizer(line);
			while(tonken.hasMoreElements()) {
				word.set(tonken.nextToken());
				context.write(word, one);
			}
		}
	}
}

2.查看Reducer源码,重写reduce()

同样看run方法,也是每次处理一批数据,但不是一行,是key值相同的一批数据,因为map的时候,会执行shuffle操作,key值相同的数据会挨在一起
在这里插入图片描述
重写reduce方法:

public static class WordcountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
		IntWritable v=new IntWritable();
		@Override
		protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
			// add values by key
			int sum = 0;
			for(IntWritable value: values) {
				sum+=value.get();
			}
			v.set(sum);
			
			context.write(key, v);
		}
	}
}

3.定义Driver

直接在main方法里定义即可

public static void main(String []args ) throws IOException, ClassNotFoundException, InterruptedException {
		Configuration conf = new Configuration();
		conf.set("fs.default.name","hdfs://hadoop1:9000");
		conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
		Job job = Job.getInstance(conf);
		job.setJarByClass(WordCount.class);
		job.setMapperClass(WordcountMapper.class);
		job.setReducerClass(WordcountReducer.class);
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(IntWritable.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);
		FileInputFormat.setInputPaths(job, new Path("/user/pp/input/word.txt"));
		FileOutputFormat.setOutputPath(job, new Path("/user/pp/output/wordCount"));
		
		System.exit(job.waitForCompletion(true) ? 0 : 1);
	}

在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:34:29  更:2022-11-05 00:38:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年5日历 -2025/5/11 3:11:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码