一个输入分片( in put split)就是能够被单个map 操作 处理的输入块. 每一个map 操作只处理一个输入分片,并且一个一个地处理每条记录,也就是一个键/值对。输入分片和记录都是逻辑上的,并不必要将它们对应到文件(虽然一般情况下都是这样的)。在数据库中.
一个输入分片可以是一个表 的若干行,而一条记录就是这若干行中的一行(事实上DBlnputFormat 就是这么
的,它是一种可以从关系数据库获取数据的一种格式).
①JobClient通过指定的输入文件的格式来生成数据分片InputSplit;
②一个分片不是数据本身,而是可分片数据的引用(你要用它的时候,根据他的应用地址,就找到了原始文件数据);一个InputSplit 有一个以字节为单位的长度以及一组存储位置(即一组主机名).存储位置是为了让 MapReduce
系统将map 操作放在离存储位置最近的机上,而长度是为了将单元 排序以使得最大的单元能够最先得到处理,以提高效率(这也是一种贪心近似算法) 。
③InputFormat接口负责生成分片;
源码位置:org.apache.hadoop.mapreduce.lib.input包(新), org.apache.hadoop.mapred.lib
包(旧)
查看其中FileInputFormat类中的getSplits()方法;
computeSplitSize()函数决定分片大小;

JobClient 调用getSplits() 方法,并以numSplits(如上图所示,新api传入的上下文,自然是可以的,必然含有分割的所有需要的数据) 为参数传入期望的map 任务 数,这个参数将作为一个参考值. InputFormat可以返回一个不同于这个值个数的单元。在计算好实际的分布的个数后,客户端将它们发送到jobtracker
上. jobtracker 会使用它们的存储位置信息将它们调度到相应的tasktracker 上执行。 在tasktracker 上, map 任务会将输入分片传递到InputFormat 的 getRecordReader()
方法中从而获得相应的RecordReader. RecordReader 基本就是记录上的迭代器,map 任务会使用RecordReader 来读取记录并且生成键/值对,然后再传递给map 函数.
请看Mapper’s run()方法:

当执行了setup(),nextKeyValue()会被上下文重复调用。当所有的split记录遍历之后,map执行cleanup()。
这边是分片输入的相关知识。

各种输入类的结构关系图:

MapReduce深入理解输入和输出格式(1)-输入分片与记录的更多相关文章

  1. MapReduce深入理解输入和输出格式(2)-输入和输出完全总结

    MapReduce太高深,性能也值得考虑,大家感兴趣的还是看看spark比较好. FileInputFormat类 FileInputFormat是所有使用文件为数据源的InputFormat实现的基 ...

  2. c语言第一次作业——输入与输出格式

    一.PTA实验作业 1.温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代码 ...

  3. SAS 输入与输出格式

    SAS 输入与输出格式 一.认识SAS中的数据格式 SAS 中的格式有: 数字型 字符型 日期型 1.其中数字型的格式有一下集中表示方式: 整型数值:321 浮点数值:321.123 带逗号的数值:1 ...

  4. Hadoop 对MapReduce的理解

    对MapReduce的理解 客户端启动一个作业 向JobTraker请求一个JobId 将资源文件复制到HDFS上,包括Jar文件,配置文件,输入划分信息等 接收作业后,进入作业队列,根据输入划分信息 ...

  5. 编程计算2×3阶矩阵A和3×2阶矩阵B之积C。 矩阵相乘的基本方法是: 矩阵A的第i行的所有元素同矩阵B第j列的元素对应相乘, 并把相乘的结果相加,最终得到的值就是矩阵C的第i行第j列的值。 要求: (1)从键盘分别输入矩阵A和B, 输出乘积矩阵C (2) **输入提示信息为: 输入矩阵A之前提示:"Input 2*3 matrix a:\n" 输入矩阵B之前提示

    编程计算2×3阶矩阵A和3×2阶矩阵B之积C. 矩阵相乘的基本方法是: 矩阵A的第i行的所有元素同矩阵B第j列的元素对应相乘, 并把相乘的结果相加,最终得到的值就是矩阵C的第i行第j列的值. 要求: ...

  6. c#部分---用结构体的题目- //请输入班级人数,输入每个人的学号,姓名,和语文分数、数学分数和英语分数(要求使用结构体)

    //请输入班级人数,输入每个人的学号,姓名,和语文分数.数学分数和英语分数(要求使用结构体), //求班级里两个语文分数是最高分的学生的所有信息:数学分数是最高分的两个学生的所有信息:英语平均分 建立 ...

  7. Python实现使用tkinter弹出输入框输入数字, 具有确定输入和清除功能

    Python3.6中用tkinter, 弹出可以输入数字的输入框. # Copyright (c) 2017-7-21 ZhengPeng All rights reserved. def pop_u ...

  8. html input验证只能输入数字,不能输入其他

    html input验证只能输入数字,不能输入其他 此方法为借鉴别人的,在此只做记录. <input type="text" onkeyup="if(!/^\d+$ ...

  9. elementUi中input输入字符光标在输入一个字符后,光标失去焦点

    elementUi中input输入字符光标在输入一个字符后,光标就退出,无法输入需要再次聚焦然后输入一个字符又再次退出 首先,用elementUi正常用v-model绑定输入的值是不会造成光标退出的, ...

