简介:
HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。
是根据google发表的论文翻版的。论文为GFS(Google File System)Google 文件系统。
HDFS有很多特点:
①保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份。
②运行在廉价的机器上
③适合大数据的处理。多大,多小?HDFS默认会将文件分割成block,64M为一个block。
然后将block按键值对存储在HDFS上并将键值对的映射存到内存中(namenode)。
如果小文件太多,那内存的负担会很重。
如上图所示,HDFS也是按照Master和Slaver的结构。分NameNode、SecondaryNameNode、
DataNode这几个角色;
NameNode:是Master节点,是管理者,管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名
称空间:
- NameNode保存的metadata包括:
- 文件ownership和permission
- 文件包含了block信息
- Block保存在那些DataNode节点上(这部分数据并非保存在NameNode磁盘上的,它在DataNode启动时报告给NameNode的,Name接收到之后将这些信息保存在内存中)
- NameNode的metadata信息在NameNode启动后加载到内存中
- Metadata存储到磁盘上的文件名称为fsimage
- Block的位置信息不会保存在fsimage中
- Edits文件记录了客户端操作fsimage的日志,对文件的增删改等。
- 用户对fsimage的操作不会直接更新到fsimage中去,俄日是记录在edits中
SecondaryNameNode :分担namenode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode。
- 合并fsimage和edtis文件,然后发送并替换NameNode的fsimage文件,同时自己留下一个副本。这个副本可提供NameNode毁坏之后的部分文件回复。
- 可以通过fs.checkpoint.period修改合并时间,默认1小时。
- 也可以通过配置edits日志文件大小,fs.checkpoint.size规定edits文件的最大值,来让SecondaryNameNode来知道什么时候该进行合并操作了。默认是64M
合并过程如下:
DataNode:Slaver节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操作。
热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a工作。
冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。
fsimage:元数据镜像文件(文件系统的目录树。)
edits:元数据的操作日志(针对文件系统做的修改操作记录)
namenode内存中存储的是=fsimage+edits。
ScondaryNameNode负责定时默认1小时,从namenode上,获取fsimage和edits来进行合并,然后再发送给namenode。减少namenode的工作量e。
HDFS优点:
- 高容错性
- 数据自动保存多个副本。
- 副本丢失后,自动恢复。
- 适合批量处理
- 移动计算的操作
- 数据位置暴露给计算框架
- 适合大数据处理
- GB、TB、PB甚至更大
- 百万规模以上的文章数量
- 10k+节点可以建在廉价机器上
- 通过副本提高可靠性