Hadoop I/O操作(笔记)
来源:互联网 发布:淘宝客服用什么软件 编辑:程序博客网 时间:2024/06/11 17:52
8.1 I/O操作中的数据检查
1.对本地I/O的检查
客户端在存储和读取文件时进行校验和处理,保证文件完整性。可以在core-default.xml中设置
<property>
<name io.bytes.per.checksum/>
<value 512/>
</property>
一般文件系统都能保证数据完整性,不需要Hadoop这部分功能,可以在上文件中禁用校验和机制。
<property>
<name fs.file.impl/>
<value org.apache.hadoop.fs.LocalFileSystem/>
</property>
如果你只想在程序中对某些读取禁止校验和检验,可以声明RawLocalFileSystem
FileSystem fs =new RawLocalFileSystem();
fs.initialize(null,conf);
当你需要校验和服务时,可以很方便地声明ChecksumFileSystem,继承自FileSystem
FileSystem fs =new RawLocalFileSystem();
FileSystem checksumFs = new ChecksumFileSystem(fs);
2.对HDFS的I/O数据进行检查
HDFS在一下三种情况下会检验校验和:
(1)DataNode接收数据后,存储数据前;
(2)客户端读取DataNode上的数据时;
(3)DataNode后台守护进程的定期检测;
3.数据恢复策略:略
8.2数据的压缩
8.2.1.压缩工具的选择
DEFLATE,Gzip,bzip2,LZO
8.2.2.压缩分割与输入分割
8.2.3.在MapReduce程序中使用压缩
在Job配置时配置好conf
设置map处理后数据的压缩,代码示例如下:
JobConf conf = new JobConf();
conf.setBoolean("mapred.compress.map.output",true);
设置output输出压缩,代码实例如下:
JobConf conf = new JobConf();
conf.setBoolean("mapred.output.compress",true);
conf.setClass("mapred.output.compression.codec",GzipCodec.class,CompressionCodec.class);测试使用压缩与否的效率差别:六台主机组成的小集群,输入文件为未压缩的大约为300M的文件,由随机英文字符串组成,每个字符串6位,由空格隔开,50个一行,共5千万个字符串,对文件进行wordCount。Map的输出格式采用默认的压缩算法,output输出格式采用Gzip压缩方法。压缩后程序运行快4min。
适合于集群应用网络间传输。
8.3数据的I/O序列化操作
序列化:对象转化为字节流。
反序列化:字节流转化为对象。
8.3.1Writable类
Writable是hadoop中基本类型,通过它定义了Hadoop中的基本数据类型及其操作。无论是上传还是下载数据还是运行MapReduce程序,都需要使用Writable类。Writable类只定义了两种方法:
void write(DataOutput out)throws IOException
void readFields(DataInput in)throws IOException
其派生类:BooleanWritable,Byte,Int,Long等
1、Hadoop的比较器
WritableComparable类是Hadoop非常重要的接口类,继承自Hadoop的Writable类和Java的Comparable类。
WritableComparator是WritableComparable的比较器,是RawComparator针对WritableComparator类的一个通用实现,而RawComparator继承自java的Comparator。
MapReduce执行时,Reducer会搜集相同key值的key-value对,并且在reduce之前会有一个排序,这些键值的比较都是对WritableComparator类型进行的比较。
Hadoop在RawComparator中实现了对未反序列化对象的读取,这样做的好处是,可以不必创建对象就比较想比较的内容(多是key值),从而省去了创建对象的开销。
2、Writable类中的数据类型
WritableComparator被应用在各个基本数据类型Writable类中,定义了compare,compareTo函数,可直接调用o1.compareTo(o2)
NullWritable 类:占位符,序列化长度为0,没有流从数据中读出或者写入。
8.4 针对MapReduce的文件类
map输出中间结果由SequenceFile和MapFile类表示,其中MapFile是经过排序并带有索引的SequenceFile类。
8.4.1 SequenceFile类
SequenceFile记录的是key/value对的列表,是序列化之后的二进制文件,因此不能直接查看。
1、未压缩和压缩value的SequenceFile数据格式基本是相同的
利用SequenceFile.Writer和Reader进行读写文件
见SequenceFileTest类中读写
8.4.2 MapFile类
MapFIle与SequenceFile使用类似
- Hadoop I/O操作(笔记)
- Hadoop I/O操作
- hadoop I/O笔记
- Hadoop学习笔记之---Hadoop I/O
- hadoop 学习笔记 四 -----hadoop I/O
- C# I/O操作 笔记
- hadoop学习笔记(10)-HDFS I/O性能测试
- hadoop 3(I/O)
- (JAVA自学笔记)I/O流操作
- 《hadoop权威指南》学习笔记-hadoop I/O之压缩
- 《hadoop权威指南》学习笔记-hadoop I/O之Avro
- 《hadoop权威指南》学习笔记-hadoop I/O之SequenceFile
- 笔记:Hadoop权威指南 第4章 Hadoop I/O
- C#笔记28:I/O操作
- I/O操作(上)
- I/O操作(下)
- 4.Hadoop I/O
- hadoop的I/O
- openjweb相关培训视频
- Struts2+ajax如何进行拦截器认证
- 版本控制中(SVN),发布版本的疑问。
- 计算器
- 计算组合数--取对数法
- Hadoop I/O操作(笔记)
- 【Android】媒体——利用MediaRecorder实现录音对讲功能
- centos6.3(64位)下安装rabbitvcs
- c++中内存的分类及堆和栈的区别
- CC++初学者编程教程(4) 安装Oracle12c于Windows Sever2012
- fckeditor视频教程
- 那些不易注意到的Unity实用小功能
- 2BizBoxERP通过WebStart方式(JNLP)启动客户端
- LINUX下一款不错的网站压力测试工具webbench