随机推荐

  1. Bootstrap 附加导航(Affix)插件

    附加导航(Affix)插件允许指定 <div> 固定在页面的某个位置.一个常见的例子是社交图标.它们将在某个位置开始,但当页面点击某个标记,该 <div> 会锁定在某个位置,不 ...

  2. hdu6089 Rikka with Terrorist

    题意:n*m的平面内有K个不安全点,Q个询问位置在(x,y)的人能走到多少个点?走到:(x,y)和(x',y')之间的矩形中不包含不安全点. 标程: #include<bits/stdc++.h ...

  3. [JZOJ6299] 2019.08.12【NOIP提高组A】工厂

    题目 题目大意 工厂内每个人只会操作一些机器. 他们会以随机的顺序来,每次选任意一台机器来操作. 一台机器只能由一个工人来操作. 可以花费一的代价来使某个工人学会一种机器. 问花费最少的代价,使得在所 ...

  4. DNS 攻击方式及攻击案例

    [赛迪网-IT技术报道]2010年1月12日晨7时起,网络上开始陆续出现百度出现无法访问的情况反馈, 12时左右基本恢复正常:18时许百度发布官方版本公告:对事故原因说明为:"因www.ba ...

  5. Linux后台运行java的jar包后台运行java -jar 命令

    为什么java -jar 的命令终端的窗口关闭就停止运行了??tomcat中war的就不会? 关闭终端的窗口相当于ctrl+c的命令,关闭了窗口就相当于停止了java -jar这个进程,即ctrl+c ...

  6. PAT甲级——A1104 Sum of Number Segments【20】

    Consider a positive integer N written in standard notation with k+1 digits a​i​​ as a​k​​⋯a​1​​a​0​​ ...

  7. django零散知识点

    后端将对象以对象形式传到前端: from django.core.serializers import serialize def xxx(reqeust): project_list = model ...

  8. java_List接口

    /** * java.util.list接口 extends Collection接口 * 1.有序的集合 * 2.有索引 * 3.元素可以重复 * * List中带索引的方法: *add:添加 * ...

  9. 位运算 - 左移右移运算符 >>, <<, >>>

    1-左移运算符m<<n,表示把m左移n位.左移n位的时候,最左边的n位数将被丢弃,同时在最右边补上n个0.例如: 00001010<<2 = 00101000 10001010 ...

  10. SpringCloud搭建分布式配置中心(基于git)

    1.简介 Spring Cloud Config.它用来为分布式系统中的基础设施和微服务提供集中化的外部配置支持,分为服务端和客户端两个部分. 其中服务端也称为分布式配置中心,他是独立的微服务应用,用 ...