Mapreduce学习笔记(二)

GD32F407工程模板搭建全记录:从零整理固件库、创建文件夹到编译通过 本文详细记录了GD32F407工程模板的搭建过程,从固件库整理、目录规划到Keil环境配置,帮助开发者快速搭建可维护的嵌入式工程结构。重点介绍了开发环境搭建、工程目录设计、Keil配置及常见编译问题解决方案,适合嵌入式开发者参考。 阅读详情

Mapreduce的Shuffle过程

今天来谈一谈, shuffle过程, shuffle中文翻译是洗牌, 是在map 和reduce之间的一套可编写程序,就像可插拔的组件一样,我们可以编写一些程序来替换它们,以达到我们的需求目的。以下是详细的shuffle过程。
在这里插入图片描述

一般需要我们编程的过程有 Combiner, Partition, sort 以及 group。

Combiner:

这个过程实际上是对mapreduce过程的优化, 把一部分reducer要做的工作挪到mapper上去做, 由于一般mapper的数量远远大于reducer的数量,可以提高机器的运行速度。 由于我们学习是不会用到太多mapper,而且并不是所有mapreduce都使用combiner(一般只有求和, 求最值适用, 求平均不适用), 故不做深究。

Partition:

Partition 是实现对文件的分类输出,如下图,实现按年份不同将结果输出到不同文件中。
在这里插入图片描述
接下来看段代码:

public static class YearPartitioner extends Partitioner<Text, IntWritable> {
		@Override
		public int getPartition(Text key, IntWritable value, int numPartitions) {
			//根据年份对数据进行分区,返回不同分区号
			if (key.toString().startsWith("2015"))
				return 0 % numPartitions;
			else if (key.toString().startsWith("2016"))
				return 1 % numPartitions;
			else
				return 2 % numPartitions;		
		}
}

其实我们主要需要重写的类就是这个Partitioner类, 然后实现它的getPartition函数就OK了。注意在getPartition的参数中,key 和value是从map端发送过来的,numPartitions 是我们设置的reducer数量,也就是输出文件数量。 然后在这个函数中按照我们的逻辑编写我们的分类标准, 比如我的分类标准就是判断value中存储的字符是以2015、2016还是其他字符为首,然后返回对于的reducer编号(可以认为返回对应的分区),最后注意要在main函数中完成对应的partition配置,具体如下:

job.setPartitionerClass(YearPartitioner.class);		//自定义分区方法
job.setNumReduceTasks(10); 	//设置reduce任务的数量,该值传递给Partitioner.getPartition()方法的numPartitions参数

sort

想要实现自定义的排序, 我们必须先了解到,shuffle过程中实现了对数据自动按Key值升序排列。因此要想实现按照我们需求的排序,我们必须自定义自己的Key 类型,由于写入到hdfs过程中需要序列化,key必须要用到Writable类型,同时需要按照我们设想的方式排序,必须要用到comparable类型, 综上,我们自定的Key值类型需要是WritableComparable类型,以下是一个例子:

public static class MyKey implements WritableComparable<MyKey> {
	private String date;
	private int num;
	
	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public MyKey() {			
	}
	
	public MyKey(String date, int num) {
		this.date = date;
		this.num = num;
	}

	@Override
	public void write(DataOutput out) throws IOException {
		out.writeUTF(date);
		out.writeInt(num);
	}

	@Override
	public void readFields(DataInput in) throws IOException {
		date = in.readUTF();
		num = in.readInt();
	}

	@Override
	public int compareTo(MyKey o) {
		if (!date.equals(o.date)) 
			return date.compareTo(o.date);
		else
			return o.num-num;
	}
}

public static class DateSort3Mapper extends Mapper<Object, Text, MyKey, NullWritable> {		
	public void map(Object key, Text value, Context context ) 
			throws IOException, InterruptedException {
		String[] strs = value.toString().split(" ");
		MyKey myKey = new MyKey(strs[0], Integer.parseInt(strs[1]));
		context.write(myKey, NullWritable.get());	//将自定义的myKey作为Map KEY输出
    }
}

第一个MyKey类就是我们自定义的Key类,在这个类中,由于要实现序列化和可比较, 我们必须重写write,readFields和compareTo方法,前两个没什么好说的,在compareTo中,我们的逻辑是先比较date,date不同,就返回date.compareTo(o.date)(按date升序排列), date相同就比较num, 返回o.num-num(按num降序排列)。至于MyKey的使用,就如mapper写到。

Group:

一般我们都采用默认的分组, 也就是按key值分组, 把key值相同的数据组和起来,形成类似:

Summer     <1,2,5>
Jerry      <2,6>
Rick       <1,2,3,4>
Morty      <2>

