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

[经验分享] 读书笔记2:Hadoop组件-(3)读与写

[复制链接]

尚未签到

发表于 2016-12-11 08:15:46 | 显示全部楼层 |阅读模式
4,读和写
MapReduce读取输入数据以及写入数据支持多种数据格式。输入数据通常驻留在较大的文件中(通常是几十或者几百GB甚至更大),MapReduce处理数据的原理是将其分割成为块,这些块可以在多个计算机上并行处理,在hadoop中这样的操作被称为“分片”。每个分片足够小以实现更细粒度的并行,但是也不能太小,否则启动和停止各个分片处理所需的时间开销比较大。
Hadoop读取文件使用FSDataInputStream而不是用DataInputStream是因为FSDataInputStreamDataInputStream进行了改进,FSDataInputStream可以实现随机读取,这就更加符合hadoop处理数据的“分块”策略了。
Hadoop默认将每一行作为一条记录,而键值分别为改行的字节偏移和内容。也许不会所有的数据都如此记录,所以hadoop支持多种数据格式,也支持自定义数据格式。
<1>InputFormat
Hadoop分割和读取文件的方式被定义在InputFormat接口的一个实现中。TextInputFormatInputFormat的一个默认的实现。
常用的InputFormat的实现类:
TextInputFormat
在文本文件中的每一行为一个记录,键为一行的字节偏移,值为一行的内容
Key:LongWritable
Value:Text
KeyValueTextInputFormat
在文本文件中的每一行为一个记录,以每行的第一个分隔符为界,分隔符之前的是键,之后的是值,分离器在属性key,value.separator.in.input.line中设定,默认为制表符(\t)
Key:Text
Value:Text
SequenceFileInputFormat<K,V>
用于读取序列文件的InputFormat。键和值由用户定义。序列文件为Hadoop专用的压缩二进制文件格式,他专用于一个MapReduce作业和其他MapReduce作业之间传递数据。
Key,Value:用户自定义
NLineInputFormat
TextInputFormat相同,但每个分片一定有N行,N在属性mapred.line.input.format.linespermap中设定,默认是1
Key:LongWritable
Value:Text
Hadoop分割和读取文件的格式是KeyValueTextInputFormat时,那么Mapper中的map方法就必须得有新的实现来符合这个新的键的类型。(因为当分割读取格式为TextInputFormat时,key的类型是LongWirtable,而分割读取格式为KeyValueTextInputFormat时,key的类型是Text,所以map方法的实现要改)
注意:对于MapReduce的输入的数据不一定都来自于外部,可能这个MapReduce的输入数据是其他MapReduce的输出数据。并且你还可以按照自己的要求去定义自定义的InputFormat
<2>OutputFormat
MapReduce输出数据到文件时,用到的是OutputFormat类,输出无需分片,输出文件放在一个公用目录中,通常被命名为part-nnnnn(这里的nnnnnreducer的分区ID)
RecordWirter将输出结果进行格式化,为RecoreReader对输入格式进行解析。
所有的OutputFormat都是从FileOutputFormat继承来的
所有的InputFormat都是从FileInputFormat继承来的
 
你可以通过调用JobConf对象的setOutputFormat方法来定制OutputFormat
以下是常用的OutputFormat的实现类:
TextOutputFormat<K,V>
将每个记录写为一行文本,键和值已字符串形式写入,已制表符分割。这个分隔符可以在属性mapred.textoutputformat.sqparator中修改
SequeneceFileOutputFormat<K,V>
Hadoop专有序列文件格式写入键值对,与SequenceFileInputFormat配合使用
NullOutputFormat<K,V>
无输出
SequenceFileOutputFormat是以序列文件格式输出数据,使其可以通过SequenceFileInputFormat来读取,有助于通过中间数据结果将MapReduce作业串起来。

运维网声明 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-312527-1-1.html 上篇帖子: 深入浅出Hadoop 高效处理大数据 下篇帖子: 总算在window下运行起来了hadoop小记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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