MapReduce中的InputFormat(1)概述

1 概念
InputFormat用于描述输入数据的格式,提供以下两个功能:
A、数据切分:按照某种策略将输入的数据切分成若干split,以便确定Map Task个数,以及对应的Split。
B、提供数据:为Mapper提供输入数据,对于给定split,能将其解析为<k,v>格式。即<K1,V1>


2 新老版本

老版本:package org.apache.hadoop.mapred

public interface InputFormat<K, V> {InputSplit[] getSplits(JobConf job, int numSplits) throws IOException;RecordReader<K, V> getRecordReader(InputSplit split,JobConf job, Reporter reporter)  throws IOException;
}
新版本:package org.apache.hadoop.mapreduce

public abstract class InputFormat<K, V> {public abstract List<InputSplit> getSplits(JobContext context) throws IOException, InterruptedException;  public abstract RecordReader<K,V> createRecordReader(InputSplit split,TaskAttemptContext context) throws IOException,InterruptedException;
}

3 解析
3.1 设计思想
所有基于文件的InputFormat的实现基类都是FileInputFormat。
针对文本格式:TextInputFormat、KeyValueTextInputFormat、NLineInputFormat
针对二进制格式:SequenceFileInputFormat


基于文件的FileInputFormat的设计思想是:

A 由公共基类FileInputFormat采用统一的方法,对文件进行切分成InputSplit(如按照统一的大小)。getSplit方法
B 由各个派生类根据自己的需求,解析InputSplit。即各个子类实现的createRecordReader方法


3.2 getSplits

主要完成数据切分的功能,它会尝试着将输入数据切分为numSplit个inputSplit。有以下两个特点:
A、逻辑分片:inputSplit只记录分片的元信息。
B、可序列化:为了进程间通信。
在Hadoop1.X在JobClient的中writeNewSplits方法使用了getSplits。

// 通过反射获得设置的inputFormat.class的inputFormat对象 
InputFormat<?, ?> input = ReflectionUtils.newInstance(job.getInputFormatClass(), conf);
// 获取逻辑分片信息
List<InputSplit> splits = input.getSplits(job);

3.3 getRecordReader
该方法返回一个RecordReader对象,它实现了类似迭代器的功能,将某个split解析为一个个<k,v>对。该类需要考虑以下两点:
A、定位边界记录:为了识别一条完整的记录,记录之间要加上一些同步标志。
对于TextInputFormat:同步标识就是换行符。
对于SequenceFileInputFormat:每隔离若干条记录,会添加固定长度同步字符串。
B、解析<k,v>:定位到一条记录后,需要将该记录分解为key和value两部分。
对于TextInputFormat:key就是该行在文件的中的偏移量,value就是该行的内容。
对于SequenceFileInputFormat: 每条记录的格式为[record length] [key length] [key] [value]。
前两个字段分别是整条记录的长度和key的长度,均为4个字节,后半部分分别是key和value的内容。知道每条记录的格式后,很容易解析。

整理自董西成老师的《Hadoop技术内幕》,并阅读源码小有体会。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 修改sgamaxsize_oracle初始化内存配置参数(sga,pga,sharepool)

小白在日常工作中经常遇到数据库启动报错&#xff0c;其中80%都是跟数据库的初始化内存参数有关&#xff0c;现整理一份模板&#xff0c;以期后用1. 查出linux服务器总的内存&#xff1a;8G左右integer memTotalSizegrep ^MemTotal: /proc/meminfo | awk {print $2} 8064956…

在anaconda中运行jupyter notebook,无法自动打开浏览器的解决方案,亲测100%有效

运行jupyter notebook&#xff0c;无法自动打开浏览器的解决方案 第一步 找到 Jupyter_notebook_config.py文件&#xff0c;无论你anaconda装在哪个盘&#xff0c;这个文件一般都在C盘&#xff0c;我的在C:\Users\wyf峰.jupyter 如果没有可以在anaconda prompt中输入以下语句…

用PHP去掉文件头的Unicode签名(BOM)

<?php //此文件用于快速测试UTF8编码的文件是不是加了BOM&#xff0c;并可自动移除 //By Bob Shen $basedir"."; //修改此行为需要检测的目录&#xff0c;点表示当前目录 $auto1; //是否自动移除发现的BOM信息。1为是&#xff0c;0为否。 //以下不用改动 if ($dh…

VMware虚拟机12安装linux系统

http://jingyan.baidu.com/article/4f7d5712d20a1b1a21192760.html 阿里云开源镜像站&#xff1a;http://mirrors.aliyun.com/转载于:https://www.cnblogs.com/liuxinfei/p/6139921.html

本地配置_Hadoop本地模式的安装配置

Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构&#xff0c;它可以使用户在不了解分布式底层细节的情況下开发分布式程序&#xff0c;充分利用集群的威力进行高速运算和存储。从其定义就可以发现&#xff0c;它解決了两大问题&#xff1a;大数据存储、大数据分析。也…

基于 Filter 实现条件路由

基于 filter 实现条件路由Intro在我们的项目有几个测试用的接口&#xff0c;有的接口我们往往不想在生产环境上使用&#xff0c;于是会在代码里判断当前环境是不是生产环境&#xff0c;如果不是生产环境才允许执行&#xff0c;否则就返回一个错误&#xff0c;这样的接口多了之后…

