了解HDFS的数据存取机制

  • 2019 年 10 月 6 日
  • 筆記

HDFS是大数据存取的基础,很多数据都依赖于HDFS,如HBase数据库。作为Hadoop的基础,HDFS的数据读取机制有很多细节。我们今天来看一下。

一、HDFS的数据存取以机架为单位

HDFS采用以机架(Rack)为基础建议的数据存放单位。

HDFS会将同一个数据源的数据拆分后,放到不同的机架数据节点上。这样做有好处、坏处。坏处是:不能充分利用同一个机架上的内网带宽。但好处也很明显,读取数据时,可以在多个机架并行读取数据,容易实现内部负载均衡。

HDFS默认的冗余复制因子是3,数据默认保存3份。但这些3份数据有2份是在同一个机架的不同机器上面,第3个副本放在了不同机架上面。

二、HDFS的数据读取

客户端需要访问HDFS中存放的数据时,不能像取本地磁盘文件这样直接,需要通过HDFS API。客户端通过API从NameNode获取到数据的存放位置,该存放位置是三份不同副本的位置列表。API会优先选择与客户端位置机架ID相同的副本进行数据读取,否则就随机选择一个副本读取数据。

三、 HDFS的数据复制有云计算的理念存在

HDFS的数据复制采用了流水线复制的策略,大大提高了数据复制过程的效率。当客户端需要向HDFS中写入一个文件时,这个文件会首先被写入本地,并按HDFS设置切块(默认为128MB一块)。每个块都向HDFS的NameNode节点发起写请求,客户端把数据写入第一个DataNode节点,第一个节点写成功向再写入第二个节点,依次类推。形成了流水线作业,避免客户端同时向三个节点写数据,造成的数据延迟及客户端压力的增加。

四、HDFS有不适合干的活

1、低延迟的数据访问不合适

如ms秒级的应用,不适合用HDFS。HDFS每访问都需要经过NameNode查询数据的所在,增加了访问时间。

2、小文件不适合

文件的元数据(目录结构)全部存在NameNode内存中,如文件太小,文件数据量过多,则造成NameNode的内存空间难以支持。

五、HDFS最合适的场景

1、冷数据的访问

HDFS利用x86的低廉价格进行数据存取,一般用于放非实时数据。

2、大文件非常合适

HDFS的Block默认为128MB。如果一个文件大小为1MB,则在HDFS只会占用1MB。如果一个大文件,如1GB的文本文件,会被拆分成8份,放到不同的数据节点中,取数据是8份数据同时取。同时在利用mapreduce计算时,也是8份数据同时计算。