一、大数据技术基础——分布式文件系统HDFS

目录

1.引入

1.1.传统存储系统面临的难题

1.2.解决之道

2.Hadoop集群架构

3.HDFS 1.0

3.1.概念

3.2.Block块

3.3.NameNode维护文件:fsimage与editlog

3.4.DataNode

3.5.HDFS1.0架构的局限性

3.6. SecondaryNamenode

4.HDFS2.0

4.1.HA架构

4.2.联邦架构

5.HDFS读写入数据流程 

5.1.写入数据流程

5.2.读取数据流程

5.3.HDFS的存储机制

5.3.1.HDFS数据副本放置策略

5.3.2.HDFS的异构存储

6.HDFS常用命令

7.补充:对象存储服务OBS


1.引入

1.1.传统存储系统面临的难题

① 海量数据存储,如何统一管理和统一调度
② 大容量并发读写,设备性能成为瓶颈
③ 设备故障须及时修复,维护成本激增
④ 不同的应用系统间数据难以融合

1.2.解决之道

① 提供分布式文件系统,数据调度与存储分离
② 将单打独斗升级为团队作战
③ 由及时维护转变为定期维护
④ 将各种数据融合,提供统一接口

2.Hadoop集群架构

                        图2-1 Hadoop集群架构

NameNode和DataNode为存储节点(HDFS)     JobTracker和TaskTracker为计算节点(MapReduce)

NameNode存储元数据,管理文件系统的命名空间(包括文件目录组织、属性维护、访问控制信息、文件操作日志记录、文件到块的映射信息、块当前所在的位置等),DataNode存储实际的数据。

JobTracker将任务拆分为多个小的任务,TaskTracker完成分配到的小任务。

3.HDFS 1.0

3.1.概念

        HDFS是一种可以运行在低廉的设备组成的集群上,并且是通过 流式数据访问 的方式进行 超大文件 存储的分布式文件(存储管理)系统。

                                          图3-1  HDFS的结构

        HDFS通常的部署是NameNode程序单独运行于一台服务器节点上(主服务器),其余的服务器节点每台运行一个DataNode程序。

3.2.Block块

        物理磁盘中有块的概念,磁盘的物理Block是磁盘操作最小的单元,读写操作均以Block为最小单元,一般为512 Byte。
        文件系统在物理Block之上抽象了另一层概念,文件系统Block物理磁盘Block的整数倍,通常为几KB。    
        HDFS的Block块比一般单机文件系统大得多,默认为64MB。(从2.7.3版本开始,blocksize由默认64 MB变成128 MB)。

                                 图3-2 名称节点和数据节点

3.3.NameNode维护文件:fsimage与editlog

        NameNode存在内存中,当断电后就丢失,因此也要进行持久化存储。

        fsimage就是在某一时刻,整个HDFS的快照,就是这个时刻HDFS上:所有的文件块和目录,分别的状态,位于哪些个DataNode ,各自的权限,各自的副本个数。

        Editlog记录客户端对HDFS所有的更新操作,比如说移动数据,或者删除数据。

        NameSpace镜像文件(fsimage),操作日志文件(edit log)这些信息被Cache在RAM内存中,这两个文件也会被持久化存储在本地硬盘。

        比如,在1:00:00时刻记录了一个快照fsimage,那么从1:00:00到1:59:59期间的所有对HDFS更新的操作都会记录在editlog中。当NameNode发生故障时,重启服务器,Fsimage加上Editlog的数据就会恢复元数据。

3.4.DataNode

        每个DataNode会周期性的向Namenode发送心跳消息,报告自己所在DataNode的使用状态和block信息。

  • 如果在一定时间后还接受不到DN的心跳,那么NN认为DN已经宕机 ,这时候NN准备要把DN上的数据块进行重新的复制。
  • DN还会向NN发送当前节点的使用状态以便NN进行DN选择策略。

        两种策略类型:轮询(round-robin)和可用空间(available space ):

        ①轮询策略在可用磁盘上均匀分配新块。
        ②可用空间策略优先将数据写入具有最多可用空间(按百分比)的磁盘。
  • DN向NN发送Block信息:有可能DN上的数据块会被修改,需告知NN会进行相应的同步修改。

3.5.HDFS1.0架构的局限性

                              表3-1 HDFS 1.0和HDFS 2.0架构对比

隔离的问题
         由于HDFS仅有一个NameNode,无法隔离各个程序,因此HDFS上的一个实验程
序就很有可能影响整个HDFS上运行的程序。
性能的瓶颈
        由于是单个NameNode的HDFS架构,因此整个HDFS文件系统的吞吐量受限于单
个NameNode的吞吐量。

3.6. SecondaryNamenode

