Cloudera Hadoop大数据平台实战指南
上QQ阅读APP看书,第一时间看更新

4.1 HDFS简介

HDFS(Hadoop Distributed Filesystem, Hadoop分布式文件系统)以流式数据访问模式来存储超大文件,运行在由廉价普通机器组成的集群上,是管理网络中跨多台计算机存储的文件系统。它的基本原理是将文件切分成同等大小的数据块,存储到多台机器上,将数据切分、容错、负载均衡等功能透明化。

HDFS上的文件被划分为相同大小的多个block块,以块作为独立的存储单位(称为数据块)。为什么要弄成块来存储?第一,大文件用一个节点是存不下来的,势必分成块;第二,网络传输时万一宕掉,可以小部分重传;第三,简化了存储管理,同时元数据就不需要和块一同存储了,用一个单独的系统就可以管理这些块的元数据。所以block块是HDFS中最基本的存储单位。一个文件Hadoop 2.x版本的HDFS块默认大小是128MB(Hadoop 1.X版本默认块大小是64MB)。默认块大小是可以修改的,可以通过dfs.block.size设置。

除了将文件分块,每个块文件也有副本,这是为了容错性。当一个机器挂了,想要恢复里面的文件,就可以去其他机器找文件的副本。默认是三个副本,也可通过hdfs-site.xml中的replication属性修改副本数量。

HDFS的副本放置策略是将第一个副本放在本地节点,将第二个副本放到本地机架上的另外一个节点,而将第三个副本放到不同机架上的节点。这种方式减少了机架间的写流量,从而提高了写的性能。机架故障的概率远小于节点故障。将第三个副本放置在不同的机架上,这也防止了机架故障时数据的丢失。

总之,HDFS在设计之初就是针对超大文件存储的,小文件不会提高访问和存储速度,反而会降低。其次它采用了流式数据访问,特点是一次写入多次读取。再有就是它运行在普通的标准硬件(如PC服务器)之上,即使硬件故障,也可以通过副本冗余容错机制来保证数据的高可用。