MapReduce之InputFormat、OutputFormat(三)
文章目录
- 1. 祝大家中秋节快乐
- 2. MapReduce进阶
- 2.1 MapReduce类型
- 2.2 MapReduce输入格式
- 2.2.1 InputFormat接口
- 2.2.2 InputFormat接口的实现类
- 2.3 MapReduce输出格式
- 2.3.1 OutputFormat接口
- 2.3.2 OutputFormat接口的实现类
- 3. 小结
1. 祝大家中秋节快乐
身在长安,心在泰安,又是一年中秋佳节,相思之情,溢于言表。现留杜甫一诗与大家共勉。
今夜鄜州月,闺中只独看。
遥怜小儿女,未解忆长安。
香雾云鬟湿,清辉玉臂寒。
何时倚虚幌,双照泪痕干。
2. MapReduce进阶
2.1 MapReduce类型
- 输入数据类型由输入格式(InputFormat)设置,比如:TextInputFormat的Key类型为LongWritable,Value的类型是Text。
- map函数输出的Key类型通过setMapOutputKeyClass设置,Value类型通过setMapOutputKeyClass设置。
- reduce的输出的Key类型通过setOutputKeyClass设置,Value类型通过setOutputValueClass设置。
2.2 MapReduce输入格式
2.2.1 InputFormat接口
InputFormat类定义了如何分割和读取输入文件,它提供了以下功能:
- 选择作为输入的文件或对象。
- 定义把文件划分到任务的InputSplits。
- 为RecordReader读取文件提供一个工厂方法。
InputFormat接口包含了以下两种方法:
public abstract List<InputSplit> getSplits(JobContext context) throws IOException, InterruptedException;public abstract RecordReader<K,V> createRecordReader(InputSplit split,TaskAttemptContext context) throws IOException, InterruptedException;
方法说明:
getSplits(JobContext context)方法负责将一个大数据逻辑分成许多片,比如数据库表有100条数据,按照主键ID升序存储,假设每20条分成一片,这个List的大小就是5,然后每个InputSplit记录两个参数,第一个为这个分片的起始ID,第二个为这个分片数据的大小,这里是20。很明显InputSplit并没有真正存储数据,只是提供了一个如何将数据分片的方法。
createRecordReader方法,根据定义,返回一个能够读取分片记录的RecordReader。getSplit用来获取由输入文件计算出来的InputSplit,后面计算InputSplit时,会考虑输入文件是否可分割、文件存储时分块的大小和文件大小等因素;而createRecordReader()方法提供了RecordReader的实现,将key-value对从InputSplit中正确读出来,比如LineRecordReader,它是以偏移值为Key,每行的数据为Value,这使所有createRecordReader()返回LineRecordReader的InputFormat都是以偏移值为Key、每行数据为Value的形式读取输入分片的。
2.2.2 InputFormat接口的实现类
InputFormat接口实现类有很多,其层次结构如下所示:
常用的实现类介绍:
- FileInputFormat
FileInputFormat是所有使用文件作为其数据源的InputFormat实现的基类,它的主要作用是指出作业的输入文件位置。因为作业的输入被设定为一组路径,这对指定作业输入提供了很强的灵活性。FileInputFormat提供了四种静态方法来设定作业的输入路径:
public static void addInputPaths(Job job, String commaSeparatedPaths)
public static void addInputPath(Job job, Path path)
public static void setInputPaths(Job job, Path... inputPaths)
public static void setInputPaths(Job job, String commaSeparatedPaths)
- KeyValueTextInputFormat
每一行均为一条记录,被分隔符(缺省是tab)分割为key(Text),value(Text),当然分隔符可以自己设定。 - TextInputFormat
默认的输入格式是TextInputFormat,它把输入文件每一行作为单独的一个记录,但不做解析处理,这对那些没有被格式化的数据或是基于行的记录来说是很有用的,比如日志文件。
2.3 MapReduce输出格式
2.3.1 OutputFormat接口
OutputFormat接口主要用于描述输出数据的格式,它能够将用户提供的key/value对写入特定格式的文件中。其功能与前面描述的InputFormat相似,Hadoop提供的OutputFormat实例会把文件写在本地磁盘或HDFS上。每一个reducer会把结果输出写在公共文件夹中一个单独的文件内。这些文件一般命名为:part-xxxxx,而xxxxx是关联到某个reduce任务的partition的id。
2.3.2 OutputFormat接口的实现类
下图为OutputFormat接口的实现类层次图:
常用的OutputFormat实现类的介绍:
- 文本输出
默认的输出格式是TextOutputFormat,它把每条记录写为文本行。它的键和值可以实现Writable的任意类型,因为TextOutputFormat调用toString()方法把他们转换为字符串。每一个key/value键值对都以制表符为分隔符,当然也可以自行设定(mapreduce.output.textoutputfomat.separator),与FileOutputFormat对应的输入格式是KeyValueTextInputFormat,它可以通过配置分隔符将key/value进行文本分割。
同时,可以使用NullWritable来省略输出的key或value,或者两个都省略,相当于NullOutputFormat的输出格式,这也会导致无分隔符的输出,以使输出适合用TextInputFormat读取。 - 二进制输出
SequenceFileOutputFormat将它的输出写为一个顺序文件。如果输出需要作为后续的MapReduce任务的输入,这便是一种合适的输出格式,可以通过快速的序列化任意的数据类型到文件中,而对应SequenceFileInputFormat则会把文件反序列化为相同类型并提交到下一个Mapper的输入数据。
3. 小结
下期预告以及下下期预告:
- Combiner详细解析及操作
- Partitioner详细解析及操作
- RecordReader详细解析及操作
MapReduce之InputFormat、OutputFormat(三)相关推荐
- MapReduce之InputFormat理解
一 InputFormat主要作用: #验证job的输入规范 #对输入的文件进行切分,形成多个InputSplit文件,每一个InputSplit对应着一个map任务 #创建RecordReader, ...
- Hadoop系列之InputFormat,OutputFormat用法
首先看下InputFormat接口的代码 public interface InputFormat<K, V> {InputSplit[] getSplits(JobConf var1, ...
- 大数据基础之Hadoop(三)—— MapReduce
作者:duktig 博客:https://duktig.cn (文章首发) 优秀还努力.愿你付出甘之如饴,所得归于欢喜. 本篇文章源码参看:https://github.com/duktig666/b ...
- mapreduce工作流程_详解MapReduce中的五大编程模型
前言 我们上一节讲了关于 MapReduce 中的应用场景和架构分析,最后还使用了一个CountWord的Demo来进行演示,关于MapReduce的具体操作.如果还不了解的朋友可以看看上篇文章:[初 ...
- Hadoop集群搭建及MapReduce应用
一.Hadoop集群的搭建与配置 1.节点准备 集群规划: 主机名 IP 安装的软件 运行的进程 weekend 01 192.168.1.60 jdk.hadoop NameNode.DFSZKFa ...
- 《OD大数据实战》MapReduce实战
一.github使用手册 1. 我也用github(2)--关联本地工程到github 2. Git错误non-fast-forward后的冲突解决 3. Git中从远程的分支获取最新的版本到本地 4 ...
- hadoop之MapReduce学习教程
hadoop之MapReduce学习 MapReduce概述 MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发"基于Hadoop的数据分析应用" ...
- hadoop之mapreduce教程+案例学习(二)
第3章 MapReduce框架原理 目录 第3章 MapReduce框架原理 3.1 InputFormat数据输入 3.1.1 切片与MapTask并行度决定机制 3.1.2 Job提交流程源码和切 ...
- Hadoop分布式计算框架MapReduce
一.MapReduce概述 &源自于Google的MapReduce论文,论文发表于2004年12月 &Hadoop MapReduce是Google MapReduce的克隆版 &a ...
最新文章
- 您也使用托管C++吗?
- swift_015(Swift 的函数)
- mysql嵌套实战_艰难的mysql嵌套表结果挑战
- 读书越多会越孤独吗?
- Linux系统中df与du命令查看分区大小
- 她被“誉为”中科院最美女院士,52岁依然貌美如花?气质不输女星
- 常见特征检测算法介绍
- centos 删除crontab_Centos7 利用crontab定时执行任务及配置方法
- c#winform窗口页面一打开就加载的方法
- 终结篇—用BAT文件删除远程主机系统垃圾文件的方法
- 推荐16个国外的源码下载网站
- ligerui联动清空控件值
- 当年我们一起追过的Java,Java SE 个人笔记
- 圣诞节来了,用Python Turtle画棵圣诞树吧
- 惠普1005w打印机使用说明书_首款能充粉的打印机来了 惠普1005w一体机评测
- 琢石成器――windows环境下32位汇编语言程序设计(第三版)笔记
- MATLAB中的矩阵乘法与实际矩阵乘法的差异
- 谷歌浏览器计算机给我们的启示
- myeclipse 2017 ci 10 破解包+教程(亲测已成功)
- H5 通用收银台实战总结