Hadoop1.x中的NameNode容错机制:
NameNode节点断电,可以合并FsImage和editlog,合成元数据。
存在问题:
  1. 长时间添加数据到editlog中,会导致该文件数据过大,效率降低。
  2. 恢复元数据时间过长。
  3. NameNode节点完成,效率过低。

        因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和editlog的合并

  •  SecondaryNamenode不是NN的备份节点而是助手节点。通常,SecondaryNamenode 运行在一个单独的物理机上,因为合并操作需要占用大量的CPU时间以及和Namenode相当的内存。
  • 触发SecondaryNameNode的CheckPoint的两个机制:定时时间到、edit log中数据写满;

                                                图3-3 SecondaryNamenode工作流程

NameNode在启动时就只需要加载之前未合并的Edits和Fsimage即可,因为合并过的Edits中的元数据信息已经被记录在Fsimage中。

4.HDFS2.0

包括高可用HA和HDFS Federation联邦。

4.1.HA架构

        HDFS2.0采用了HA(High Availability,高可用)架构。在HA集群中,一般设置两个NN,其中一处于“活跃(Active)”状态,另一个处于“待命(Standby)”状态。
                                                                图4-1 HDFS高可用架构
Zookeeper负责保持系统的一致性,当活跃的NN故障,由Zookeeper进行工作的交接。

4.2.联邦架构

        设计多个相互独立的NN,使得HDFS的命名服务能够水平扩展,这些NN分别进行各自命名空间和块的管理,不需要彼此协调。
        每个DN要向集群中所有的NN注册,并周期性的发送心跳信息和块信息,报告自己的状态。

                                                                图4-2 HDFS联邦架构 

Block pool(块池)就是属于单个命名空间的一组block(块)
每个DN会为多个块池提供块的存储块池中的各个块实际上是存储在不同DN中
DN是一个物理概念,而block pool是一个重新将block划分的逻辑概念

5.HDFS读写入数据流程 

5.1.写入数据流程

                                                        图5-1 HDFS写入数据流程 

5.2.读取数据流程

而读取文件的时候,NN尽量让client读取离它最近的DataNode上的副本,降低带宽消耗和读取时延。

                                                         图5-2 HDFS读取数据流程

5.3.HDFS的存储机制

5.3.1.HDFS数据副本放置策略

                        图5-3 当副本系数是3时的HDFS数据副本放置情况

        数据块的第一个副本先放置在本地机架上的一个节点上,然后第二个副本放置在同一个机架的另一节点上,之后第三个副本放在另外的机架上的节点上。

5.3.2.HDFS的异构存储

        Hadoop 从 2.4 后开始支持异构存储:

  • 经常被计算或者读取的热数据为了保证性能需要存储在内存。
  • 当一些数据变为冷数据后不经常会用到的数据会变为归档数据,可以使用大容量性能要差一些的存储设备来存储来减少存储成本。
        ①RAM_DISK内存 :内存镜像文件系统(实时)
        ②SSD固态硬盘:SSD 盘(常读)
        ③DSIK磁盘: 普通磁盘(平常)
        ④ARCHIVE高密度存储介质 :归档(价值不大,但不能丢弃的数据。)
六个预配置的存储策略:
  • Lazy_persist:一个副本保存在内存RAM_DISK中,其余副本保存在磁盘DISK中;将副本写入RAM_DISK,然后缓慢的持久化到DISK。
  • ALL_SSD:所有副本都保存在SSD中。
  • Hot: 存储和计算都热; 所有副本保存在磁盘中,这也是默认的存储策略。
  • One_SSD:一个副本保存在SSD中,其余副本保存在磁盘DISK中。
  • Warm: 半冷半热; 一个副本保存在DISK磁盘上,其余副本保存在ARCHIVE归档存储上。
Cold: 用于有限计算的存储; 所有副本都保存在归档存储上。

                                                  图5-4 HDFS的LAZY_PERSIST内存存储

这样做的好处是,满足我们大部分情况是新数据更容易被读取使用。

注意:HDFS一次写入,多次读取;文件一旦写入 不能修改 只能追加

6.HDFS常用命令

        配置好Hadoop集群之后,可以通过浏览器登录“http://[NameNodeIP]:50070”访问HDFS文件系统。

        hadoop fs适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统。
        hadoop fs适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统。
        hdfs dfs跟hadoop dfs的命令作用一样,也只能适用于HDFS文件系统。
hadoop fs -ls <path>:显示<path>指定的文件的详细信息
hadoop fs -mkdir <path>:创建<path>指定的文件夹
hadoop fs -cat <path>:将<path>指定的文件的内容输出到标准输出(stdout)
hadoop fs -copyFromLocal <localsrc> <dst>:将本地源文件<localsrc>复制到路径<dst>指定的文件或文件夹中

7.补充:对象存储服务OBS

桶是OBS中存储对象的容器, 每个桶都有自己的存储类别、访问权限、所属区域等属性,用户在互联网上通过桶的访问域名来定位桶。
对象是OBS中数据存储的基本单位 ,一个对象实际是一个文件的数据与其相关属性信息的集合体,包括Key、Metadata、Data三部分。
OBS提供了数据湖的概念,即将各种类型的数据都存储在某一个桶中,存储的时候不关心将来需要怎么计算,而我们算的时候再根据各个接口提取出数据进行计算。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值