Hadoop MapReduce InputFormat基础
有时候你可能想要用不同的方法从input data中读取数据。那么你就需要创建一个自己的InputFormat类。InputFormat是一个只有两个函数的接口。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;
}
getSplits():标记所有的输入数据,然后将他们切分为小的输入数据块,每个Map任务处理一个数据块;getRecordReader():提供一个RecordReader来从给定的数据块中迭代处理数据,然后将数据处理为<key,value>格式。
由于没有人愿意关心怎样将数据块分为小的数据块,你应该继承FileInputFormat类,它用来处理数据的分块。大部分已知的InputFormat就是FileInputFormat的子类。
| InputFormat | Description |
|---|---|
| TextInputFormat | 输入文件中的每一行就是一个记录,Key是这一行的byte offset,而value是这一行的内容。 Key: LongWritable Value: Text |
| KeyValueTextInputFormat | 输入文件中每一行就是一个记录,第一个分隔符字符切分每行。在分隔符字符之前的内容为Key,在之后的 为Value。 分隔符变量通过key.value.separator.in.input.line变量设置,默认为(\t)字符。 Key: Text Value: Text |
| SequenceFileInputFormat<K,V> | 一个用来读取字符流数据的InputFormat,<Key,Value>为用户自定义的。字符流数据是Hadoop自定义的压缩的二进制数据格式。 它用来优化从一个MapReduce任务的输出到另一个MapReduce任务的输入之间的数据传输过程。 Key: K(用户自定义) Value: V(用户自定义) |
| NLineInputFormat | 与TextInputFormat一样,但每个数据块必须保证有且只有N行,mapred.line.input.format.linespermap属性,默认为1,设置为N。 Key: LongWritable value: Text |
FileInputFormat实现getSplits()方法,但是仍然保留getRecordReader()方法为abstract以使其子类实现。FileInputFormat的getSplits()实现试着将输入数据分块大小限制在numSplits值之上,numSplits<数据块<hdfs block sizeFileInputFormat有一些子类可以重载的protected函数,例如isSplitable(),它用来确定你是否可以切分一个块,默认返回为true,表示只要数据块大于hdfs block size,那么它将会被切分。但有时候你不希望切分一个文件,例如某些二进制序列文件不能被切分时,你就需要重载该函数使其返回false。在用FileInputFormat时,你主要的精力应该集中在数据块分解为记录,并且生成<key,value>键值对的RecordReader方法上。public interface RecordReader<K, V> {
boolean next(K key, V value) throws IOException;
K createKey();
V createValue(); long getPos() throws IOException;
public void close() throws IOException;
float getProgress() throws IOException;
}
Hadoop MapReduce InputFormat基础的更多相关文章
- Hadoop MapReduce InputFormat/OutputFormat
InputFormat import java.io.IOException; import java.util.List; /** * InputFormat describes the input ...
- [Hadoop] - 自定义Mapreduce InputFormat&OutputFormat
在MR程序的开发过程中,经常会遇到输入数据不是HDFS或者数据输出目的地不是HDFS的,MapReduce的设计已经考虑到这种情况,它为我们提供了两个组建,只需要我们自定义适合的InputFormat ...
- 从分治算法到 Hadoop MapReduce
从分治算法说起 要说 Hadoop MapReduce 就不得不说分治算法,而分治算法其实说白了,就是四个字 分而治之 .其实就是将一个复杂的问题分解成多组相同或类似的子问题,对这些子问题再分,然后再 ...
- Hadoop MapReduce编程 API入门系列之网页流量版本1(二十二)
不多说,直接上代码. 对流量原始日志进行流量统计,将不同省份的用户统计结果输出到不同文件. 代码 package zhouls.bigdata.myMapReduce.flowsum; import ...
- hadoop mapreduce 基础实例一记词
mapreduce实现一个简单的单词计数的功能. 一,准备工作:eclipse 安装hadoop 插件: 下载相关版本的hadoop-eclipse-plugin-2.2.0.jar到eclipse/ ...
- Hadoop MapReduce编程学习
一直在搞spark,也没时间弄hadoop,不过Hadoop基本的编程我觉得我还是要会吧,看到一篇不错的文章,不过应该应用于hadoop2.0以前,因为代码中有 conf.set("map ...
- 【Big Data - Hadoop - MapReduce】hadoop 学习笔记:MapReduce框架详解
开始聊MapReduce,MapReduce是Hadoop的计算框架,我学Hadoop是从Hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...
- MapReduce编程基础
MapReduce编程基础 1. WordCount示例及MapReduce程序框架 2. MapReduce程序执行流程 3. 深入学习MapReduce编程(1) 4. 参考资料及代码下载 & ...
- Hadoop MapReduce 一文详解MapReduce及工作机制
@ 目录 前言-MR概述 1.Hadoop MapReduce设计思想及优缺点 设计思想 优点: 缺点: 2. Hadoop MapReduce核心思想 3.MapReduce工作机制 剖析MapRe ...
随机推荐
- 【活动】上线了|带你直击react年度盛会
明后两天,ReactEurope 2016大会在巴黎举行,本次大会演讲主题有: React Native(动画及运行性能优化) Flux-like 数据架构(GraphQL 最佳实践与展望.Redux ...
- 关于css中层叠性的一点理解
关于css层叠性的一点理解 标签(空格分隔): html css 我们平时在写css的时候会遇到这样的情况 <!DOCTYPE html> <html lang="en&q ...
- 成功抓取douban 所有电影
之前爬了250,想爬所有的电影 Rule(LinkExtractor(allow=(r'https://movie.douban.com/subject/\d+')), callback=" ...
- 宝宝书 & 网站
1. 网站 妈妈帮 宝宝树 2. 图书推荐 育儿百科 育儿经 中国儿童智力方程 聪明宝宝营养食谱1001例
- chckbox多选
1.HTML结构 <input type="checkbox" name="test" value="1"/><span& ...
- 例举在诊断Oracle性能问题时,常用的工具、方法
例举在诊断Oracle性能问题时,常用的工具.方法 解答: 1)简单一点的可以用toad及dbartisan这样的工具. 2)纯做性能监测,比较出色的有spolight和emc的I3,这两个软件都比较 ...
- <!>字体效果
<h1>...</h1>标题字(最大) <h6>...</h6>标题字(最小) <b>...</b>粗体字 <strong ...
- ISP图像调试工程师
汉邦高科 任职要求: 1. 电子工程.图像与信号处理.计算机等相关专业,本科及以上学历: 2. 在数字图像处理.视频压缩等方面具有扎实的理论背景知识: 3. 熟悉Sony.Panasonic.Apti ...
- linux 格式化u盘
在单位用U盘安装的archlinux,安装完后,U盘就没再管它,后来女朋友要用U盘,我就甩了一句,在你那windows的机器下格式化一下那个U盘就可以用了,谁知道,就这一句话,好好的2GU盘变300多 ...
- 【分享】DevDocs API Documentation
http://devdocs.io/ 这是一份综合性的在线API列表,很全,方便查找.