一个输入分片( 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. Docker的镜像 导出导入

    查看当前已经安装的镜像 vagrant@vagrant:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7.22 ...

  2. JavaScript - window对象相关

    1 . window对象常用方法 : 写法 : window.方法() 注意 : window可以省略不写 alert(), confirm(), prompt()是JavaScript提供和用户交互 ...

  3. java 数组常见操作

    1.遍历  依次访问数组中的每个元素 public class ArrayDemo04 { public static void main(String[] args) { int[] arr = { ...

  4. Linux g++

    Usage: g++ [options] file...Options:  -pass-exit-codes         Exit with highest error code from a p ...

  5. 长链接生成短链接Java源码(调用百度接口)

    public static DefaultHttpClient httpclient; static { httpclient = new DefaultHttpClient(); //httpcli ...

  6. DNS的解析过程

    1.什么是DNS 在互联网上,唯一标识一台计算机的是IP地址,但是IP地址不方便记忆,通过一个域名对应一个IP地址,来达到找到IP地址的目的,那么DNS就是将域名转换成IP地址的过程. 2.DNS查询 ...

  7. exit与return的区别

    ===========================PHP的解释=========================================================== return ...

  8. vue-router 基本操作

    安装 vue-router 在命令行中进入 vue 的项目目录里,运行命令 npm install vue-router --save 来进行安装   npm install vue-router - ...

  9. node环境下安装vue-cli

    一. node安装 1)如果不确定自己是否安装了node,可以在命令行工具内执行: node -v  (检查一下 版本): 2)如果 执行结果显示: xx 不是内部命令,说明你还没有安装node , ...

  10. HYNB Round 8: 2016 ICPC Amritapuri Regionals

    HYNB Round 8: 2016 ICPC Amritapuri Regionals A - Tim and BSTs 做法 经典的树 DP 问题. \(dp[u][i]\) 表示考虑以 u 为根 ...