一、切片与MapTask的关系

1、概述

大家要注意区分切片与切块的区别:

  • 切块Block是HDFS物理上把数据分成一块一块的,默认是128M;
  • 数据切片:只是在逻辑上对输入进行分片,并不会在磁盘上分成片进行存储;而是分成片对数据进行处理。

物理上HDFS会把数据进行切块存储,但是当进行数据处理时,取出来的一块数据是整体是比较大的,需要对数据进行切片处理。如果切片设置为100M,那么一个数据块128M会被分成两个切片。

而MapTask的任务数量既与切片的个数有关又与文件个数有关。

2、MapTask的决定因素

  • 文件的大小:当切片为128M时,如果文件块的大于128M就会被分成2个split甚至多个。
  • 文件的个数:FileinputFormat按照文件分割split,并且只会分割大文件,即那些大小超过HDFS块的大小的文件。如果HDFS中dfs.block.size设置为128,而输入的文件有100个,则划分后的split个数至少为100个。
  • splitsize的大小:分片是按照splitsize的大小进行分割的,一个split的大小在没有设置的情况下,默认等于hdfs block的大小,但是程序可以通过两个参数进行设置,对splitsize进行调节。

InputSplit=Math.max(minSize, Math.min(maxSize, blockSize)

其中:

minSize=mapred.min.split.size

maxSize=mapred.max.split.size

我们可以在MapReduce程序的驱动部分添加如下代码:

TextInputFormat.setMinInputSplitSize(job,1024L); // 设置最小分片大小。

TextInputFormat.setMaxInputSplitSize(job,1024×1024×10L); // 设置最大分片大小。

3、总结

因此我们可以得出如下结论:MapTask的数量=小于split的文件个数+大于split的文件的个数/切片大小。

二、Shuffle的理解

1、概述

Shuffle:简单来说,就是将分布在集群中多个节点上的同一key的“键值对”信息,拉取到同一节点上;Shuffle过程中,各个节点上的相同key都会先写入到本地磁盘文件中,然后其他节点需要通过网络传输来去各个节点的磁盘拉取文件中相同key的值。而相同的key都被拉取到同一节点进行聚合操作时,还有可能因为内存不够,进而溢写到磁盘文件中。因此在Shuffle过程中,可能会发生大量的磁盘文件读取的IO操作,以及数据的网络传输操作。

2、通过一张图来解析一个Job的声明周期

如上图所以,一个job的声明周期如下所述:

  • 首先对数据进行split,切成不同的分片
  • 对不同的分片记性MapTask操作
  • 进入Shuffle过程,对相同的key值拉取到同一节点的分区中;
  • 进行Reduce聚合操作,将相同的key值进行统计;
  • 将Reduce结果放入到一个结果文件中。

谈谈对MapTask任务分配和Shuffle的理解的更多相关文章

  1. 谈谈我对Java中CallBack的理解

    谈谈我对Java中CallBack的理解 http://www.cnblogs.com/codingmyworld/archive/2011/07/22/2113514.html CallBack是回 ...

  2. 转载 CSDN 谈谈我对证券公司一些部门的理解(前、中、后台)

    谈谈我对证券公司一些部门的理解(前.中.后台) 2018年02月08日 15:11:07 unirong 阅读数:2165   文中对各大部门的分析都是从作者多年经历总结出来的有感之谈,尤其是前台的6 ...

  3. 谈谈我对证券公司一些部门的理解(前、中、后台)[z]

    [z]https://blog.csdn.net/UniRong/article/details/79289947 文中对各大部门的分析都是从作者多年经历总结出来的有感之谈,尤其是前台的6大部门(经纪 ...

  4. [每日一题]面试官问:谈谈你对ES6的proxy的理解?

    [每日一题]面试官问:谈谈你对ES6的proxy的理解? 关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...

  5. 谈谈Android 6.0运行时权限理解

    前言 谷歌在2015年8月份时候,发布了Android 6.0版本,代号叫做“棉花糖”(Marshmallow ),其中的很大的一部分变化,是在用户权限授权上,或许是感觉之前默认授权的不合理,现在6. ...

  6. 谈谈你对Java异常处理机制的理解

    先谈谈我的理解:异常处理机制可以说是让我们编写的程序运行起来更加的健壮,无论是在程序调试.运行期间发生的异常情况的捕获,都提供的有效的补救动作,任何业务逻辑都会存在异常情况,这时只需要记录这些异常情况 ...

  7. 【搞定面试官】谈谈你对JDK中Executor的理解?

    ## 前言 随着当今处理器计算能力愈发强大,可用的核心数量越来越多,各个应用对其实现更高吞吐量的需求的不断增长,多线程 API 变得非常流行.在此背景下,Java自JDK1.5 提供了自己的多线程框架 ...

  8. 谈谈我对 js原型链的理解

    想要学习 “原型链” 必须要认识什么是 “原型” 和 “原型链” 先理解一下普通的继承和原型的区别,下面写一段js代码来帮助理解: var Animal = function(){ // 动物抽象类 ...

  9. 谈谈对C#中反射的一些理解和认识(下)

    在上一篇中我们列举了一些反射的常规的使用,这一篇我们将介绍一些关于关于反射的高级属性,这些包括创建对反射的性能的总结以及如何优化反射性能,以及通过InvokeMember的方法如何去调用反射等等,通过 ...

随机推荐

  1. 吴裕雄--天生自然PYTHON爬虫:使用Selenium爬取大型电商网站数据

    用python爬取动态网页时,普通的requests,urllib2无法实现.例如有些网站点击下一页时,会加载新的内容,但是网页的URL却没有改变(没有传入页码相关的参数),requests.urll ...

  2. Pytorch本人疑问(2)model.train()和model.eval()的区别

    我们在训练时如果使用了BN层和Dropout层,我们需要对model进行标识: model.train():在训练时使用BN层和Dropout层,对模型进行更改. model.eval():在评价时将 ...

  3. tensorflow中的Fetch、Feed(02-3)

    import tensorflow as tf #Fetch概念 在session中同时运行多个op input1=tf.constant(3.0) #constant()是常量不用进行init初始化 ...

  4. LTE 网元功能

    E-NodeB : 无线资源管理,无线承载控制.无线接入控制.连接移动性控制.UE的上下行动态资源分配 IP头压缩及用户数据流加密 UE连接期间选择MME 路由用户面数据至S-GW 寻呼消息的组织和发 ...

  5. PEtools PE操作工具类C++

    源码来自各大网友并非原创修改了部分函数 仅供参考(PE没源码参考应该是很吃力的) 暂未更新完持续更新中....... PETools.h //函数头 int GetFileLength(FILE *p ...

  6. Django线上项目后台admin不显示问题

    记一次django项目的线上部署错误,django+nginx 一.问题描述 在将django项目部署到阿里云(nginx作为web服务器)上之后发现出现后台管理界面admin不显示样式. 二.问题分 ...

  7. OSI参考模型对网络排错的指导

    问题 当我们遇到网络故障的时候,比如连不上网.打开浏览器无法正常访问等问题的时候,我们应该怎么排查呢? 我们首先想到的是物理层,因为在OSI参考模型中物理层是在最低端.最基础. 物理层排查 主要查看连 ...

  8. leetcode LRU缓存机制(list+unordered_map)详细解析

    运用你所掌握的数据结构,设计和实现一个  LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - 如果密钥 (key) 存 ...

  9. 第1节 storm日志告警:1、 - 5、日志监控告警业务需求、代码、集群运行、总结

    如何解决短信或者邮件频繁发送的问题:每次发送的时候都先查询数据库记录,看一下有没有给这个人发送消息,上一次发送消息的时间是什么时候,如果发送时间间隔小于半个小时,就不要再发了 ============ ...

  10. RabbitMq学习笔记——配置

    1.RabbitMq server官网下载地址:https://www.rabbitmq.com 2.Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安 ...