hadoop03-hdfs的由来、组成、优缺点和使用场景

HDFS的由来:

在没有HDFS之前,假如我们要存储大量的学习视频(100T),一台机器是远远无法存储下的,这个时候,我们就需要用多台服务器去存储,并且记录每台服务器就存了哪些视频,方便以后的获取。由于这种操作方式比较繁琐,于是HDFS诞生了,由它来帮我们处理大数据的存储问题。

HDFS的定义:

文件存储系统。通过目录树型结构进行存储和定位文件(和linux存储方式相似)。分布式存储,由多台服务器共同完成存储工作。

HDFS的使用场景:

适合一次写入,多次读出的场景。

不能对已写入的文件进行修改,只能追加!

HDFS的优点:

  1. 高容错性:会自动备份多个副本,有一个副本丢失后,可以用其他的副本进行恢复

  2. 适合处理大数据:

    数据规模:能够处理GB\TB\PB级别的数据

    文件规模:能够处理百万规模以上的文件数据

  3. 可以构建在廉价机器上:·原因就是分布式,可以由多台廉价机器共同存储,通过副本机制,提高数据的可靠性

HDFS的缺点:

  1. 不适合低延时数据访问,比如毫秒级的存储数据

  2. 无法高效的对大量的小文件进行存储

    • NameNode在生产环境一般是128G内存来存储文件,大约一个文件块占用150个字节(不管文件多大,比如10m或10kb,都会占用150个字节),如果存储大量的小文件(比如1kb),很快就会把NameNode占满,非常浪费,所以不建议存储小文件。

    • 128G内存,每个文件块150个字节,大概可以存储9亿个文件。

    • 小文件的存储会导致树非常高,寻址时间会超过读取时间,违反了HDFS的设计目标

  3. 不支持并发写入、不支持文件随机修改

    • 一个文件同时只能有一个线程写,不允许多个线程同时写同一个文件

    • 只允许对数据的追加,不支持修改

HDFS的组成:

  1. NameNode(nn) : master 管理者

    • 管理HDFS的名称空间(所有文件的元数据,存储的位置等信息)

    • 设置副本策略(不同的文件副本设置不同),然后传达给DataNode

    • 管理数据块(block)的映射信息:不同副本的存储地址等信息

    • 处理客户端读写请求:客户端访问,先由NameNode接待进行应答

  2. DataNode:slave。NameNode下达命令,DataNode执行工作。

    • 实际存储数据的数据块

    • 执行数据的读写操作

  3. Secondary NameNode:并非NameNode热备。当NameNode宕机后,它不能马上替换NameNode提供服务

    • 辅助NameNode分担工作,比如定期合并Fsimage(镜像文件)和Edits(日志),并推送给NameNode

    • 在紧急情况下,可辅助恢复NameNode(只是部分恢复,而不是全部)

  4. Client 客户端

    • 文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的文件块。按照NameNode的文件块来分(默认情况下是128m),比如200m文件会切分成128m和72m

    • 与NameNode交互,获取文件的位置信息

    • 与DataNode交互,读取或写入数据

    • Client提供一些命令来管理HDFS,比如NameNode格式化

    • Client可以通过一些命令来访问HDFS,比如对HDFS增删改查的操作

HDFS文件块大小(面试重点)

HDFS中的文件在物理上是分块存储的,块的大小可以通过配置参数 dfs.blocksize来设定,默认是128m

  1. 如果寻址时间约为10ms,即查找到目标black的时间为10ms

  2. 寻址时间为传输时间的1%,则为最佳状态。因此 传输时间 = 10ms / 0.01 = 1000ms = 1s

  3. 目前磁盘的传输速率普遍是100m/s

  4. blick块大小 = 1s * 100m/s = 128m

为什么块的大小,不能设置太小,也不能设置太大?

  1. 如果块设置太小,那么文件切分的份数也就越多,查找寻址的地方也就多,增加寻址时间

  2. 如果块设置太大,文件切分的份数就很少,比如块是200m,文件也是200m,在一个块里面就足以存放,这样的话就无法并行存放,速度慢,同理计算起来也慢

*块设置的大小,主要取决于磁盘的传输速率

posted @ 2022-03-10 23:34  迷路小孩  阅读(392)  评论(0)    收藏  举报