??斗地主捕鱼电竞提现秒到 广告位招租 - 15元/月全站展示
??支付宝搜索579087183领大额红包 ??伍彩集团官网直营彩票
??好待遇→招代理 ??伍彩集团官网直营彩票
??络茄网 广告位招租 - 15元/月全站展示
MAPREDUCE原理篇(2)

转载   yushiwh   2017-04-05   浏览量:12


3.1 mapreduceshuffle机制

3.1.1 概述:

彩票开奖查询 www.kbyp.net mapreduce中,map阶段处理的数据如何传递给reduce阶段,是mapreduce框架中最关键的一个流程,这个流程就叫shuffle;

shuffle: 洗牌、发牌——(核心机制:数据分区,排序,缓存);

具体来说:就是将maptask输出的处理结果数据,分发给reducetask,并在分发的过程中,对数据按key进行了分区和排序;

 

3.1.2 主要流程:

Shuffle缓存流程:

wKioL1jkfULSNVwXAAKsuTJdN3I217.png 

shuffleMR处理流程中的一个过程,它的每一个处理步骤是分散在各个map taskreduce task节点上完成的,整体来看,分为3个操作:

1、分区partition

2、Sort根据key排序

3、Combiner进行局部value的合并

 

3.1.3 详细流程

1、 maptask收集我们的map()方法输出的kv对,放到内存缓冲区中

2、 从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件

3、 多个溢出文件会被合并成大的溢出文件

4、 在溢出过程中,及合并的过程中,都要调用partitoner进行分组和针对key进行排序

5、 reducetask根据自己的分区号,去各个maptask机器上相应的结果分区数据

6、 reducetask会取到同一个分区的来自不同maptask的结果文件,reducetask会将这些文件再进行合并(归并排序)

7、 合并成大文件后,shuffle的过程也就结束了,后面进入reducetask的逻辑运算过程(从文件中取出一个一个的键值对group,调用用户自定义的reduce()方法)

 

Shuffle中的缓冲区大小会影响到mapreduce程序的执行效率,原则上说,缓冲区越大,磁盘io的次数越少,执行速度就越快

缓冲区的大小可以通过参数调整,  参数:io.sort.mb  默认100M

 

 

 

3.1.4 详细流程示意图

wKioL1jkfU-xN907AAGvvGw4BP4669.png 


3.2. MAPREDUCE中的序列化

3.2.1 概述

Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,header,继承体系。。。。),不便于在网络中高效传输;

所以,hadoop自己开发了一套序列化机制(Writable),精简,高效

 

3.2.2 Jdk序列化和MR序列化之间的比较

简单代码验证两种序列化机制的差别:

public class TestSeri {

public static void main(String[] args) throws Exception {

//定义两个ByteArrayOutputStream,用来接收不同序列化机制的序列化结果

ByteArrayOutputStream ba = new ByteArrayOutputStream();

ByteArrayOutputStream ba2 = new ByteArrayOutputStream();

 

//定义两个DataOutputStream,用于将普通对象进行jdk标准序列化

DataOutputStream dout = new DataOutputStream(ba);

DataOutputStream dout2 = new DataOutputStream(ba2);

ObjectOutputStream obout = new ObjectOutputStream(dout2);

//定义两个bean,作为序列化的源对象

ItemBeanSer itemBeanSer = new ItemBeanSer(1000L, 89.9f);

ItemBean itemBean = new ItemBean(1000L, 89.9f);

 

//用于比较String类型和Text类型的序列化差别

Text atext = new Text("a");

// atext.write(dout);

itemBean.write(dout);

 

byte[] byteArray = ba.toByteArray();

 

//比较序列化结果

System.out.println(byteArray.length);

for (byte b : byteArray) {

 

System.out.print(b);

System.out.print(":");

}

 

System.out.println("-----------------------");

 

String astr = "a";

// dout2.writeUTF(astr);

obout.writeObject(itemBeanSer);

 

byte[] byteArray2 = ba2.toByteArray();

System.out.println(byteArray2.length);

for (byte b : byteArray2) {

System.out.print(b);

System.out.print(":");

}

}

}

 

 

 

3.2.3 自定义对象实现MR中的序列化接口

如果需要将自定义的bean放在key中传输,则还需要实现comparable接口,因为mapreduce框中的shuffle过程一定会对key进行排序,此时,自定义的bean实现的接口应该是:

public  class  FlowBean  implements  WritableComparable<FlowBean>

需要自己实现的方法是:

/**

 * 反序列化的方法,反序列化时,从流中读取到的各个字段的顺序应该与序列化时写出去的顺序保持一致

 */

@Override

public void readFields(DataInput in) throws IOException {


upflow = in.readLong();

dflow = in.readLong();

sumflow = in.readLong();


 

}

 

/**

 * 序列化的方法

 */

@Override

public void write(DataOutput out) throws IOException {

 

out.writeLong(upflow);

out.writeLong(dflow);

//可以考虑不序列化总流量,因为总流量是可以通过上行流量和下行流量计算出来的

out.writeLong(sumflow);

 

}


@Override

public int compareTo(FlowBean o) {


//实现按照sumflow的大小倒序排序

return sumflow>o.getSumflow()?-1:1;

}

 

 

 

