HDFS的读写背后
Posted 阿木公的阳小山
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS的读写背后相关的知识,希望对你有一定的参考价值。
Q 什么是数据分包?
我们前面提过,HDFS是面向块(block)存储的,一个block的大小是128M,分包就是将数据切分为大小为128M的数据分片。这种块为单位的存储方式有两个好处:
减少NameNode中的元数据数量。所以我们可以联想到,HDFS不适合存储大量小文件,因为小文件是造成NameNode中的元数据爆炸增长。
提高寻址速度。HDFS以块为单位进行寻址,在一个拥有海量数据的分布式系统中可以显著提升寻找速度,但是这样的设计会带来的问题就是HDFS不支持随机访问,只支持顺序访问数据。另外,当HDFS中存储小于一个块大小的文件时不会占据整个块的空间,也就是说,1MB的文件存储时只占用1MB的空间而不是128MB。
Q HDFS中的副本放置有什么要求?(副本放置策略)
第一个副本放置在与Client交互的DataNode上;
第二个副本会放置在与第一个副本不同的机架上,这样,就算前一个机架损坏,HDFS中依然存有数据;
第三个副本保存在第二个副本的机架节点上;
其他更多的副本则随机选择节点放置。
Q HDFS中的DataNode数据分布不均,在你读取的时候发现某些节点的负载高怎么办?
调整读取策略。
我们知道,读取数据的时候,HDFS中的DFSInputStream会获得一个排好序的DataNode节点序列,选择排序靠前的节点进行数据传输。我们可以将节点的负载情况也作为排序时候的权重,将负载高的节点放在后面。写入时遇到类似的问题也可以采取相同的办法。
以上是关于HDFS的读写背后的主要内容,如果未能解决你的问题,请参考以下文章