现在我们也可以自定义自己的 Group类(继承自WritableComparator)

public static class MyGroup extends WritableComparator {
	public MyGroup() {				//注册比较方法
		super(Text.class, true);
	}

	@SuppressWarnings("rawtypes")
	@Override
	public int compare(WritableComparable a, WritableComparable b) {
		String d1 = a.toString();
		String d2 = b.toString();	
		
		if (d1.startsWith("2015"))
			d1 = "2015";
		else if (d1.startsWith("2016"))
			d1 = "2016";
		else
			d1 = "2017";
		
		if (d2.startsWith("2015"))
			d2 = "2015";
		else if (d2.startsWith("2016"))
			d2 = "2016";
		else
			d2 = "2017";
		
		return d1.compareTo(d2);	//将原本KEY(年月日)的比较变成年份的比较
	}
}

在这个例子中, 我们的分组标准是年份是否相同(key的前4个字符是否相同),相同的归到同一组。同样要注意main函数中要加入group的配置

job.setGroupingComparatorClass(MyGroup.class);	//设置自定义分组类

以上就是我学到的shuffle可编写部分,如果有什么不足,欢迎指出。

《PLECS仿真与实战:从建模到高端应用》-专栏文件目录 《PLECS仿真与实战:从建模到高端应用》是一本系统介绍PLECS电力电子仿真软件的实用指南。全书共10章,首先介绍软件安装与基础操作,包括RC电路仿真等入门内容;随后深入讲解各类电力电子电路的建模与仿真,涵盖整流、交交变换、直流变换、逆变等电路;最后探讨PWM控制建模和直流调速系统等高端应用。书中配有丰富的示例程序和波形分析方法,附录还包含电力电子器件、代码生成等实用资料。该书适合电力电子领域工程师和学生系统学习电路仿真技术。 阅读详情

相关推荐

解决linux 2.5G网卡驱动问题

解决linux 2.5G网卡驱动问题 关键词:2.5G网卡驱动,ubuntu,安装,2.5G Ethernet LINUX driver,Realtek网卡驱动 由于2.5G网卡较新,各linux发行版的通用驱动已不适用,新装的系统会出现无法上网问题,由于国内网络环境去Realtek官网很难下载到驱动文件,故本文提供github上的2.5G Ethernet LINUX driver r8125 for kernel up to 5.6的版本驱动文件r8125-9.003.05.tar.bz2各位可以自

poorguy_aos的博客 1万+

MapReduce学习笔记(二)——Mapper、Reducer和Driver

MapReduce编程,WordCount的Example,如何编写Mapper、Reducer和Driver所对应的业务代码。

qq_36139822的博客 3247

【学习笔记】《基于φ-OTDR的分布式扰动传感系统定位算法研究-北交-通信与信息系统-吴》重点笔记

一、绪论 1.1 引言 光纤传感器的优点:跟电子传感器相比较,光纤传感器有诸多独特的优势:对电磁干扰免疫;具有很好的绝缘性和耐腐蚀性;灵敏度高,可测量微弱信息;可实现大范围监测和分布式传感,仅需一根传感光纤,更为经济便捷;传感光纤体积小、重量轻、可形变,适用于一些特殊应用场所;还有无需供电、耐高温、便于组网等等优点 光纤传感器的感知信号的方法:当探测光入射到光纤中时会发生散射并产生各种散射光...

qq_36045093的博客 2万+

MapReduce Design Patterns(chapter 1)(一)

翻译的是这本书: Chapter 1.Design Patterns and MapReduce MapReduce 是一种运行于成百上千台机器上的处理数据的框架,目前被google,Hadoop等多家公司或社区广泛使用。这种计算框架是非常强大,但它没有提供一个处理所谓“big data”的通用,普遍的情形,所以它能很好的解决一些问题,在处理某些问题上也存在挑战。这本书教给你在什么问题

亡の剑指 4734

FortiClient EMS实战:从安装到配置的全流程优化指南

本文详细解析了FortiClient EMS 7.0版本的部署与优化全流程,帮助企业构建零信任终端安全体系。从环境规划、高效安装、终端纳管到高级运维,提供实战指南和优化技巧,特别适用于Windows Server环境,助力企业提升终端安全管理效率。

weixin_29325007的博客 549

使用MLP解决OCR问题(OpenCV)(下)

分类模型:        分类模型涉及的一个比较关键的问题就是输出的10维向量是如何与具体的类别挂钩的。实际上:10维向量的每一位都代表一类,在对于训练集的表达中,如果输入数据是0,则10维向量的第一位赋值为1,其余均为0。即0对应[1,0,0,0,0,0,0,0,0,0]。MLP模型训练完成后,就需要对用户输入的数据所属类别进行判定。这时得到的输出数据基本不可能是正好的所属类为1,其他位置为0

