的类型与格式.ppt

上传人:本田雅阁 文档编号:3120336 上传时间:2019-07-12 格式:PPT 页数:40 大小:976.02KB
返回 下载 相关 举报
的类型与格式.ppt_第1页
第1页 / 共40页
的类型与格式.ppt_第2页
第2页 / 共40页
的类型与格式.ppt_第3页
第3页 / 共40页
的类型与格式.ppt_第4页
第4页 / 共40页
的类型与格式.ppt_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《的类型与格式.ppt》由会员分享,可在线阅读,更多相关《的类型与格式.ppt(40页珍藏版)》请在三一文库上搜索。

1、MapReduce的类型与格式,夏瑞仙,MapReduce数据处理模型非常简单:map和reduce函数的输入和输出是键/值对(key/value pair)。 本章深入讨论MapReduce模型,重点介绍各种类型的数据(从简单文本到结构化的二进制对象)如何在MapReduce中使用,引言,目录,MapReduce的类型 默认的MapReduce作业 输入格式 输入分片与记录 文本输入 二进制输入 多种输入 数据库输入(和输出) 输出格式 文本输出 二进制输出 多个输出 延迟输出 数据库输出,MapReduce的类型,map:(K1,V1) list(K2,V2) reduce:(K2,lis

2、t(V2) list(K3,V3) 一般来说,map函数输入的键/值的类型(K1和V1)不同于输出类型(K2和V2) reduce函数的输入类型必须与map函数的输出类型相同,但reduce函数的输出类型可以不同于输入类型,MapReduce的类型,map:(K1,V1) list(K2,V2) combine:(K2,list(V2) list(K2,V2) reduce:(K2,list(V2) list(K3,V3) combine函数与reduce函数通常是一样的,在这种情况下,K3与K2类型相同,V3与V2类型相同,MapReduce的类型,partition:(K2,V2) int

3、eger partition函数将中间的键/值对(K2和V2)进行处理,并且返回一个分区索引。实际上分区单独由键决定,MapReduce的类型,为什么不能结合mapper和reducer导出类型呢?,默认的MapReduce作业,默认的输入格式是TextInputFormat,它产生的键类型是LongWritable,值类型是Text(文本行) 默认的mapper是IdentityMapper,它将输入的键和值原封不动地写到输出中 IdentityMapper是一个泛型类型,它可以接受任何键或值的类型,只要map输入和输出键的类型相同,值的类型也相同就可以,默认的MapReduce作业,默认的

4、partitioner是HashPartitioner,它对每条记录的键进行哈希操作以决定该记录应该属于哪个分区。每个分区对应一个reducer任务 键的哈希码被转换为一个非负整数,它由哈希值与最大的整型值做一次按位与操作而获得,然后用分区数进行取模操作,来决定该记录属于哪个分区索引,默认的MapReduce作业,默认的reducer是IdentityReducer,它也是一个泛型类型,它简单的将所有的输入写到输出中 大多数MapReduce程序不会一直用相同的键或值类型,所以就想上一节中描述的那样,必须配置作业来声明使用的类型,默认的Streaming作业,必须提供一个mapper 因为默认

5、的输入格式TextInputFormat产生的键类型是LongWritable,值类型是Text,而Streaming的输出键和值(包括map的键和值)都是Text类型。默认的IdentityMapper无法将LongWritable类型的键转换为Text类型的键,Streaming中的键和值,Streaming应用可以决定分隔符,该分隔符用于通过标准输入把键/值对转换为一串比特值发送到map或reduce函数。 分隔符默认情况下是Tab(制表符),但如果键或值本身含有Tab,它能将分隔符修改成其他符号 输出键/值对时,也需要用一个可配置的分隔符来进行分割,Streaming中的键和值,输入格

6、式,输入格式,输入分片与记录 一个输入分片(split)就是由单个map处理的输入块 每条记录就是一个键/值对 在数据库的场景中,一个输入分片对应于一个表上的若干行,而一条记录对应到一行(DBInputFormat正是这么做的,它这种输入格式用于从关系数据库读取数据)。,输入格式,输入分片与记录 输入分片(split)在Java中被表示为InputSplit接口 InputSplit包含一个以字节为单位的长度和一组存储位置(即一组主机名),输入格式,输入分片与记录 InputSplit是由InputForamt创建的。InputForamt负责产生输入分片并将它们分割成记录。,输入格式,Fil

7、eInputFormat类 FileInputFormat是所有使用文件作为其数据源的InputFormat实现的基类 提供了两个功能:一个定义哪些文件包含在一个作业的输入中,一个为输入文件生成分片的实现。,输入格式,FileInputFormat类的输入路径,输入格式,FileInputFormat类的输入路径 add和set方法允许指定包含的文件。如果需要排除特定文件,可以使用setInputPathFilter()方法设置一个过滤器 即使不设置过滤器,也会使用一个默认的过滤器来排除隐藏文件(名称中以“.“和“_“开头的文件),输入格式,FileInputFormat类的输入分片,最小的输

8、入分片大小通常是1字节 最大的分片大小默认为Java long类型表示的最大值,输入格式,FileInputFormat类的输入分片,若需增加map数,可以把mapred.min.split.size调小,把mapred.max.split.size调大 若需减少map数, 可以把mapred.min.split.size调大,并把mapred.max.split.size调小,输入格式,FileInputFormat类的输入分片,输入格式,小文件与CombineFileInputFormat FileInputFormat会让每个输入文件至少产生一个map任务, 因此如果你的输入目录下有许多

9、文件, 而每个文件都很小, 例如几十kb, 那么每个文件都产生一个map会增加调度开销. 作业变慢. 那么如何防止这种问题呢? CombineFileInputFormat能有效的减少map数量. CombineFileInputFormat是针对小文件而设计的 抽象类,输入格式,避免切分 有些应用程序可能不希望文件被切分,而是用一个mapper完整处理每一个输入文件。,输入格式,把整个文件作为一条记录来处理,输入格式,将若干个小文件打包成顺序文件的MapReduce程序,输入格式,TextInputFormat,默认的InputFormat,键是LongWritable类型,存储该行在整个文

10、件中的字节偏移量,值是Text类型,是这行的内容,不包括任何终止符(换行符和回车符),输入格式,KeyValueTextInputFormat,输入格式,NLineInputFormat,输入格式,XML,大多数XML解析器会处理整个XML文档,所以如果一个大型XML文档由多个输入分片组成,那么单独处理每个分片就有挑战了 把整个文件作为一条记录来处理 StreamXmlRecordReader类,输入格式,二进制输入 SequenceFileInputFormat Hadoop的顺序文件格式存储二进制的键/值对的序列 SequenceFileAsTextInputFormat Sequence

11、FileAsBinaryInputFormat 变体 二进制对象 SequenceFile.Reader的appendRaw()方法,输入格式,多种输入,数据格式往往会随着时间演变 对不同的数据集进行连接(join,也称“联接”)操作 MultipleInputs 允许为每条输入路径指定InputFormat和Mapper,输入格式,数据库输入(和输出),DBInputFormat 用于使用JDBC从关系数据库中读取数据 最好用于加载小量的数据集,如果需要与来自HDFS的大数据集连接,要使用MultipleInputs DBOutputFormat 适用于将作业输出数据(中等规模的数据)转储到

12、数据库,输出格式,文本输出,默认的输出格式是TextOutputFormat 键和值可以是任意类型,因为TextOutputFormat调用toString()方法把它们转换为字符串 每个键和值由制表符进行分割 与TextOutputFormat对应的输入格式是KeyValueTextInputFormat NullWritable,输出格式,二进制输出 SequenceFileOutputFormat SequenceFileAsBinaryOutputFormat MapFileOutputFormat,输出格式,多个输出,输出格式,多个输出 MultipleOutputFormat 可以将数据写到多个文件,这些文件的名称源于输出的键和值 抽象类,两个实体子类:MultipleTextOutputFormat和MultipleSequenceFileOutputFormat,输出格式,多个输出 MultipleOutput 可以为不同的输出产生不同的类型,也意味着无法控制输出的命名,输出格式,延迟输出 FileOutputFormat的子类会产生输出文件,即使文件是空的。有些应用倾向于不创建空文件,此时的LazyOutputFormat就有用了 数据库输出,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1