HDFS学习(一)架构和原理
博客专区 > dkpenl 的博客 > 博客详情
HDFS学习(一)架构和原理
dkpenl 发表于3个月前
HDFS学习(一)架构和原理
  • 发表于 3个月前
  • 阅读 9
  • 收藏 0
  • 点赞 0
  • 评论 0

       hdfs是大数据系统的基础,它提供了基本的存储功能,由于底层数据的分布式存储,上层任务也可以利用数据的本地性进行分布式计算。hdfs思想上很简单,就是namenode负责数据存储位置的记录,datanode负责数据的存储。使用者client会先访问namenode询问数据存在哪,然后去datanode存储;写流程也基本类似,会先在namenode上询问写到哪,然后把数据存储到对应的datanode上。所以namenode作为整个系统的灵魂,一旦它挂掉了,整个系统也就无法使用了。在运维中,针对namenode的高可用变得十分关键。

一、HDFS设计目标

     A、Very large files

     B、Streaming data access

           ◦write-once, read-many-times

    C、Commodity hardware

   大致意思是说(英语太烂,翻译不好请见谅):当文件非常大,对文件操作需要的是一次写多次读取的操作模式,并且适合在商用硬件上做分布式存储和计算时,就用HDFS。

二、不适合的场景

    A、Low-latency data access

    B、Lots of small files

    C、Multiple writers, arbitrary file modifications

    大致意思是说:当我们的应用需要低延迟的访问数据(如:银行对实时交易数据的监控),当我们的文件都是大量的小文件时,当我们对文件多次读写频繁修改时,在这些场景下不适合使用HDFS。

三、基本原理

a、数据分布

     在Hadoop中,一个文件被划分成大小固定的多个文件块,分布的存储在集群中的节点中。假设有一个 600G的文件a.txt,由于我们的Hadoop默认一个块的大小是64M可修改HDFS的配置文件从而修改块的大小,在不同的场景下需要调整块的大小以达到优化的目的, 请大家在网上查阅相关资源,这里不再展开说明了。),故将这600G文件以64M为一块分别存储到所有的集群的主机上,这样我们的读取速度将会大大提高。

b、数据冗余

       同一个文件块在不同的节点中有多个副本,这样当集群里某一文件块损坏或者数据丢失时,会在另外一个节点得到补充。另外这些副本和原本都是在一个配置文件里配置的,Hadoop会根据配置信息自动寻找备份的内容块。比如下图我们通过HDFS的配置文件,将一个文件块保存3个副本,那么它将分别保存到3台服务器中。而且如果这3台服务器坏掉一个后,HDFS发现副本少于3个,那么它会自动在集群中(假设不只这3台服务器)的其它服务器中再创建一个副本。

c、文件信息的保存

    我们在HDFS中保存的一个文件,它分成了几块,每个块有几个副本,每个副本保存在什么位置,这些信息在HDFS中是通过namenode文件来保存的,如下图:

我们的a.txt文件分成了3块:part1、part2、part3,每个块分成了3个副本,副本的位置如dn1,dn2,dn3。我们对HDFS文件的读写,首先都是通过读取namenode文件中保存的这些信息,才知道从哪里读取文件,将文件写到哪里。

四、HDFS的架构

     HDFS的架构如下图所示,需要注意的是,我们对HDFS的读写都是通过了namenode,并且在hdoop1.0中namenode是单节点设计,一旦namenode节点的服务器无法访问,那么整个HDFS都无法使用,所以为了保证HDFS的可靠性,在hdoop2.0中做了namenode的HA,即HDFS可配置为多个。

五、总结

  Block:一个文件分块,默认64M,可配置大小。

  NameNode:保存整个文件系统的目录信息,文件信息以及文件相应的分块信息。

  DataNode:  用于存储Blocks

  HDFS的HA策略:NameNode一旦宕机,整个文件系统将无法工作。

                            如果NameNode中的数据丢失,整个文件系统也就丢失了。

                            2.x开始,HDFS支持NameNode的active-standy模式

                            NameNode HA:支持NameNode的active-standy模式

                            HDFS Federation:支持多个NameNode,分担数据压力

 

 

 

共有 人打赏支持
粉丝 2
博文 7
码字总数 7156
×
dkpenl
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: