大数据学习三-分布式文件系统HDFS

3.1分布式文件系统

3.1.1分布式文件系统的结构

分布式文件系统也采用了块的概念,块是数据读写的基本单元,只不过分布式文件系统的块要比操作系统中的块大很多。
HDFS默认的块的大小是64MB。与普通文件不同的是,在分布式文件系统中,如果一个文件小于一个数据块的大小,它并不占用整个数据块的存储空间
分布式文件系统在物理结构上是由计算机集群中的多个节点构成的,他们分为两类:一类叫‘主节点’也被称为名称节点;另一类叫’从节点‘也叫数据节点。
名称节点负责文件和目录的创建、删除、重命名等,同时管理着数据节点和文件块的映射关系,因此客户端只有访问名称节点才能找到请求的文件块所在位置,进而到相应位置读取所需文件块。
数据节点负责数据的存储和读取,在存储时,由名称节点分配存储位置,然后由客户端把数据直接入相应数据节点
大规模文件系统的整体结构

3.2HDFS体系结构

3.2.1 概述

HDFS采用了主从结构模型,一个HDFS集群包括一个名称节点和若干个数据节点。名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。每个数据节点会周期性地向名称节点发送“心跳”信息,报告自己的状态,没有按时发送心跳信息的数据节点会被标记为“宕机”,不会再给它分配任何I/O请求

3.2.2HDFS命名空间管理

HDFS的命名空间包含目录、文件和块。命名空间管理是指命名空间支持对HDFS中的目录、文件和块做类似文件系统的创建、修改、删除等基本操作。在当前的HDFS体系结构中,在整个HDFS集群中只有一个命名空间,并且只有唯一一个名称节点,该节点负责对这个命名空间进行管理。

3.2.3通信协议

HDFS是一个部署在集群上的分布式文件系统,因此很多数据需要通过网络进行传输。所有的HDFS通信协议都是构建在TCP/IP协议基础之上的。客户端通过一个可配置的端口向名称节点主动发起TCP连接,并使用客户端协议与名称节点进行交互。名称节点和数据节点之间则使用数据节点协议进行交互。客户端与数据节点的交互是通过RPC来实现的。

3.2.4 客户端

客户端是用户操作HDFS最常用的方式,HDFS在部署时都提供了客户端。严格来说,客户端不是HDFS的一部分。客户端可以支持打开、读取、写入等常见操作的操作。

3.2.5HDFS体系结构的局限性

1.命名空间的限制,名称节点能够容纳对象的个数会收到内存空间大小的限制
2.性能的瓶颈,整个分布式文件的吞吐量受限于单个名称节点的吞吐量
3.隔离问题,由于集群中只有一个名称节点,只有一个命名空间,因此无法对不同的程序进行隔离
4.集群的可用性,一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用

3.3 HDFS的存储原理

3.3.1 数据的冗余存储

作为一个分布式文件系统,为了保证系统的容错性和可用性,HDFS采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上,如下图所示。
HDFS数据块多副本存储
这种多副本方式具有以下3个优点:
1.加快数据传输速度
2.容易检查数据错误
3.保证数据的可靠性

3.3.2数据存取策略

1.数据存放
为了提高数据的可靠性与系统的可用性,以及充分利用网络带宽,HDFS采用了以机架为基础的数据存放策略。一个HDFS集群通常包含多个机架,不同机架之间的数据通信需要经过交换机或者路由器。
HDFS默认每个数据节点都是在不同的机架上,这种方法会存在一个缺点,那就是写入数据的时候不能充分利用同一机架内部机器之间的带宽。但是,与这点缺点相比,这种方法带来了很多优点:首先,可以获得很高的数据可靠性,即使一个机架发生故障,位于其他机架上的数据副本仍然可以使用;其次,在读取数据的时候,可以在多个机架上并行读取数据,大大提高了数据读取速度;最后,可以更容易地实现系统内部负载均衡和错误处理
HDFS默认地冗余复杂因子是3,每一个文件块会被同时保存到3个地方,其中,有两份副本放在同一个机架地不同机器上面,第三个副本放在不同机架的机器上面,这样既可以保证机架发生异常时的数据恢复,也可以提高数据读写性能。一般而言,HDFS副本的放置策略
(1)如果是在集群内发起写操作请求,则把第一个副本放置在发起写操作请求的数据节点上,实现就近写入数据。如果是来自集群外部的写操作请求,则从集群内部挑选一台磁盘不太满、CPU不太忙的数据节点,作为第一个副本的存放地。
(2)第二个副本会被放置在与第一个副本不同的机架的数据的节点上。
(3)第三个副本会被放置在与第一个副本相同的机架的其他节点上。
(4)如果还有更多的副本,则继续从集群中随机选择数据节点进行存放。
2.数据读取
HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID。当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,列表包含了副本所在的数据节点,可以调用API来确定客户端和这些数据节点所属的机架ID当发现某个数据块副本对于的机架ID和客户端对应的机架ID相同时,就优先选择该副本读取数据,如果没有发现,就随机选择一个副本读取元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值