HDFS优点:
| 高容错性 |
数据自动保存多个副本 副本丢失后,自动恢复 |
| 适合批处理 |
移动计算而非数据 数据位置暴露给计算框架 |
| 适合大数据处理 |
GB、TB、甚至PB级别数据 百万规模以上的文件数量 10K+节点 |
| 可构建在廉价机器上 | 可构建在廉价机器上 |
HDFS缺点:
| 低延迟数据访问 |
比如毫秒级 低延迟与高吞吐率 |
| 小文件存取 |
占用NameNode大量内存 寻道时间超过读取时间 |
| 并发写入、文件随机修改 |
一个文件只能有一个写者 仅支持append |
HDFS架构:
HDFS架构图
主节点:NameNode
从节点:DataNode
Secondary NameNode节点:辅助NameNode完成一些工作。
HDFS数据存储单元(black):
- 文件被切分成固定大小的数据块
默认数据块大小为64MB(hadoop1.x),可配置
若文件大小不到64MB,则单独存成一个block
- 一个文件存储方式
按大小被切分成若干个block,存储到不同节点上
默认情况下每个block都有三个副本
- Block大小和副本数通过Client端上传文件时设置,文件上传成功后副本数可以变更,Block Size不可变更。
HDFS设计思想
NameNode(NN):
- NameNode主要功能:接受客户端的读写服务
- NameNode保存metaData信息,包括:
文件owership和permissions
文件包含哪些Block
Block保存在哪个DataNode(由DataNode启动时上报)
- NameNode的medadata信息在启动后会加载到内存
metadata存储到磁盘文件名为"fsimage"
Block的位置信息不会保存到fsimage(其是保存在内存中)
edits记录对medadata的操作日志
SecondNameNode(SNN):
- 它不是NN的备份(但可以备份),它的主要工作是帮助NN合并edits log,减少NN启动时间。
- SNN执行合并时机
根据配置文件设置的时间间隔fs.checkpoint.period 默认为3600秒
根据配置文件设置edits log大小fs.checkpoing.size规定edits文件的最大值默认是64MB
SNN合并流程
DataNode(DN):
- 存储数据(Block)
- 启动DN线程的时候会向NN汇报block信息
- 通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其他 DN
HDFS写入流程:
HDFS写入流程图
HDFS读流程:
HDFS读流程图
HDFS文件权限:
- 与Linux文件权限类似
r:read, w:write, x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容
- 如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就只zhangsan
HDFS安全模式:
- NameNode启动的时候,首先将fsimage载入内存,并执行编辑日志(edits)中的各项操作。
- 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。
- 此刻NameNode运行在安全模式。即NameNode的文件系统对于客户端来说是只读的。
- 在此阶段NameNode收集各个DataNode的报告,当数据块到最小副本数以上时,会被认为是安全的,在一定比例(可设置)的数据块被确定为安全后,再过若干时间,安全模式结束。
- 当检测到副本数不足的数据块,该块会被复制达到最小副本数,系统中数据块的位置并不是由NameNode维护的,而是以块列表形式存储在DataNode中。