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的读写背后的主要内容,如果未能解决你的问题,请参考以下文章

HDFS读写机制剖析

06Hadoop框架HDFS读写流程

Java操作HDFS开发环境搭建以及HDFS的读写流程

HDFS监控背后那些事儿,构建Hadoop监控共同体

一套很专业的监控方案:HDFS监控落地背后的思考

关于hadoop HDFS进行读写文件操作的问题