3.3. MapReduceYARN

3.3.1 YARN概述

Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而mapreduce等运算程序则相当于运行于操作系统之上的应用程序

3.3.2 YARN的重要概念

1、 yarn并不清楚用户提交的程序的运行机制

2、 yarn只提供运算资源的调度(用户程序向yarn申请资源,yarn就负责分配资源)

3、 yarn中的主管角色叫ResourceManager

4、 yarn中具体提供运算资源的角色叫NodeManager

5、 这样一来,yarn其实就与运行的用户程序完全解耦,就意味着yarn上可以运行各种类型的分布式运算程序(mapreduce只是其中的一种),比如mapreduce、storm程序,spark程序,tez ……

6、 所以,spark、storm等运算框架都可以整合在yarn上运行,只要他们各自的框架中有符合yarn规范的资源请求机制即可

7、 Yarn就成为一个通用的资源调度平台,从此,企业中以前存在的各种运算集群都可以整合在一个物理集群上,提高资源利用率,方便数据共享

 

3.3.3 Yarn中运行运算程序的示例

mapreduce程序的调度过程,如下图

 

wKiom1jkfWLhnfYAAAECPMBr5x4038.png 



转载自://blog.51cto.com/yushiwh/1913044

招聘 不方便扫码就复制添加关注:程序员招聘谷,微信号:jobs1024



Hadoop运行原理详解
我们通过下面这个天气数据处理的例子来说明Hadoop的运行原理.1、Map-Reduce的逻辑过程假设我们需要处理一批有关天气的数据,其格式如下:按照ASCII码存储,每行一条记录每一行字符从0开始计数,第15个到第18个字符为年第25个到第29个字符为温度,
Ambari2.6安装部署Hadoop2.7
ApacheAmbari是一种基于Web的工具,支持ApacheHadoop集群的供应、管理和监控。Ambari已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、Hbase、Zookeper、Sqoop和Hcatalog等。ApacheAmbari支持HDFS、MapReduce、Hive、Pig、Hbase、Zookeper、Sqoop和Hcatalog等的集中管
2018-07-09期 Hadoop单节点伪分布式扩展为多节点分布式【本人亲自反复验证通过分享】
备注:本期承接自2018-07-08期Hadoop单节点伪分布式集群配置【本人整合多方资料并亲自反复验证通过分享】一、服务器准备--额外增加2台服务器IP地址主机名称备注192.168.1.201hadoop-server01现有192.168.1.202hadoop-server02新增192.168.1.203hadoop-server03新增二、配置JDK[[email protected]
2018-07-08期 Hadoop单节点伪分布式集群配置【本人整合多方资料并亲自反复验证通过分享】
一、安装介质下载地址://archive.apache.org/dist/hadoop/core/安装版本:hadoop-2.4.1.tar.gz二、安装步骤1、解压hadoop-2.4.1.tar.gz[[email protected]]#tar-xvfhadoop-2.4.1.tar.gz-C/usr/local/apps/[[email protected]
OpenCV关于万达平台搭建重映射map_x,map_y的疑惑
OpenCV中什么万达平台搭建论坛:haozbbs.comQ1446595067是重映射就不赘述了,主要是对源码中map_x,map_y有些疑惑,图像是如何进行重映射的呢?上下变换的部分源码:Matmap_x,map_y;map_x.create(srcimg.size(),CV_32FC1);map_y.create(srcimg.size(),CV_32FC1);for(inti=0;i<
hadoop2.0中yarn的运行原理
Yarn的简单介绍        我们知道在离线大数据处理领域中,hadoop是目前无可厚非的处理架构,到目前为止hadoop已经有三个大版本,每个版本下都有架构方面的调整。        在hadoop1.0中有一些弊端,比如hdfs
太平洋保险家园大数据项目DSG应用(30多个Oracle等实时同步到KAFKA)
根据太保家园项目的最终目标,在一期建设中,需要将太平洋保险集团下属的寿险,产险,车险等30多个核心系统数据,通过实时同步复制的方式,统一集中到大数据平台。其中涉及数据的转换,标化,清洗,去重等一系列过程,具体需求如下:1、需要将核心数据从30多个系统同步到大数据平台的kafka组件。2、确保数据复制的实时性(秒级)和数据的准确性3、复制的数据需要加上时间,操作类型等标签,便于后端应用识别4、以生产环境的dg库作为数据的汇聚源端,减轻对生产库的影响5、入kafka的数据格式可灵活配置,以便更好的适配后端应用6、需要具备数据操作统计和数据比对功能,便于核对数据的准确性
Hadoop权威指南摘录---1
Hadoop权威指南摘录
20180611早课记录28-Sqoop
1.sqoop是什么?主要用于在Hadoop与RDBMS间进行数据的传递2.sqoop分为哪两个分支,各最新版本是什么?sqoop1:1.4.7sqoop2:1.99.73.在工作中我们用的最多的是sqoop1,那么导入和导出,谁给谁的导入是RDBMS到Hadoop导出是Hadoop到RDBMS4.假如输入一个命令找不到notfound,你们觉得该怎么办?(老生常谈)先看打错了没有,再看PATH有