【Hadoop权威指南】数据流过程笔记

系列文章目录



简单概述

Hadoop权威指南第二章简单介绍了一部分数据流的过程, 这里做个笔记, 便于自己后期的复习.

MapReduce的简单介绍

MapReduce以一个job作为一个工作单元, 其可以分成多个task来执行, 需要注意的是task有两种, 一个是Map Task, 一个是Reduce Task:

Map Task主要是映射阶段, 这个阶段将对一些独立元素组成的概念上的列表,的每一个元素进行指定的操作.
Reduce Task主要是对一个列表的元素进行适当的合并.

举个例子:
如果我们要对一个测试成绩表进行操作, 这个测试表每个人都需要增加1分, 那么此时就可以用Map 操作, 这个操作就是一个映射操作, 如果我们要对整体在求一个平均分, 那么此时求平均分的操作, 需要将其进行合并计算, 那么这个时候的操作就可以称为reduce操作, 也就是一个归约操作.

整体数据流过程

如果我们要进行一次MapReduce操作, 整体流程我们需要经过客户端, NameNode, DataNode.
客户端首先要对源数据进行切片, 切片后请求NameNode, NameNode将请求的切片构建元数据后将信息返回给客户端, 客户端找到对应的DataNode进行数据的传输, 数据传输完成后, 那么切片数据就保存到了DataNode上, 完成了数据的保存.
客户端发送MapReduce任务, 请求后, 对保存好的切片数据, 每一个切片会构建一个Map Task任务, 在执行完成后, 进行Reduce Task的工作, 最终获取到计算后的结果数据.

map任务可能出现的执行情况

对于Map task任务我们可能会出现三种情况:

  1. 本地化Map任务: 本地化Map说明了Map task和数据块在同一个节点上, 在这种情况下, Map Task可以直接进行本地的映射计算.
  2. 机架内Map任务:机架内Map说明了Map Task和数据块不在同一个节点上, 但是在同一个机架上, 此时进行Map Task任务时需要进行机架内的数据传输, 然后进行映射计算.
  3. 跨机架Map任务:跨机架Map说明了Map Task和数据块不仅不在同一个节点上, 而且也不在同一个机架上, 此时进行Map Task任务需要占用带宽进行数据传输, 然后进行映射计算.
    这3个任务的计算速度: 本地化 > 机架内 > 跨机架, 且运算速度的快慢取决于带宽的速度.

map任务的三种情况

reduce任务可能出现的执行情况

  1. 多个Map Task后不需要进行Reduce Task
    当我们进行Map Task任务后我们可能不需要进行Reduce Task任务, 那么此时我们就可以直接将获得结果直接输出即可, 这种情况下, 有多少个Map Task任务就会有多少个结果文件.
    无Reduce任务

  2. 多个Map Task后利用一个Reduce Task进行归约操作
    有时候由于整体的数据量并不算太大, 此时我们进行Map Task后可能只需要一个Reduce Task就可以对数据进行处理, 那么此时会将多个Map Task的结果进行排序后, 放入Reduce Task进行归并排序后获取计算后的结果.
    多个MapTask后一个ReduceTask

  3. 多个Map Task后利用多个Reduce Task进行规约操作
    当具有大量任务的时候, 这种情况也是我们进行海量数据运算最容易出现的一种情况, 我们会在Map阶段和Reduce阶段进行一个Shuffle阶段的处理, 让对应的Reduce Task处理对应的数据内容.
    多个MapTask后多个ReduceTask

其他

源数据切片的设定

在之前我们提到了对源数据进行数据切片的问题, 那么如何进行数据切片就是需要考虑的问题了, Hadoop本身对这里的约束是不超过数据块(默认128M)的大小, 这里的原因是什么呢?

我们从Map Task任务的三种情况就可以初见端倪, 在跨机架执行Map Task的情况下, 由于数据切片和Map Task任务不在同一个节点且不在同一个机架上, 此时我们需要占用带宽进行数据传输, 如果此时数据切片的大小
划分超过数据块的大小, 那么此时需要考虑如下几个问题:

  1. 数据切片大于数据块大小, 如何对数据块进行切分
  2. 数据块切分后的数据按一部分进行计算, 此时计算如何制定规则
  3. 数据块切分后传输后进行合并操作后进行运算, 此时如何进行合并, 传输是否会受到最后一部分数据的传输影响

因此, 为了规避这些问题, 避免让整个系统因为这些问题产生新一轮的效率问题, 我们设定源数据切片设置不超过数据块大小.

MapReduce是否有哪些阶段可以进行优化操作

在进行MapReduce的时候, 我们可以明显的发现的分割Map阶段和Reduce阶段, 那么对于这两个阶段, 哪个地方是否可以进行一些优化呢?

  1. Map阶段的combine操作(非全部有效)
    当我们遇到一些类似求取数据最大值, 最小值的问题的时候, 我们可以在Map阶段进行一轮combine操作, 保留每个KV的最大值或者最小值, 在进行Reduce阶段的时候就可以减少Map阶段和Reduce阶段的数据传输量, 提升计算效率.

参考文献

1.hadoop权威指南

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值