1.hdfs概述

1.介绍

在现代的企业环境中,单机容量往往无法存储大量数据。统一管理分布在集群上的文件系统统称为分布式文件系统。

HDFS(Hadoop Distributed File System)是Apache Hadoop项目的一个子项目。Hadoop非常适合于存储大型数据(比如TB和PB),其就是使用HDFS作为存储系统。HDFS使用多台计算机存储文件,并且提供统一的访问接口,像是访问一个普通文件系统一样使用分布式文件系统。

image-20211012150255295

2 历史

image-20211012145902165

2. HDFS应用场景

1. 适合的应用场景

image-20211012150111085

2. 不适合的应用场景

image-20211012150553545

3. HDFS的架构

HDFS是一个主/从(Master/Slave)体系结构

HDFS由四部分组成:

  1. HDFS Client(HDFS客户端)
  2. NameNode(HDFS主节点)
  3. DataNode(从节点)
  4. Secondary NameNode(对namenode做一些辅助性管理)

image-20211012151116121

  1. Client:就是客户端

    image-20211012151411609

  2. NameNode:就是master,它是一个主管、管理者

    image-20211012152756059

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

    image-20211013141541104

  4. Secondary NameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务

    image-20211013141828748

4. NameNode和DataNode

1. Namenode作用

  • NameNode在内存中保存着整个文件系统的名称、空间和文件数据块的地址映射
  • 整个HDFS可存储的文件数受限于NameNode的内存大小

image-20211013142717151

2. DataNode作用

提供真实文件数据的存储服务

  1. DataNode以数据块的形式存储HDFS文件
  2. DataNode响应HDFS客户端读写请求
  3. DataNode周期性向NameNode汇报心跳信息
  4. DataNode周期性向NameNode汇报数据块信息
  5. DataNode周期性向NameNode汇报缓存数据块信息

5. HDFS的副本机制和机架感知

1. HDFS文件副本机制

image-20211013150644596

一个数据块一般放3个副本,在hdfs-site.xml中可以设置

image-20211020130646363

2. 机架(rack)感知

HDFS分布式文件系统的内部有一个副本存放策略:以默认的副本数=3为例:

如果客户端和当前主机在同一个机架里面,会在客户端所在机架挑选一台主机,存放block作为第一个副本;然后在同一个机架上挑选另一台主机存放第二个副本;第三个会在本机架以外再挑选一个机架和服务器,存放第三个副本

6. hdfs的命令行使用

image-20211020132248968

image-20211020133025293

image-20211020133411123

image-20211020133602788

image-20211020133708906

image-20211026083251498

image-20211026083517800

image-20211026083622244

image-20211026083858330

  • hadoop:hadoop前一个是指的用户名,后一个是所属用户组

image-20211026090933423

image-20211026091143620

7.hdfs的高级使用命令

HDFS文件限额配置

image-20211026091949408

  1. 数量限额

    image-20211026092018702

  2. 空间大小限额

    56328-flzph6yvszd.png
      43943-0tcgvlf5zo69.png

  注意:在给空间设置大小时,数字必须是一个block_size的大小乘以3(1283=384),所以至少是384M;129M的文件需要768M,因为129M会被切成两个block,每个block又需要三个副本,1286=768

  1. hdfs的安全模式

20998-1qzwdgivly5.png

48317-ia16qm2f6x9.png

8. hdfs基准测试

实际生产环境当中,hadoop的环境搭建完成之后,第一件事情就是进行压力测试,测试我们的集群的读取和写入速度,测试我们的网络带宽是否足够一些基准测试

  1. 测试写入速度

43154-f5g31p9tith.png

28317-8e9hcyoqpnh.png

17452-8k7805em23p.png

  1. 测试读取速度

19532-8ud5zk0hzqw.png

48881-w1sat8djzym.png

18488-nej4d12yfue.png

  1. 清除测试数据

44481-spwcgoorvi.png

清除的是hdfs上benchmarks的内容

9. hdfs的文件写入过程

  1. 客户请求上传文件
  2. namenode检测上传权限,看看文件是否已存在
  3. namenode给client发送信息,可以上传
  4. 将文件切分block,请求上传blk1
  5. 根据集群dn上的block信息和机架感知,选出可以上传的三个主机
  6. 返回datanode列表
  7. client和datanode之间建立管道,dn之间建立管道
  8. client向dn传递数据,传递的单位:packet(64k)
  9. datanode收到packet后会进行缓存
  10. 发送应答ack,告诉已收到(3->2, 2->1, 1->client)
  11. 回到4,上传blk2

85195-gihbxduhfok.png

10. hdfs文件的读取过程

  1. client想namenode请求下载文件
  2. namenode权限检查,文件block列表检查,检查那个datanode上有对应的blk,选出每一个block对应的主机列表
  3. 返回block主机列表
  4. client和对应的主机建立管道
  5. 开始数据的读取,读取的单位:packet(64k),三个读操作可以并行进行
  6. 将block进行合并,合并成一个完整的文件

43088-cy9tbr6xfnb.png

11. HDFS的元数据辅助管理

1. 29031-09ayewkw1o4.png

  • fsimage是NameNode的完整的镜像,如果每次都加载到内存生成树装拓扑结构,这是非常耗内存和cpu,所以一般开始时对NameNode的操作都放在edits中
  • fsimage内容包含了NameNode管理下的所有DataNode文件及文件block及block所在的DataNide的元数据信息
  • 随着edits内容增大,就需要在一定时间点和faimage合并

2. SecondaryNameNode如何辅助管理fsimage与edits文件

SecondaryNameNode定期合并fsimage和edits,把edits控制在一个范围内

触发条件(可以通过core-site.xml设置):

  1. 时间:1小时
  2. 文件大小:64M
    04438-1ds6k2f9kc4.png

合并完会将原来的日志文件清空,得到新的fsimage,替换旧的fsimage

57778-wnytljgopjr.png

12. HDFS的高可用机制

03045-hff6rwu1b9m.png

  1. 组件介绍

  ZKfailoverController
    是基于zookeeper

最后修改:2021 年 11 月 26 日
如果觉得我的文章对你有用,请随意赞赏