qq_18515405的专栏 1907

总结:详细讲解MapReduce过程(整理补充)

关于整理 此文百分之七十摘自我认为讲的很清楚的博客,我都贴了地址,很感谢这些博主的无私奉献!我再将一些自己的实例代码和知识点的补充加入进去,希望能更好的理解mapreduce的整个过程。 从启动和资源调度来看MapReduce过程首先-先了解一下必知概念 From:MapReduce工作原理图文详解,JobTracker和TaskTracker概述客户端(Client):编写mapreduc

MrLevo520的博客 2万+

【深度学习新浪潮】算力上太空:NVIDIA Space-1 Vera Rubin Module 深度技术解析

NVIDIA Space-1 Vera Rubin Module 不只是一款芯片模组,它是天地一体化 AI 的基础设施底座。它用成熟的 GPU 架构 + 航天级加固,把地面 AI 生态直接平移到太空。下一个 AI 创新战场,不在云端,而在轨道。在轨 LLM星上多模态实时处理卫星自主组网与分布式推理太空算力成为云计算的一级节点参考资料NVIDIA 官方博客:NVIDIA 推出太空计算,将 AI 送入太空轨道GTC 2026 黄仁勋主题演讲。

专注:太空算力、AI infra、异构调度、大模型成本工程 1127

自定义数据字典翻译注解

自定义数据字典翻译注解参考出处代码背景@Dict注解注解对应实现类工具类service层查询接口service实现类和Mybatis的SQL语句实体类缓存的ehcache.xml存放在项目的位置ehcache.xmlehcache.xsd项目位置ehcache.xsd内容每次新增或修改数据字典时候清空当前缓存数据表表格图片:表格数据样例使用样例 参考出处 https://blog.youkuaiyun.com/weixin_42687829/article/details/103289383 代码背景 小公司新项目加上

qq_44754081的博客 3166

YOLOv8改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合

一、本文介绍 本文记录的是基于U-Net V2的YOLOv8目标检测改进方法研究。本文利用U-Net V2替换YOLOv8的骨干网络,UNet V2通过其独特的语义和细节融合模块(SDI),能够为骨干网络提供更丰富的特征表示。并且其中的注意力模块可以使网络聚焦于图像中与任务相关的区域,增强对关键区域特征的提取,进而提高模型精度。本文配置了原论文中pvt_v2_b0、pvt_v2_b1、pvt_v2_b2、pvt_v2_b3、pvt_v2_b4和pvt_v2_b5六种模型,以满足不同的需求。 文章目录一、本文

Limiiiing的博客 1721

改进后的yolov8导出进行部署到rk3588上时,导出为onnx格式报错aten::fft_fft2算子不支持导出...如何解决?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 1800

MapReduce原理过程详解

1 概述 2 MapReduce体系结构 3 MapReduce工作流程 4 实例分析:WordCount 5 MapReduce的具体应用 1.概述 在MapReduce出现之前,已经有像MPI这样非常成熟的并行计算框架了,那么为什么Google还需要MapReduce?MapReduce相较于传统的并行计算框架有什么优势? 传统并行计算框...

qq_36125181的博客 5969

巡检领域红外热成像相机镜头焦距选择方法总结

摘要:巡检机器人红外热成像相机镜头焦距的选择需综合考虑检测距离、视场角、目标分辨率等核心要素。短焦距(4-6mm)适用于室内近距离巡检,中焦距(12-19mm)适合变电站等中等距离场景,长焦距(25-50mm)则用于光伏板等远距离检测。选型需遵循焦距计算公式f=SL×d,确保目标占据≥3×3像元,同时考虑机器人安装空间、环境适应性及软件联动需求。建议通过样机实测或仿真软件验证选型合理性,以实现对设备故障的精准识别。

start_up_go的博客 300

Hadoop学习笔记之MapReduce(二)

3 MapReduce 框架原理 MapReduce总体步骤: 3.1 InputFormat 数据输入 3.1.1 切片与 MapTask 并行度决定机制 (1)问题引出   MapTask 的并行度决定 Map 阶段的任务处理并发度,进而影响到整个 Job 的处理速度。   思考:1G 的数据,启动 8 个 MapTask,可以提高集群的并发处理能力。那么 1K 的数据,也启动 8 个 MapTask,会提高集群性能吗?MapTask 并行任务是否越多越好呢?哪些因素影响了 MapTask 并行度?

qq_48238787的博客 807

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

