mapreduce实例

MapReduce工作机制详解

爱⌒轻易说出口 提交于 2019-11-29 19:08:55
MapReduce工作机制详解 文章目录 MapReduce工作机制详解 MapTask 工作机制 简单概述: 详细步骤: ReduceTask 工作机制 简单概述: 详细步骤: Shuffle 机制 MapReduce 并行度机制 FileInputFormat 切片机制 Reducetask 并行度机制 Task 并行度经验之谈 MapTask 工作机制 简单概述: input File 通过 split 被逻辑切分为多个 split 文件,通过 Record 按行读取内容给 map(用户自己实现的)进行处理,数据被 map 处理结束之后交给 OutputCollector 收集器,对其结果 key 进行分区(默认使用 hash 分区),然后写入 buffer,每个 map task 都有一个内存缓冲区,存储着 map 的输出结果,当缓冲区快满的时候需要将缓冲区的数据以一个临时文件的方式存放到磁盘,当整个 map task 结束后再对磁盘中这个 map task 产生的所有临时文件做合并,生成最终的正式输出文件,然后等待reduce task 来拉数据。 详细步骤: 首先,读取数据组件 InputFormat(默认 TextInputFormat)会通过 getSplits 方法对输入目录中文件进行 逻辑切片规划 得到 splits,有多少个 split 就对应启动多少个

MapReduce 优化参数

怎甘沉沦 提交于 2019-11-29 19:08:43
MapReduce 优化参数 文章目录 MapReduce 优化参数 资源相关参数 以下参数是在用户自己的 MapReduce 应用程序中配置就可以生效 以下参数应该在 yarn 启动之前就配置在服务器的配置文件中才能生效 shuffle 性能优化的关键参数,应在 yarn 启动之前就配置好 容错相关参数 效率跟稳定性参数 资源相关参数 以下参数是在用户自己的 MapReduce 应用程序中配置就可以生效 mapreduce.map.memory.mb : 一个 Map Task 可使用的内存上限(单位:MB),默认为 1024。如果 Map Task 实际使用的资源量超过该值,则会被强制杀死。 mapreduce.reduce.memory.mb : 一个 Reduce Task 可使用的资源上限(单位:MB),默认为 1024。如果 Reduce Task 实际使用的资源量超过该值,则会被强制杀死。 mapreduce.map.cpu.vcores : 每个 Maptask 可用的最多 cpu core 数目, 默认值: 1 mapreduce.reduce.cpu.vcores : 每个 Reducetask 可用最多 cpu core 数目默认值: 1 mapreduce.map.java.opts : Map Task 的 JVM 参数,你可以在此配置默认的 java

MapReduce实现温度排序(六)

◇◆丶佛笑我妖孽 提交于 2019-11-29 17:09:20
文章目录 1. 任务需求 2. 上传文件 3. 实例代码 3.1 实现思路 3.2 源代码 4. 运行效果 1. 任务需求 找出每年每月的3个最高温度时刻并进行降序排列 2. 上传文件 vi weather 一通乱敲: hadoop fs -put weather /weather 3. 实例代码 3.1 实现思路 为了提高执行效率,将每一年的数据分别由同的Reduce执行,产生不同的文件。把每年的温度数据通过处理,找到每月最高的三个温度时刻。该实例中设计的类及其功能如下: 类名 功能 MyKey 对时间和温度进行封装,同时实现序列化和反序列化 MyGroup 主要完成分组任务,先比较年,如相等则比较月 MyMapper 将数据解析为key-value格式(KeyValueTextInputFormat类的输入格式:key:2018-12-01 23:13:33 value:1) MyPartitioner 控制Reducer的数量,对每一年的数据进行分区 MyReducer 将每个月的三个最高温度的记录取出 MySort 根据年、月、温度进行排序 RunJob 控制整个程序的流程 3.2 源代码 MyKey类: package com . mapreduce . weater ; import org . apache . hadoop . io .

MapReduce之RecordReader(五)

末鹿安然 提交于 2019-11-29 14:51:33
文章目录 1. RecordReader概述 2. RecordReader的应用 2.1 RecordReader的实现步骤 2.2 需求分析 2.3 上传测试文件 2.4 执行代码 2.5 效果截图 3. 小结 1. RecordReader概述 RecordReader又叫记录读取器,是 用来加载数据并把数据转换为适合mapper读取的键值对 。RecordReader实例是由输入格式定义的,默认的输入格式为TextInputFormat,提供了一个LineRecordReader。这个类会把输入文件的每一行作为一个新的值,关联到每一行的键则是该行在文件中的字节偏移量。RecordReader会在输入块上被重复地调用直到整个输入块被处理完毕,每一次调用RecordReader都会调用Mapper的map()方法。 SequenceFileInputFormat对应的RecordReader是SequenceFileRecordReader。LineRecordReader是每行的偏移量作为读入map的key,每行的内容作为读入map的value。很多时候hadoop内置的RecordReader并不能满足需求,比如在读取记录时,希望map读入的key值不是偏移量而是行号或者是文件名,这个时候可以自己定义RecordReader。 2. RecordReader的应用 2.1

浅析hadoop 简历就写这个了

折月煮酒 提交于 2019-11-29 09:33:17
为什么选择hadoop 下面列举hadoop主要的一些特点: 1)扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。 2)成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点。 3)高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。 4)可靠性(Reliable):hadoop能自动地维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。 Hadoop核心 Hadoop的核心就是HDFS和MapReduce,而两者只是理论基础,不是具体可使用的高级应用,Hadoop旗下有很多经典子项目,比如 HBase、Hive等,这些都是基于HDFS和MapReduce发展出来的。要想了解Hadoop,就必须知道HDFS和MapReduce是什么。 HDFS HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),它是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集(large data set)的应用程序。 HDFS的设计特点是: 1、大数据文件

