Hadoop权威指南学习(二)——HDFS & Hadoop IO

HDFS设计:

以流式数据访问模式来存储超大文件,“一次写入,多次读取”;

HDFS为高数据吞吐量应用优化的,低延迟的方位需求应选择HBase;

文件系统的元数据存储在namenode的内存中,所能存储的文件总数受限于内存容量;

HDFS的块(block)默认为64M(块大的目的为了最小化寻址开销,从磁盘传输时间可明显大于定位时间),以块存储而非文件可简化存储系统的设计

HDFS只是Hadoop文件系统的一个实现,在org.apache.hadoop包的fs以及hdfs子包中包含了多种其他文件系统

使用Java API操作Hadoop文件包括文件与目录的操作,创建、删除、读取、写入等。

数据流:

1. 文件读取剖析



2. 文件写入剖析


Hadoop IO:

1. 数据完整性:对写入的所有数据计算校验和并在读取数据是验证校验和。(LocalFileSystem,RawLocalFileSystem,ChecksumFileSystem)

2.压缩:减少存储文件磁盘空间+加速数据在网络和磁盘上的传输。

Hadoop中CompressionCodec接口的实现代表一个codec(压缩-解压缩算法),如DEFKATE,Gzip,bzip2(支持切分)以及LZO,需要在时间和空间取平衡。而压缩算法是否支持切分对于mapreduce处理非常重要,如1GB的压缩文件,分16个数据块存放,若压缩算法不支持切分,则map任务独立于其他任务进行数据读取是行不通的。[CompressionCodecFactory,,CodecPool]

conf.setBoolean("mapred.output.compress", true);
conf.setCalss("mapred.output.compress.codec",GzipCodec.class, CompressionCodec.class);
// mapred.output.compress.type=BLOCK(默认为RECORD)

3. 序列化:将结构化对象转化为字节流,以便在网络上传输或写道磁盘永久存储。

Hadoop中,系统结点上进行间的通信通过RPC实现的,其将消息序列化成二进制流后发送给远程结点,远程节点将二进制流反序列化成员是消息。

Writable接口定义了write(DataOutput)和readFields(DataInput)两个方法;WritableComparable接口继承至Writable和Comparable接口,MapReduce中的key均需要实现该接口;

Writable类:org.apache.hadoop.io中,包括Java基本类型的Writable封装器(如Text,NullWritable,ObjectWritable)以及集合类(ArrayWritable,TwoDArrayWritable,MapWritable,SortedMapWritable)

Apache Avro是独立于变成语言的数据序列化系统,旨在解决Writable类型的不足:缺乏语言的可以执行。

4. 基于文件的数据结构:SequenceFile + MapFile(排好序的SequenceFile,已加入用于搜索间的索引)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值