CentOS 6.9通过RPM安装EPEL源(http://dl.fedoraproject.org)

另类的装法&#xff0c;通过RPM包直接安装 wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm -ivh epel-release-6-8.noarch.rpm 可以发现上面的地址可以找到非6以外的包&#xff08;http://dl.fedoraproject.org&#xff09;

虚拟机防火墙

1.即时生效&#xff0c;重启后失效 开启&#xff1a;service iptables start 关闭&#xff1a;service iptables stop 2 重启后生效 开启&#xff1a;chkconfig iptables on 关闭&#xff1a;chkconfig iptables off 注意&#xff1a;需要用root用户执行此操作转载于:https://w…

ORM框架通过映射(反射)获取数据库的数据

ORM&#xff08;Object Relational Mapping&#xff09;框架采用元数据来描述对象一关系映射细节&#xff0c;元数据一般采用XML格式&#xff0c;并且存放在专门的对象一映射文件中。只要提供了持久化类与表的映射关系&#xff0c;ORM框架在运行时就能参照映射文件的信息&#…

找不到r低版本_R 语言与数据挖掘直播班开始招生,生信分析帮你发高分文章

数据单薄很难支撑文章内容&#xff1f;数据有了不知道怎么处理作出高级的图片&#xff1f;这个时候需要的是生信分析——深度的数据挖掘和分析处理&#xff0c;可以帮助临床医生通过数据处理得到自己想要的信息&#xff0c;更快速地发文章。学习哪种生信分析的工具&#xff1f;…

如何在Jupyter Notebook中使用在anaconda中创建的虚拟环境

如何在Jupyter Notebook中使用在anaconda中创建的虚拟环境 1、创建虚拟环境并激活 conda create -n 虚拟环境名 python 3.8 conda activate 虚拟环境名 2、在虚拟环境中安装ipykernel pip install ipykernel 使用ipykernel生成虚拟环境的kernel python -m ipykernel insta…

BZOJ1823:[JSOI2010]满汉全席——题解

https://www.lydsy.com/JudgeOnline/problem.php?id1823 https://www.luogu.org/problemnew/show/P4171 题面太长啦就不粘过来啦&#xff01; 裸的2-SAT用来练板子的。 显然属于“a和b之间必须选一种”模型&#xff0c;只要a向b连边&#xff0c;b向a连边即可。 &#xff08;被…

读两本敦煌书杂记-敦煌由盛转衰(二)

公元420-589年&#xff0c;中国分为南北两个部分&#xff08;史称魏晋南北朝&#xff0c;由西晋末年八王之乱引起&#xff0c;北方游牧少数民族趁机侵扰中原&#xff0c;并先后建立多个少数民族政权&#xff0c;又称“五胡乱华”。“五胡”主要指匈奴、鲜卑、羯、羌、氐五个胡人…

codevs1079 回家

题目描述 Description现在是晚餐时间,而母牛们在外面分散的牧场中。 农民约翰按响了电铃,所以她们开始向谷仓走去。 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛)。 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可…

什么是xmlschema

XML Schema定义&#xff08;XML Schema Definition,XSD&#xff09;是一套W3C标准,用于基于XML的称为XML Schema的类型系统.用于定义的语言是一种称为XML模式定义语言&#xff08;XML Schema Definition Language&#xff09;的XML语法.Web 服务使用XML作为表示消息和数据的底层…

第三方app_为什么第三方APP不能下载呢?

这些年科学技术发展日新月异&#xff0c;信息技术和网络技术也层出不穷&#xff0c;大众出行工具的汽车电器化集成度越来越高&#xff0c;汽车上娱乐主机的智能化和网络化程度也越来越高&#xff0c;汽车娱乐主机也成了人民除手机外的第二个娱乐工具&#xff0c;用惯了手机娱乐…

如何管理跨部门的沟通与协作?

俗话说“磨刀不误砍柴工”&#xff0c;选对方法&#xff0c;再复杂的事也能事半功倍。在新营销时代&#xff0c;效率为王&#xff0c;而高效率的背后&#xff0c;则是给力的技术工具与合理的工作方式。 企业级服务的兴起&#xff0c;让人们看到了信息化技术的潜力&#xff0c;从…

启动Jupyter Notebook时出现Kernel error错误的解决方法

启动Jupyter Notebook时出现Kernel error错误的解决方法 方法如下&#xff1b; 1、打开Anaconda Prompt&#xff0c;然后输入jupyter kernelspec list,查看一下 2、打开anaconda的安装目录找到E:\Anaconda3\anaconda3\share\jupyter\kernels\python3下面的kernel.json&#x…

WPF效果第一百九十七篇之Path范围内拖拽

前面效果中分享了彩色马蹄图的效果;这不今天再次在马蹄图的基础上,实现只能在Path内的拖拽效果;闲话不多扯直接看效果:1、关于拖拽顶点实现色域范围选择,参考:https://www.codeproject.com/Tips/828310/The-simplest-WPF-diagram-designer-part2、通过Blend绘制了色度图中间区域…

Ubuntu16.04 + caffe-ssd + [CPU_ONLY] + KITTI 训练总结

本次训练主要参考&#xff1a;http://blog.csdn.net/jesse_mx/article/details/65634482 感谢 Jesse_Mx &#xff0c;帮助了我很多。 坑一【openCV未安装成功】&#xff1a; openCV未安装成功会导致各种莫名的问题&#xff0c;比如&#xff1a;“No module named cv2”问题。 然…