Mapreduce案例之找共同好友

笑着哭i 提交于 2019-11-29 05:00:56
数据准备: A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E:B,C,D,M,L F:A,B,C,D,E,O,M G:A,C,D,E,F H:A,C,D,E,O I:A,O J:B,O K:A,C,D L:D,E,F M:E,F,G O:A,H,I,J 需求: 1. 先求出 A 、 B 、 C 、… . 等是谁的好友 2.求出哪些人两两之间有共同好友,及他俩的共同好友都有谁? 需求解读: 1.有题目可得,该关系为单项关系可以理解为关注,即A关注的为BCDEF,B关注的为AK,所以求A B C...是谁的关注,即需要将冒号后边的作为key,前边的作为value进行map,在reduce的时候在合并即可。 2.求两两之间的共同关注,这时我们需要借助1题产生的结果文件,map是从后边的value值两两组合生成两两关系。作为新的key值输入,新的value为1题的key。 reduce的时候,将结果合并即可 源代码如下 第一题: package Demo5; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable;

hadoop学习笔记——NO.6_MapReduce_1

吃可爱长大的小学妹 提交于 2019-11-29 01:49:31
hadoop学习笔记——NO.6_MapReduce_1 1.MapReduce原理篇(1) MapReduce是一个分布式运算程序的编程框架,是用户开发”基于hadoop的数据分析应用”的核心框架。 Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。 1.1 为什么要MAPREDUCE 1、海量数据在单机上处理因为硬件资源限制,无法胜任 2、而一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度 3、引入mapreduce框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将分布式计算中的复杂性交由框架来处理 设想一个海量数据场景下的wordCount需求: 单机版: 内存受限,磁盘受限,运算能力受限 分布式: 1、文件分布式存储(HDFS) 2、运算逻辑需要至少分成2个阶段(一个阶段独立并发,一个阶段汇聚) 3、运算程序如何分发 4、程序如何分配运算任务(切片) 5、两阶段的程序如何启动?如何协调? 6、整个程序运行过程中的监控?容错?重试? 可见在程序由单机版扩成分布式时,会引入大量的复杂工作。为了提高开发效率,可以将分布式程序中的公共功能封装成框架,让开发人员可以将精力集中于业务逻辑。 而mapreduce就是这样一个分布式程序的通用框架

MapReduce几个小案例

拜拜、爱过 提交于 2019-11-28 22:20:25
MapReduce案例 1.单词计数--wordcount 首先准备好文件 Hello World Hello Java Hello World Hello hadoop wo shi wo 开始编写程序 public class MapReduceTest { //第一个参数是我们的行偏移量 //第二个参数是我们的数据集 //第三个是我们要输出时候的key类型 //第四个是我们要输出时候的value类型 public static class Map extends Mapper<LongWritable, Text, Text, IntWritable>{ //重写map方法 //第一个参数是偏移量 第二个是我们读取的数据集 第三个是上下文简单点说就说往文件上写要用到这个参数 protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] s = value.toString().split(" ");//把数据按照空格切分 for (String values:s) {//用for循环去遍历我们的数组 //第一个参数是输出的key,第二个是value //这里为什么value是1呢

MapReduce运行机制

最后都变了- 提交于 2019-11-28 21:46:16
MapReduce概述 MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决 海量数据的计算问题。MR由两个阶段组成:Map和Reduce,用户只需要实现map() 和reduce()两个函数,即可实现分布式计算。这两个函数的形参是key、value对,表 示函数的输入信息。 MapReduce结构 一个完整的mapreduce程序在分布式运行时有三类实例进程: MRAppMaster:负责整个程序的过程调度及状态协调 mapTask:负责map阶段的整个数据处理流程 ReduceTask:负责reduce阶段的整个数据处理流程 MapReduce的执行流程 执行流程图: MapReduce流程执行解析 Map阶段: 切片的计算: long splitSize = Math.max(minSize, Math.min(maxSize, blockSize)) 默认:minSize 1 maxSize Long.MAX_VALUE blockSize 128 splitSize默认是128M。 FileInputFormat先扫描切片,每次扫描一行数据,调用RecordReader类中的getCurrentKey()、getCurrentValue()返回一个key(行偏移量),value(每行的内容)。

零基础学习hadoop到上手工作线路指导(中级篇)

家住魔仙堡 提交于 2019-11-28 15:29:58
此篇是在 零基础学习hadoop到上手工作线路指导(初级篇) 的基础,一个继续总结。 五一假期:在写点内容,也算是总结。上面我们会了基本的编程,我们需要对hadoop有一个更深的理解: hadoop分为 hadoop1.X 、 hadoop2.X ,并且还有 hadoop生态系统 。这里只能慢慢介绍了。一口也吃不成胖子。 hadoop 1.x 分为 mapreduce 与 hdfs 其中mapreduce是很多人都需要迈过去的槛,它比较难以理解,我们有时候即使写出了mapreduce程序,但是还是摸不着头脑。 我们不知道key代表什么意思,我们不知道为什么会处理这个value。map有key、value,输出了key、value,有时候还会合并,reduce处理完毕之后又输出了key、value。这让我们产生了困惑,分不清。 mapreduce是一种编程模型,那么它能干什么,对我有什么用。它的原理是什么,为什么我们编写了map函数,reduce函数就可以在多台机器上运行。 这些问题或许都给初学者带来了困扰。是的,这些问题同样也困扰了我,这里写出来分享给大家,避免走同样的弯路。 面对mapreduce,有一篇文章,这里总结的很好,包括:该如何入门,该如何理解mapreduce,该如何练习mapreduce,该如何运用mapreduce。这里面介绍的很全。