MapReduce学习笔记之输入(二)

类图 1. InputFormat类MapReduce作业的输入数据的规格是通过InputFormat类及其子类给出的。有以下几项主要功能: 输入数据的有效性检测。 将输入数据切分为逻辑块(InputSplit),并把他们分配给对应的Map任务。 实例化一个能在每个InputSplit类上工作的RecordReader对象,并以键-值对方式生成数据,这些K-V对将由我们写的Mapper方法处理。

梓纾的专栏 2897

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Hadoop学习笔记(二)MapReduce Job

Hadoop学习笔记(三)MapReduce

leminfei的博客 613

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

MapReduce学习笔记和总结(二)— MapReduce代码的运行

MapReduce代码的运行 1.1 MR代码运行的方式 一般常用的有两种方式: (1)将代码打成Jar包,提交到Hadoop集群中运行; 该方法适用于真实生产环境,但不便于代码的调试和修改。 Jar包通过Hadoop jar 指令运行,具体指令为:Hadoop jarJar包名称 驱动类的全路径名 代码运行时需要的参数(读取文件和输出文件的路径) (2)通过IDE连接HDFS,并在...

Agent_Ethan的博客 590

MapReduce学习笔记(二)

一、MapReduce老API的写法package OldAPI;import java.io.IOException; import java.net.URI; import java.util.Iterator;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import o

吃果冻不吐果冻皮 1555

Hbase 学习笔记二 》HBase and MapReduce

HBase and MapReduce Now that you have an understanding of MapReduce and HBase in distributed mode, let’s look at them together. There are three different ways of interacting with HBase from a MapRe

残缺的歌的专栏 495

Hadoop学习笔记(二)——MapReduce

学习资料慕课网——Hadoop大数据平台架构与实践–基础篇MapReduce原理分而治之,一个大任务分成多个小的子任务(map),并行执行后,合并结果(reduce)。MapReduce运行流程基本概念 Job & Task 一个Job分成多个Task MapTask ReduceTask JobTracker 作业调度 分配任务、监控任务执行进度 监控TskTracker的状态 TaskTr

孔天逸'Blog 709

hadoop 学习笔记(二)MapReduce的工作机制

图1 Hadoop运行MapReduce作业的工作原理 作业的提交 JobClient的runJob()方法是用于新建JobClient实例并调用其submitJob()方法的便捷方式(步骤1)。提交作业后,runJob()每秒轮询作业的进度,如果发现上次报告后有改变,便把进度报告到控制台。作业完成后,如果成功,就显示作业计数器。如果失败,导致作业失败的错误被记录到控制台。 JobC

厚积薄发 719

Hadoop-hdfs和mapreduce学习笔记二

Hadoop-hdfs和mapreduce 一、初始hdfs 1、HDFS管理界面。 http://192.168.0.205:50070/   上传文件 hadoop fs -put jdk-7u65-linux-i586.tar.gzhdfs://node1:9000/ 再次网页上刷新查看。 点击可以下载 命令行下载 hadoop

wolf 882

HADOOP学习笔记总结二:分布式计算框架mapreduce

一、mapreduce 设计理念 移动计算不移动数据 1、split数据切片 2、MAP过程 3、shuffle过程 4、reduce过程 二、shuffler过程 partition过程默认hash模计算,根据reduce 的数量来决定,分好区后,reduce 自已fetch自己的那个部分后,再merge操作,可以解决所谓的数据倾斜问题。 sort排序,为后面的r...

DanyYan的博客 581

大数据学习笔记-MapReduce(二) 深度

深度了解MapReduce运行流程,通过案例全面了解MR运行过程、涉及的组件、设计的思想。对MapReduce Partition、 Mapreduce Combiner、MapReduce编程技巧掌握,对自定义对象、序列化、排序、分区、分组的实现熟练掌握,掌握MapReduce并行度机制、工作流程和shuffle的机制。

zhang_232的专栏 575

Hadoop学习笔记(二):MapReduce的进度和状态

MapReduce的状态和进度

Arthur-Chen的专栏 9061

mapreduce学习笔记二:去重实验

实验原理 “数据去重”主要是为了掌握和利用并行化思想来对数据进行有意义的筛选。统计大数据集上的数据种类个数、从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重。 数据去重的最终目标是让原始数据中出现次数超过一次的数据在输出文件中只出现一次。在MapReduce流程中,map的输出<key,value>经过shuffle过程聚集成<key,value-list...

weixin_30821731的博客 338
上一篇: Mapreduce学习笔记 (一)
下一篇: 百度点石情感极性分析--代码案例
what_wrong
博客等级 码龄9年 6粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值