Hadoop应用开发-Hadoop的I/O操作_第1页
Hadoop应用开发-Hadoop的I/O操作_第2页
Hadoop应用开发-Hadoop的I/O操作_第3页
Hadoop应用开发-Hadoop的I/O操作_第4页
Hadoop应用开发-Hadoop的I/O操作_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七讲Hadoop地I/O操作知识点回顾MapReduce概述MapReduce处理过程binerPartionerMapReduce地输入处理类MapReduce地输出处理类MapReduce综合案例2本讲知识点I/O操作地数据完整I/O操作地数据压缩HadoopWritable序列化接口地使用方法Hadoop常用序列化接口地作用Hadoop基于文件地数据结构3前言数据在多节点之间传输,存储地出错问题,因此我们需要要行数据完整地校验。大文件在传输与存储时,磁盘容量不足与传输速率问题,因此我们需要行文件压缩。数据在节点间行传输存储时地序列化问题。Hadoop被设计为适合于大文件地读写,而小文件地读写效率较低,因此需要专门地传输与存储方案。4七.一IO操作地数据完整检查HadoopI/O操作时行数据完整检查主要是在两个阶段行本地文件上传到HDFS集群HDFS集群数据读取到本地时除此之外DataNode也会定期检测所有本地block地完整默认情况下,HDFS会为每一个固定长度地数据执行一次校验与,这个长度由io.bytes.per.checksum参数指定,默认是五一二字节。如果对系统能造成地损耗较大则可以对这个参数行修改。5七.二I/O操作地数据压缩Hadoop处理与存储数据经常受到磁盘I/O地影响,压缩数据可以行改善使用压缩时尽量遵循以下原则:运算密集任务尽量少用压缩IO密集任务推荐使用压缩6七.二I/O操作地数据压缩压缩算法压缩算法地实现被称为codec,是pressor/Depressor地简写。不同地压缩算法能不同,常用地压缩算法如表7压缩算法压缩编码/解码器DEFLATEorg.apache.hadoop.io.press.DefaultCodeCGziporg.apahce.hadoop.io.press.GzipCodeCbzip二org.apache.hadoop.io.press.bzio二CodeCLZO.apache.hadoop.pression.lzoCodeC七.二I/O操作地数据压缩这些编码解码器均实现了pressionCodec接口,不同压缩算法地异同点如表8压缩算法命令行工具算法文件扩展名可分割DEFLATE无DEFLATE.deflate不可分割gzipgzipDEFLATE.gz不可分割bzip二bzip二bzip二.bz二可分割LZOLzopLZO.lzo不可分割七.二I/O操作地数据压缩压缩与解压缩我们要对一个文件行压缩需要编码器,对一个压缩文件行解压需要解码器。获取编解码器地方式有两种根据扩展名让程序自己去选择相应地编解码器。我们自己去指定编解码器。9七.二I/O操作地数据压缩压缩与解压缩我们一般使用pressionCodec接口实现具体地编解码器来对流行压缩与解压缩,如果想对正在被写入一个输出流地数据行压缩,我们可以使用createOutputStream(OutputStreamout)方法创建一个pressionOutputStream(未压缩地数据将被写到此),将其以压缩格式写入底层地流,如果想对从输入流读取而来地数据行解压缩,则调用createInputStream(InputStreamin)函数,从而获得一个pressionInputStream,从底层地流读取未压缩地数据。10七.三HadoopI/O序列化接口序列化序列化(serialization)是指将结构化地对象转化为字节流,以便在网络上传输或者写入到硬盘行永久存储;而反序列化(deserialization)是指将字节流转回到结构化对象地过程。Hadoop序列化在Hadoop,Mapper,biner,Reducer等阶段之间地通信都需要使用序列化与反序列化技术。序列化是Hadoop核心地一部分,在Hadoop,位于org.apache.hadoop.io包地Writable接口是Hadoop序列化格式地实现。11七.三HadoopI/O序列化接口Writable接口Hadoop地键(key)与值(value)需要是实现了Writable接口地对象以下是HadoopWritable接口地声明,其Write方法负责将结构化对象转化为字节流,readFields方法负责将字节流转化为结构化对象。12七.三HadoopI/O序列化接口在Hadoop我们常见到地Java基本类型大多都有对应地序列化接口,这些类型均使用了Writable接口行封装。我们可以使用这些类内置地get()与set()两个方法来取值或赋值操作。(VintWritable与VlongWritable为变长格式)13七.三HadoopI/O序列化接口Writableparable接口Writableparable继承自Writable与java.lang.parable接口,是一个Writable也是一个parable。因此继承该接口地序列化接口是可以比较地Writableparable接口地实现类有BooleanWritable,BytesWritable,ByteWritable,DoubleWritable,FloatWritable,IntWritable,LongWritable,MD五Hash,NullWritable,Record,RecordTypeInfo,,Text,VIntWritable,VLongWritable。14七.三HadoopI/O序列化接口典型hadoop序列化接口及使用方法Text类型一般认为其是java.lang.String地Writable等价charAt()方法返回地是当前位置字符对应地Unicode编码地位置find()方法返回地是当前位置地字节偏移量IntWritable类型IntWritable类型是对Java基本类型int行Writable封装后地类型。我们可使用set()方法设置值,使用get()方法获取值。15七.三HadoopI/O序列化接口典型hadoop序列化接口及使用方法NullWritable类型NullWritable地序列化长度为零,它既不从数据流读取数据也不向数据流写数据。在不需要使用键值地情况下可使用该类型行占位。ObjectWritable类型ObjectWritable

是一种多用途地封装,它可以指向Java

基本类型,字符串,枚举,Writable

,空值,它使用Hadoop

地RPC

来封装与反封装方法地参数与返回类型.16七.四自定义序列化类实现自定义地序列化类需要注意以下事项Writable地序列化方法需要要重写,重写序列化方法时写入与读取地顺序需要完全一样。需要要有无参构造方法,因为反序列化时需要反射调用无参构造方法。如果有写入文件地需求则需要实现

toString()方法。如果有排序地需求则需要实现pareTo()方法。17七.五基于文件地数据结构SequenceFile对于日志文件来说,纯文本不适合记录二制类型数据,通过SequenceFile为二制键值对提供了持久地数据结构,将其作为日志文件地存储格式时,可自定义键(LongWritable)与值(Writeable地实现类)地类型。多个小文件在行计算时需要开启很多程,所以采用容器文件SequenceFile按固定大小将多个小文件包装起来,使存储与处理更高效。SequenceFile地存储类似于Log文件,SequenceFile地每条记录是可序列化地字符数组18七.五基于文件地数据结构SequenceFileHeader主要包含了Keyclassname,Valueclassname,存储压缩算法,用户自定义元数据等信息,此外,还包含了一些同步标识,用于快速定位到记录地边界。Record以键值对地方式行存储19七.五基于文件地数据结构SequenceFileInputFormat如果MapReduce需要处理SequenceFile类型地数据,需要指定SequenceFileInputFormat处理。job.setInputFormatClass(SequenceFileInputFormat.class);

输出设置相类似job.setOutp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论