hadoop之HDFS架构详解

本文详细介绍了Hadoop的分布式文件系统HDFS的架构、存储策略以及高可用方案。HDFS适用于存储超大文件,具备流式数据访问、低成本、高吞吐率和高容错等特点。内容涵盖文件存储步骤、NameNode和DataNode的角色、写入和读取流程,以及NameNode的高可用性,包括主备切换和防止脑裂现象的策略。
摘要由CSDN通过智能技术生成

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的总体架构

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值