当前,数字信息急剧膨胀。根据IDC的研究结果,2011年创造的信息数量达到1800EB,每一年产生的数字信息量还在以60%的速度高速增加,到 2020年,全球每一年产生的数字信息将达到35ZB。面对海量数据处理的需求,“大数据”这一新的概念应运而生。关于大数据的定义,目前尚未标准的说 法。node
Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。HDFS有着高容错性(fault-tolerent)的特色,而且设计用来部署在低廉的(low- cost)硬件上。并且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样能够实现流的形式访问(streaming access)文件系统中的数据。HDFS开始是为开源的apache项目nutch的基础结构而建立,HDFS是hadoop项目的一部分,而 hadoop又是lucene的一部分。算法
HDFS设计的针对对象主要适合流式访问的超大文件、在使用便宜的硬件搭建的集群上运行。HDFS中Block的大小默认是64M,小于块大小的的文件并不占据整个块的所有空间(一个块可能存有多个文件)。apache
在谈到为何使用百度HDFS集群的数据压缩时,孙桂林表示,在存储上带来了灵活的可扩展性、高可用性、充分提升了存储空间利用率。异步
使用Blocks的好处:分布式
1) 能够存储大文件,一个文件的大小能够大于任何一个单块硬盘的容量oop
2) 把存储单元抽象成块而不是文件,简化了存储子系统:简化了数据管理、取消元数据关注大数据
3) 能很好适应数据复制,数据复制保证系统的容错和可用性。ui
HDFS提供了两种namenode的容错机制:编码
1) 备份存储持久化状态的文件系统元数据的文件spa
2) 提供secondary namenode。Secondary的主要角色是合并namespace image和edit log,防止edit log过大。可是secondary namenode的数据较master namenode的数据有所延迟,全部数据恢复之后确定会有数据丢失。
通常来说,冷数据和老数据常常会被压缩,块压缩相对于文件压缩的优点在于三方面。第一,透明性,客户端不须要知道压缩的存在,也不须要知道升级。第二,灵活性,对实际压缩的算法没有限制。第三,本地性,不须要在跨数据节点的压缩操做。
百度HDFS集群的数据压缩
提到异步压缩时,孙桂林表示,一个集群能从未压缩的状态变成压缩状态最多花费十天,若是压缩的数据很繁琐,咱们能够经过处理器来减轻CPU的负载。
存储压缩的机制
DataNode数据已经压缩了,Client可能不知道,DataNode 在响应Client的时候回将数据解压。
Client 和DataNode之间能够经过压缩的机制。整个通讯协议须要一些扩展,须要告诉写方,咱们所须要压缩的文件格式以及什么样的编码。在写的操做上,存储编码和传输编码不同,咱们能够选择是否压缩储存和传输编码。在读的操做上,支持一些协议来进行转换。
为了节省带宽,咱们尽可能避免DataNode 和DataNode之间重复压缩的问题。在Append以前咱们须要解压最后的块,仍是解压最后一兆数据。一旦文件被Append以后,表示这个文件的最 后一个块不被压缩。在压缩的时候,首先咱们须要选择压缩速率,相对而言解压的速度更为关键。咱们的目标是要实现节省存储空间、避免压缩影响计算做业,实时 压缩透明。
如何处理小文件
一、 把小文件变成大文件(归档操做)
二、 把相同目录下的小文件合成一个大文件。数据块的大小能够达到一个数量级,能够作压缩处理。
不一样的集群,压缩比部太同样,压缩比介于10%到50%之间,大部分的集群咱们均可以获取50%以上的空间收益。
将来,咱们主推的是后台异步压缩,等待CPU空闲的时候,咱们才会开始压缩。压缩过程和压缩编码彻底透明,咱们能够采用分级压缩方法。对于冷数据,咱们可使用一些极致的压缩算法,尽可能来节省空间。经过一些归档操做,咱们能够节省大量的磁盘空间。
不少时候,咱们A模块的输出数据恰好是B模块的输入,咱们能够提供一个块共享的Quota Calculating ,咱们能够经过块共享的机制使用快速拷贝。
一个文件若是存在的时候,对于一些重复的块文件该怎么处理,这将是咱们将来的发展方向。