HDFS存储机制

1.HDFS 概念

  • HDFS(Hadoop Distributed File
    System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。集群不一定是分布式的,但是分布式一定是集群。
  • HDFS 的设计适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据 分析,并不适合用来做网盘应用。

2.HDFS 优缺点

1.优点
(1) 高容错性

a) 数据自动保存多个副本。它通过增加副本的形式,提高容错性;
b) 某一个副本丢失以后,它可以自动恢复。

(2) 适合大数据处理

a) 数据规模:能够处理数据规模达到 GB、TB、甚至 PB 级别的数据。
b) 文件规模:能够处理百万规模以上的文件数量,数量相当之大。

(3) 可构建在廉价机器上,通过多副本机制,提高可靠性。
2.缺点
(1) 不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
(2) 无法高效的对大量小文件进行存储。

a) 存储大量小文件的话,它会占用 NameNode 大量的内存来存储文件、目录和块信
息。这样是不可取的,因为 NameNode 的内存总是有限的。
b) 小文件存储的寻址时间会超过读取时间,它违反了 HDFS 的设计目标。

i. 寻址时间,目前技术水平在 10ms 左右
ii. 传输
寻址时间/传输时间=1%,传输时间 1000ms=1s,磁盘传输速度 100M/S,计算机是2的n次方,所以 hadoop2.x 默认块的大小为 128M。
(3) 不支持并发写入、文件随机修改。

a) 一个文件只能有一个写,不允许多个线程同时写;
b) 仅支持数据 append(追加),不支持文件的随机修改。

3.HDFS 组成架构

架构主要由四个部分组成,分别为 HDFS Client、NameNode、DataNode 和 Secondary
NameNode。下面我们分别介绍这四个组成部分。

(1) Client:就是客户端。

a) 文件切分。文件上传 HDFS 的时候,Client 将文件切分成一个一个的 Block,然后
进行存储;
b) 与 NameNode 交互,获取文件的位置信息;
c) 与 DataNode 交互,读取或者写入数据;
d) Client 提供一些命令来管理 HDFS,比如启动或者关闭 HDFS;
e) Client 可以通过一些命令来访问 HDFS。

(2) NameNode:就是 Master,它是一个主管、管理者。

a) 管理 HDFS 的名称空间;namespace
b) 管理数据块(Block)映射信息;
c) 配置副本策略(默认):3

     <property><!-- 指定datanode存储block的副本数量,最小值为3,否则会影响到数据的可靠性 -->
       <name>dfs.replication</name>
       <value>3</value>
     </property>

d) 处理客户端读写请求。

(3) DataNode:就是 Slave。NameNode 下达命令,DataNode 执行实际的操作。

a) 存储实际的数据块;
b) 执行数据块的读/写操作。

(4) SecondaryNameNode:并非 NameNode 的热备。当 NameNode 挂掉的时候,它并不

能马上替换 NameNode 并提供服务。
a) 辅助 NameNode,分担其工作量;
b) 定期合并 fsimage 和 Edits,并推送给 NameNode;
c) 在紧急情况下,可辅助恢复 NameNode。

4.HDFS存储

在hdfs中所有的文件都是以 block 块的方式存放在 HDFS 文件系统当中, 在 Hadoop1当中, 文件的 block 块默认大小是 64M, hadoop2 当中, 文件的 block块大小默认是 128M, block 块的大小可以通过 hdfs-site.xml当中的配置文件进行指定:

<property>
        <name>dfs.block.size</name>
        <value>块大小 以字节为单位</value>//只写数值就可以 默认:134217728B,即128MB
</property>
  • 引入块机制的好处:
    一个文件有可能大于集群中任意一个磁盘,使用块抽象而不是文件可以简化存储子系统
    块非常适合用于数据备份进而提供数据容错能力和可用性
  • 块缓存:
    通常 DataNode 从磁盘中读取块, 但对于访问频繁的文件,其对应的块可能被显式的缓存在 DataNode 的内存中, 以堆外块缓存的形式存在.默认情况下,一个块仅缓存在一个 DataNode的内存中,当然可以针对每个文件配置 DataNode 的数量.作业调度器通过在缓存块的 DataNode 上运行任务,可以利用块缓存的优势提高读操作的性能.

例如一个文件 130M, 会被切分成 2 个 block 块, 保存在两个 block 块里面,实际占用磁盘 130M 空间, 而不是占用256M的磁盘空间,事实上,128只是个数字,数据超过128M,便进行切分,如果没有超过128M,就不用切分,有多少算多少,不足128M的也是一个块。这个块的大小就是100M,没有剩余28M这个概念。

文件不够一个块的大小时,也单独占用一个块,两个文件不会共用一个块。
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值