第三章:Mapreduce

1、Mapreduce的简介

1. mapreduce是hadoop的三大重要模块之一
2. mapreduce是一个并发的计算和分析框架,用于计算和分析分布式文件系统上的大数据集。
3. 将计算划分为两个阶段:一个map(映射)阶段,一个reduce(归约)阶段
4. 该框架的开发灵感来源于google的《mapreduce》论文
5. 方便开发人员在不会分布式计算的情况下,开发和运行相关计算程序。

2、优缺点

1. 优点
    - 适合离线数据处理
    - mapreduce编程简单
    - 扩展性良好
    - 高容错性
2. 缺点
    - 不适合实时计算(实时计算:毫秒级别/秒级别,离线计算:秒级别以上)
    - 不适合流式计算(mapreduce处理的数据是静态的,不是流式的数据)
    - 不适合DAG(有向图)计算

3、 Mapreduce的核心思想

简单的一句话概括:“移动计算而非移动数据”。

程序员将自己写好的业务逻辑代码和mr自带的一些组件打包成计算程序,移动到有数据存储的节点上,这样可以利用多节点的cpu的并发能力,提高计算效率(怎么提高的?一减少数据移动的开销,二利用了并发计算原理)
mapreduce是分为两个阶段,map阶段处理的是块文件(原始文件),计算后的结果存储本地磁盘,reduce阶段要跨节点fetch属于自己要处理的数据,计算后的结果存储到hdfs上(当然也可以存储到客户端所在的本地磁盘)

 4、分区器是什么时候被调用

在map函数输出数据以后,进入环形缓冲区的时候。

 5、job提交流程

1、Client启动main方法,调用submit方法向resourcemanager进行提交作业,实际上是YarnRunner进行提交
2、客户端提交申请,表示想运行一个application
3、返回客户端一个application_id
4、客户端将自己准备好的应用程序代码,及底层计算好的分片信息持久化文件,和一些相关配置信息共享到HDFS上
5、客户端所有工作准备好后,进行最后一次提交
6、resourcemananger选择一个节点,通过对应nodemanager来分片资源,让其运行一个appmaster进程
7、nodemanager下载hdfs上的资源,进行作业初始化,比如分片信息构建maptask,和块的位置信息
8、nodemanager根据初始化发现位置信息等向resourcemanager进行申请资源
9、appmaster和nodemanager共同完成资源的启用
10、需要将hdfs上相关内容比如计算程序,分片信息本地化
11、下载后,开始正式运行,期间会不断的向appmaster进行汇报
12、appmaster收到最后一个tesk运行成功后,会向客户端进行汇报

 6、Shuffle概念

从map阶段的map函数输出开始,到reduce阶段的reduce函数接受数据为止,这个过程称之为shuffle阶段。
整个shuffle阶段可以划分为map端的shuffle和reduce端的shuffle.

7、shuffle-map端的流程

1、输出k2、v2进入环形缓冲区
2、超过80MB则溢写,剩下20MB会继续写入,如20MB写满则maptask出现阻塞
3、溢写前先分区再排序
4、溢写产生了临时文件,按照分区号将每一个分区数据写入文件中
5、排序后、溢写前,可以调用combiner减少数据溢写,目的减少io
6、溢写文件有多个会进行合并
7、溢写文件超过3个会进行合并排序,调用combiner,如不足3个,不用调用
8、为减少临时文件的网络io,建议压缩,再传输

8、shuffle-reduce端的流程

1、利用默认5个线程处理分区的数据,并且通过HTTP协议进行抓取数据
2、数据过小,直接排序输给函数
3、数据过大,拷贝本地磁盘,合并大文件。合并因子为10,采用归并算法
4、归并算法合并后,如果map数据为压缩文件需要进行解压再合并
5、最后存储再HDFS上

9、分片的简介

MapReduce在进行作业提交时,会预先对将要分析的原始数据进行划分处理,形成一个个等长的逻辑数据对象,称之为输入分片(inputSplit),简称“分片”。

10、分片大小如何选择

1. 如果分片太小,管理分片的总时间和构建map任务的总时间将决定作业的整个执行时间
2. 如果分片太大,会跨越两个数据块,那么分片的部分数据需要通过网络传输到map任务运行的节点,占用网络带宽,效率更低
3.因此最佳分片大小应该和HDFS上的块大小一致。hadoop2.x默认128M.
4.分片信息包括起始偏移量,分片大小,分片数据所在的块的信息,块所在的主机列表

-----------------------------------------------------练习----------------------------------------------------------------------

 11、一个文件的分片列表,是在执行MapTask之前创建的,还是执行MapTask时创建的?

分片的个数决定了MapTask的数量,分片的描述信息决定了MapTask要处理的原始数据。因此,一定是在Maptask执行前获取的分片信息列表

12、MapTask的数据由谁来决定。ReduceTask的个数由谁决定。

分片的个数决定了MapTask的个数
一个分片的描述信息决定了MaptTask要处理的数据
ReduceTask的个数由分区数(分区器里的逻辑)决定

13、分片与块的区别是什么

分片是逻辑数据,信息可能会跨块。记录的是要处理的物理块的信息
(分片信息包括起始偏移量,分片大小,分片数据所在的块的信息,块所在的主机列表)
块是物理数据,不能跨节点。真实存储在文件系统上的原始数据文件

出现时机:
maperduces程序进行计算时,才会遇见分片概念
hdfs的存储才会涉及到分块的概念

14、520M的一个文件,分多少个块文件,有多少个分片

128+128+128+128+8 --->块的数量为5块
128+128+128+136   --->分片的数量为4个

15、hdfs的块大小如何选择,请说明理由

1. 考虑寻址时间最小化,与传输时间的比例在1:100被认为是最优的。  
      寻址时间通常是5~15毫米,平均10毫米。   10:1000.  
      再次考虑硬盘的传输速率。 每秒多少M.  选择接近于传输速率的2的N次方
      300m/s     选择256m比较合适
      100m/s     选择128m比较合适

16、分片大小如何选择,请说明理由

1. 如果分片太小,那么创建分片和创建maptask所需要的时间要远远大于分析时间。不合理
2. 如果分片太大, 势必会跨块,跨节点进行传输数据,占用网络带宽的资源。
3. 因此选择和块大小一致,是最合适的。

 17、序列化

-- 序列化:
    将内存中的对象转成二进制的字节序列形式
-- 反序列化:
    讲二进制形式的字节序列转成内存中的对象
-- 应用领域
   (1) 持久化到磁盘上保存
   (2) 网络传输
   
   hadoop序列化机制
   因为hadoop一定会涉及到网络传输,因此hadoop序列化的要求应该是体积小,速度快,占用带宽小。  所以有以下特征:紧凑、快速、可扩展、支持互操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值