首先来看 MapReduce 流程图

一个 map,一个 reduce,中间靠 shuffle 连接,shuffle 左边被划分到 map,右边被划分到 reduce

InputFormat

input 是个文件,进入 mapper 后变成一行一行,如何实现的呢?

在 hadoop 中实现的方法叫 inputFormat;

它先对 原始文件进行 切片 Split,然后把每个 Split 转换成 line;

mapreduce 是个分布式计算框架,它如何实现并行呢?

比如 1G 的数据假设划分 8 份,每份128M,那 1M 的数据呢,也划分 8 份,每份才128K,感觉不靠谱,

到底如何划分,就是我们所说的 InputFormat 中的 Split

Split 与 MapTask 并行度

在 hadoop中,MapTask 并行度是靠 Split 决定的,有多少个 Split,就有多少个 task 并行;

那如何 Split 呢?

首先明确两点:

1. HDFS 上数据文件是以 block 存储的,一个 block 默认 128M

2. Split 是逻辑上的切分,而不会像 block 一样进行物理切分

Split 方式分析

假设 HDFS 上有个文件 300M,分为 3 个 block 存储,两个block 128M,另一个 44M;

假设我们按 100M 进行切分,如图

我们知道 hadoop 任务调度有个原则叫数据本地化,就是说尽量把任务发配到存放所需数据的节点上,从而避免网络传输;

上面的划分方式,仅仅是 300M 的数据,就传输了 28+56=84M, 显然效率不会高

假设我们按 block 进行切分,如图

虽然每个任务 处理的数据量稍微大了点,但是避免了网络传输,效率比较高

总结:

1.  MapTask 的并行度由切片数决定

2. 一个 切片对应一个 MapTask

3. 默认情况下,切片大小=BlockSize,这种方式也是比较高效的

4. 切片时不考虑数据集整体,而是针对单个文件进行切片

如一个数据集有3个文件,一个 300M,一个 50M,一个20M,那么第一个文件切3份,第二个文件切1份,第三个文件切1份,彼此独立切分,互不影响

hadoop-InputFormat-Split-任务并行度的更多相关文章

  1. Hadoop InputFormat浅析

    本文转载:http://hi.baidu.com/_kouu/item/dc8d727b530f40346dc37cd1 在执行一个Job的时候,Hadoop会将输入数据划分成N个Split,然后启动 ...

  2. Hadoop InputFormat

    Hadoop可以处理不同数据格式(数据源)的数据,从文本文件到(非)关系型数据库,这很大程度上得益于Hadoop InputFormat的可扩展性设计,InputFormat层次结构图如下:  

  3. Hadoop InputFormat详解

    InputFormat是MapReduce编程模型包括5个可编程组件之一,其余4个是Mapper.Partitioner.Reducer和OutputFormat. 新版Hadoop InputFor ...

  4. Hadoop InputFormat 输入文件分片

    1. Mapper 与 Reducer 数量 对于一个默认的MapReduce Job 来说,map任务的数量等于输入文件被划分成的分块数,这个取决于输入文件的大小以及文件块的大小(如果此文件在 HD ...

  5. hadoop InputFormat 类别

    FileInputFormat是所有使用文件作为数据源的InputFormat的积累.它提供两个功能:一个是定义哪些文件包含在一个作业的输入中:一个为输入文件生成分片的实现.自动将作业分块 作业分块大 ...

  6. Hadoop InputFormat OutputFormat

    InputFormat有两个抽象方法: getSplits     createRecordReader   InputSplits 将数据按照Split进行切分,一个Split分给一个task执行. ...

  7. hadoop InputFormat getSplits

    /** Splits files returned by {@link #listStatus(JobConf)} when * they're too big.*/ public InputSpli ...

  8. Hadoop学习之路(十四)MapReduce的核心运行机制

    概述 一个完整的 MapReduce 程序在分布式运行时有两类实例进程: 1.MRAppMaster:负责整个程序的过程调度及状态协调 2.Yarnchild:负责 map 阶段的整个数据处理流程 3 ...

  9. Hadoop与Spark比较

    先看这篇文章:http://www.huochai.mobi/p/d/3967708/?share_tid=86bc0ba46c64&fmid=0 直接比较Hadoop和Spark有难度,因为 ...

随机推荐

  1. Python3 Address already in use 解决方法

    1.查看使用端口号netstat -ntlp 2.根据端口号找到pid 3.杀死程序 kill -9 pid 4.重新启动程序 简单粗暴 我使用python3时编写Socket,linux系统下使用c ...

  2. synchronized的对象锁和类锁

    概念 synchronized 是 Java 中的关键字,是利用锁的机制来实现同步的. 锁机制有如下两种特性: 互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制, ...

  3. Netfilter 之 iptable_mangle

    初始化 iptable_mangle_table_init函数通过调用ipt_register_table完成mangle表注册和钩子函数注册的功能:该流程与iptable_filter的函数调用的函 ...

  4. Linux Centos安装宝塔面板教程

    材料:阿里云服务器远程ip地址和购买服务的账号和密码 版本Centos 6.9版本 用Xshell远程登录安装宝塔 Xshell的界面是这样的,如图 点击左上角新建回话可以创建一个新的SSH连接,如图 ...

  5. Table 'xxx.hibernate_sequence' doesn't exist

    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'xxx.hibernate_sequence' ...

  6. debian上搭建私有docker仓库

    docker官方仓库是docker hub.虽然很好用,但是无法满足私密性的要求. 如果只需要在局域网内或者朋友圈内分享各自制作的image,那么,搭建属于自己的docker仓库变得很有必要. 一.环 ...

  7. input上传指定类型的文件

    1. 谷歌–上传文件夹 添加属性webkitdirectory <input type = "file" webkitdirectory> 2. 上传文件–限制类型 添 ...

  8. java 语言实现豆瓣电影信息查询

    豆瓣上面有很多电影,有时候要查看个电影信息,去豆瓣搜下还是很方便的,但是如何通过接口的形式来查看豆瓣电影,这对于很多网站.app其实是非常实用的功能,这里笔者附上一个java实现的豆瓣电影信息获取的代 ...

  9. 练习django 访问url报错Forbidden (CSRF cookie not set.)

    解决方法是把setting中csrf那行注释掉: MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.con ...

  10. golang channel详解和协程优雅退出

    非缓冲chan,读写对称 非缓冲channel,要求一端读取,一端写入.channel大小为零,所以读写操作一定要匹配. func main() { nochan := make(chan int) ...