分布式文件系统HDFS
HDFS是Hadoop的核心组件之一,是一个高容错性和高吞吐量的海量数据存储解决方案。
HDFS以流式数据访问模型来存储超大文件,运行在廉价普通的机器组成的集群上,是管理网络中跨多台计算机存储的文件系统。
它的基本原理是将文件切分成同等大小的数据块存储到多台机器上,将数据切分、容错、负载均衡等功能透明化。
为什么要切分成数据块来存储?
1. 大文件用一个节点存不下来
2. 网络传输时万一宕掉,可以小部分重传
3. 简化了存储管理,同时元数据就不需要和块一同存储了,用一个单独的系统就可以管理这些块的元数据
block(块)是HDFS中最基本的存储单位。Hadoop 2.x 的HDFS默认block大小为128M(1.x是64M)。默认block大小可以修改
dfs.block.size
这是为了容错性,每个块文件都有副本,当一台数据节点挂了,就可以去其他机器找文件的副本。默认是三个副本,可以通过hdfs-site.xml中的replication属性修改副本数量。
副本存放策略:
第一个副本存放在本地节点,第二个副本存放到本地机架上的另外一个节点,第三个副本存放到不同的机架上的节点。
这种方式减少了机架之间的写流量,从而提高写的性能;机架的故障概率低于节点故障,将第三个副本放置不同机架上,这也放置了机架故障时数据丢失。
HDFS在设计之初就是针对超大文件存储,小文件不会提高访问和存储速度反而会降低。其次它采用流式数据访问,特点是一次写入多次读取。