一、HDFS由3个部分组成:
1、NameNode
1、管理着文件系统的命名空间
—维护文件系统树种所有的文件和目录
2、存储元数据
—文件名目录名以及他们之间的关系
—文件的目录所有者及其权限
—每个文件块的名字以及这个文件由哪些块组成
3、元数据存储在内存中
—元数据不存储每个块的位置信息
4、保存 文件、block、datanode之间的映射关系
—文件名->block
—block->datanode
5、namenode不存储数据并且不运行mapreduce任务
2、SecondaryNameNode(NameNode的延时备份)
namenode元数据都存储在内中,但是会定期持久化到磁盘文件fsimage,当datanode发生写删等操作时吗,namenode会将操作记录写到editlog中,secondarynamenode会定时去name查询是否有editlog发生变化,发生变化就讲editlog与自己本身的fsimage合并merge,之后将合并后的fsimage再拷贝回namenode。
3、DataNode
1、负责存储数据块,负责为系统客户端提供数据块的读写服务
2、根据namenode的指示进行创建、删除复制等工作
3、心跳机制,定期报告文件快信息
4、与datanode之间进行通信,进行数据块副本梳理
Hadoop倾向存储少量的大文件,不建议存储大量的小文件,因为大量的小文件会占据更多的block,会对namenode的元数据中产生更多的映射关系数据,更加耗费内存
hadoop1.x缺点:
1、全系统只有一个namenode,有单点故障风险
1、将hadoop元数据写入到本地文件系统的同时再实时同步到一个远程挂载的网络文件系统NFS
2、运行一个secondaryNameNode,它的作用是与Namenode进行交互,定期通过编辑日志文件合并命名空间镜像,当namenode发生故障时它会通过自己合并的 命名空间镜像
副本来恢复,需要注意的是secondaryNameNode保存的状态总是滞后于NameNode,所以这种方式难免会导致丢失部分数据
2、HDFS-block副本存放策略
1、第一个副本在客户端相同的节点上(如果客户端是集群外的一台机器,随机选择不满不忙的节点),第二个副本放在不同的机架上找1个节点第三个副本放在第 二个机架上不同的节点上
3、hdfs数据完整性校验
默认512个字节创建1个校验码,datanode接收数据 每512字节判断校验码和client传过来的校验码是否一致,一致则数据完整,写到block里