当前位置:   article > 正文

hadoop之HDFS架构详解_hadoop上轮询策略还有什么

hadoop上轮询策略还有什么

HDFS是hadoop的三驾马车之一,是一种大规模分布式文件存储系统。

 

使用HDFS存储的场景是:当数据集大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区,并存储到若干台独立的计算机上。

 

HDFS的设计特点:

• 超大文件

• 流式数据访问

• 低成本

• 数据一致性

• 高吞吐率

• 易扩展

• 高容错

 

下面我们解剖一下HDFS的设计实现,来分析HDFS是如何体现其特点的。

(说明:以下内容 基于 hadoop v2.7.7)

提醒:本次内容有点多,是后续hadoop学习的基础,是从原理上了解什么是大数据的基础,必须努力啃下这块无聊的硬骨头

 

 

如果觉得这篇文章对您有帮助,欢迎关注公众号 “学点儿编程”,公众号不断推送干货文章!

 

我们先了解一下HDFS的存储思路,方便理解HDFS的总体架构。

场景:一个大小为10GB的文件,是如何存储到HDFS中的

从HDFS的设计思路上,主要用于解决超大文件的存储(上面图中以存储10GB文件为例)

第一步:在存储前会先对待存储文件进行块切分,上面示例中每块大小是 128MB(每块大小可配置),总共需要切分80块。

第二步:NameNode会记录当前待存储文件的分块信息,并根据DataNode各个节点的存储情况,给出每个数据块的存储位置。

第三步:根据NameNode的分配策略,80个数据块分别存储到对应的DataNode节点,并向NameNode汇报存储结果。

 

说明:

(1)上面示意图只是描述了每个数据块1个副本的存储情况,生产环境中为提高数据的可用性,一般会设置1个以上的副本(默认是3份)。多副本存储思路和上面思路类似。

(2)有朋友估计在想,如果不够128MB的整数倍怎么办。

HDFS的处理思路是,最后一块仍然会作为一个独立的数据块,但磁盘的实际占用以最后一块实际大小为准。

(3)每个DataNode可指定1个或多个磁盘目录,当指定多个磁盘目录时,随着写入数据越来越多,容易出现各目录下数据不均衡的问题。为避免不均衡问题,可参考以下配置策略:

  • 多目录配置方法

<property><name>dfs.datanode.data.dir</name><value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value></property>
  • hadoop写入文件有两种策略:

        1. 轮询方式(默认) 

               RoundRobinVolumeChoosingPolicy

        2. 根据可用空间的大小来判断写入 

               AvailableSpaceVolumeChoosingPolicy

       通过以下参数来设置使用哪种策略来写入(下面配置是采用策略2)

<property>    <name>dfs.datanode.fsdataset.volume.choosing.policy</name>    <value>org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy</value>  </property>
  • 写入策略选择建议:

       如果每个目录的大小是一样的,可使用默认策略;

       如果各个目录大小不一致,避免小磁盘使用率过高,使用策略2。

 

 

了解了HDFS的存储思路后,下面咱们分析一下HDFS的总体架构

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/917799
推荐阅读
相关标签
  

闽ICP备14008679号