【Hadoop】— HDFS(Hadoop分布式文件系统)

Hadoop — HDFS

Hadoop Distributed File System 是分布式文件管理系统的一种: 用于存储管理(通过目录树来定位)多台机器上的文件.

特点: 适合一次写入 多次读出 不支持文件的修改。适用于做数据分析

HDFS的架构:

【Hadoop】— HDFS(Hadoop分布式文件系统)

注意: Secondary NameNode 不能作为热备 当NameNode挂的时候 不能立刻换掉NameNode 并提供服务

优点:

​ (1) 容错性高: 副本可以自动保存恢复

​ (2) 适合处理大数据 数据规模(PB级) 和文件规模(百万)

​ (3) 可构建在廉价机器

缺点:

​ (1) 访问数据的延时比较高(做不到毫秒级别)

​ (2) 不支持对文件的随机写

可支持追加 却不能修改 。

原因: HDFS 是以块进行存储 修改一个块的话 会影响到当前块之后的所有块 效率较低 其次是HDFS不提供在线寻址的功能

​ (3) 不是用于对小文件的存储(会占用大量的NameNode内存 用于存储 文件的属性和信息以及块的映射信息 NameNode 的内存是有限的)

例子: 当前运行NN的机器,有64G内存,除去系统开销,分配给NN50G内存!

文件a (1k), 存储到HDFS上,需要将a文件的元数据保存到NN,加载到内存

​ 文件名 创建时间 所属主 所属组 权限 修改时间+ 块的映射(1块)

​ 150B 最多存储50G/150B个文件a 50G/150B * 1k

文件b (128M), 存储到HDFS上,需要将b文件的元数据保存到NN,加载到内存
文件名 创建时间 所属主 所属组 权限 修改时间+块的映射(1块)

​ 150B 最多存储50G/150B个文件b 50G/150B * 128M

​ (4) 只支持同时一个线程(客户端)的写

HDFS 块的大小 ! !

【Hadoop】— HDFS(Hadoop分布式文件系统)

默认为128M 基于最佳传输损耗理论 在一次传输中,寻址时间占用总传输时间的1%时,本次传输的损耗最小,为最佳性价比传输!

不可以设置太小也不可以设置太大(取决于磁盘传输速率):

​ (1) 太小: 增加寻址时间

​ (2) 太大: 导致磁盘的传输数据时间会明显大于定位这个块所需要的时间 处理的时候很慢

举例:

太小:
文件a,128M
1M一块: 128个块,生成128个块的映射信息
128M一块, 1个块,一个块的映射信息
①块太小,同样大小的文件,会占用过多的NN的元数据空间
②块太小,在进行读写操作时,会消耗额外的寻址时间

太大:
当前有文件a, 1G
128M一块 1G存8块 , 取第一块
1G一块 1G存1块 , 取第一块
只需要读取a文件0-128M部分的内容
①在一些分块读取的场景,不够灵活,会带来额外的网络消耗
②在上传文件时,一旦发生故障,会造成资源的浪费