设为首页 收藏本站
查看: 1473|回复: 0

[经验分享] 《Hadoop权威指南》——第七章MapReduce的类型与格式

[复制链接]
发表于 2016-12-12 09:46:22 | 显示全部楼层 |阅读模式
输入




  • 类FileInputFormat

FileInputFormat是所有使用文件作为数据源的InputFormat实现的基类。
1,1基本的输入
通过addInputPath(s)setInputPath(s)四种静态方法设置输入路径。
1,2有选择的输入
如果需要排除特定文件,可以使用setInputPathFilter()方法设置一个过滤器。
注:FileInputFormat会使用一个默认的过滤器来排除隐藏文件(名称中以“.”和“_”开头的文件)。如果通过调用setInputPathFilter()设置过滤器,将会在默认过滤器的基础上进行过滤。
1,3FileInputFormat的输入分片
分片的大小计算公式:maxminimumSizeminmaximumSizeblockSize))。
默认情况下:maximumSize=Long.Max_Value
            MinimumSize=1
            MinimuSize < blockSize < maximumSize
因此,分片的大小=blockSize
1,4避免切分输入文件
方法一:增加最小分片大小minimumSize,使其大于要处理的最大文件的大小。
方法二:使用FileInputFormat的具体子类,并冲在isSplitable(),将返回值设为false。例子如下。

public class NonSplittableTextInputFormat extends TextInputFormat{
@override
protected boolean isSplitable(FileSystem fs, Path file){
return false;
}
}
 



  • 类TextInputFormat(默认的InputFormat)

每条记录是一行输入。KeyLongWritable,存储该行在当前分片中的字节偏移量;Val:这行的内容,不包括行终止符(换行符和回车符)



  • 类KeyValueTextInputFormat

Hadoop默认的输出时TextOutputFormat,由\t分隔。使用该类,可以直接确定keyval。可以通过key.value.separator.in.input.line属性来指定分隔符,默认是\t



  • 类SequenceFileInputFormat

该类不仅可以读SequenceFile,而且可以读MapFile。如果在处理顺序文件时遇到目录,则会自动认为正在读MapFile,使用的是其数据文件。



  • 多种输入MultipleInputs

如果需要同时对多种的数据源进行处理,可以使用MultipleInputs,并可以设置每个数据源的Map处理函数。例子如下:

MultipleInputs.addInputPath(conf, dataset1,TextInputFormat.class,MyMapper1.class);
MultipleInputs.addInputPath(conf, dataset2,TextInputFormat.class,MyMapper2.class);
 
其中,dataset1dataset2的数据都是文本文件,所以两者都使用TextInputFormat,但是他们的行格式不同,所以指定了两个Mapper。但是需要注意,两个Mapper的输出类型必须一样,因此reduce看到的是聚集后的map输出。
该类还有一个重载版本的addInputPath()方法,它没有mapper参数,如果有多种输入格式而只有一个mapper,可以直接使用该重载方法,并在main中用setMapperClass指定Mapper
<!--[if !supportLists]-->六、<!--[endif]-->数据库输入(数据库和HBase),类DBInputFormat
输出




  • 类TextOutputFormat

这是默认的输出格式。
可以通过设置mapred.textoutputformat.separator属性改变默认的分隔符。与TextOutputFormat对应的输入格式是KeyValueTextInputFormat



  • 类SequenceFileOutputFormat

  • 类MapFileOutputFormat

该类把MapFile作为输出。MapFile中的键必须顺序添加,因此必须确保reducer输出的键已经排好序。



  • 类MultipleOutputFormat和类MultipleOutput(多个输出)

4,1 MultipleOutputFormat是个抽象类,有两个实体子类:MultipleTextOutputFormatMultipleSequenceFileOutputFormat类。该抽象类提供了一些子类覆盖来控制输出文件名的Protected方法。例子如下:

static class MyMultipleOut extends MultipleTextOutFormat<NullWritable,Text>{
//NullWritable,Text为输出的key和val类型
Protected String generateFileNameForKeyValue(NullWritable key, Text value, String name){
//返回的文件名是相对于输出路径的。
return parse(value);
}
}
 
最后,在main中设置setOutputFormat(MyMulitpleOut.class)
MultipleOutputFormat还有很多特性,如为只有map的作业进行复制输入目录结构和文件命名等能力。
4,2 MultipleOutputs
注意:MultipleOutputs只能包含字母字符。具体用法参见《hadoop权威指南》P221.
注:在新版的MapReduceAPI中,只有MultipleOutputs,它支持这两种多输出类的所有特征。



  • 数据库输出(数据库和HBase

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-313096-1-1.html 上篇帖子: hadoop之failed task任务和killed task任务 下篇帖子: SQL on Hadoop系统的总结分析(二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表