学习笔记-HDFS1.0/2.0
HDFS1.0
HDFS 由三个组件构成,完全是两种不同的进程(NameNode,DataNode):
- NameNode 只有一个,在一个集群上
- SecondaryNmaeNode
- DataNode 在集群上有很多,但是一个机器只有一个
1,2属于Master 上,3属于Slave上也叫做work上
HDFS(存储)上的各个节点说明:
- Master 主节点,负责分配用户给的任务,相当于公司的老板
- Slave 从节点,负责处理Master分配的任务,相当于公司的员工
- Client 客户端 ,负责给Master分配任务, 相当于用户出钱给公司,给公司的Master分配任务,也可以直接和Slave通信
DataNode 最小的数据单元是block ,block默认是64M,可以通过配置文件修改
HDFS里面这个数据通常是顺序读的,原因就是吞吐能力
NameNode:
- NameNode 管理文件系统命名空间
- 存储元数据
- 文件名目录名以及之间的关系
- 文件目录所有者权限
- 每个文件块的名称及文件由哪些组成
- 元数据保存在内存中,在hdfs系统的运行期间,会定期保存元数据到fsimage ,运行期间会对元信息的操作都保存在内存中并持久化到edits,并且定期edits和fsimange文件会被SecondaryNameNode周期性合并
- 元数据中有两种很重要的数据,也可以认为是映射数据
- 文件名 --》 block
- block --》 dataNode
- NameNode不会存储用户数据或执行MapReduce任务
通过以上第四点就可以说明client 找master 就知道该找哪个dataNode
DataNode:
- 负责存储数据块,负责为系统客户端提供数据块的读写服务
- 根据NameNode指示,执行任务
- 心跳机制,定期(3s)报告文件块列表信息
- DataNode之间通信,块的副本处理
两个文件:
- fsimage - 它是在NameNode 启动时对整个文件系统的快照
- 编辑日志 - 它是在NameNode 启动后,对文件系统的改动序
SecondaryNameNode:
- 用来保存HDFS元数据信息,比如命名空间信息,块信息,由于这些都是在内存中,SecondNameNode为了考虑持久化到磁盘
- 他所做的是在文件系统设置一个检查点帮助的NameNode更好工作
- 定时到NameNode去获取编辑日志,并更新到fsimage,一旦有了新的fsimage文件,将其拷回NameNode
数据完整性校验,
- HDFS会对写入的数据计算校验和,并在读取数据时验证校验和,通过CRC32的循环冗余校验码
- 数据块检测程序DataBlockScanner在DataNode节点上开启一个后台线程,来定期验证存储在它上的所有块,这是防止物理介质出现损失情况而造成数据损坏
HDFS特点:
- 存储并管理PB极大数据
- 处理非结构化数据
- 注重数据处理的吞吐量
- 应用模式:一次写多次读存取模式
HDFS副本管理策略:机架感知策略
HDFS和MapReduce本地模式:
HDFS2.0
NameNode HA
- HDFS高可用性将通过在一个集群中运行两个的NameNode(活性&备用)来解决
- 任何时间只有一台处于active另一个处于standby随时准备切换
QJM(Hadoop的提供的一个服务,保证的NameNode间的数据同步,借助ZK):
- 管理文件系统的命名空间
- 数据间的同步
QJM实现高可用(HA)的原因:
- 不需要额外配置恭喜那个存储(相对于NFS)
- 消除单点问题
- 可配置,使得系统更加鲁棒
- JN不会因为一台的延迟而影响整体的延迟,也不会因为JN的数量增多而影响
Active NameNode和Standby NameNode同步目录镜像树,需要依赖JournalNodes守护进程,完成数据一致性
要保证这两个之间数据完全一致就需要两个一致:一个是数据(通过数据管理部保证),一个是命名空间(通过JN(QJM起来的进程)来保证的),一个集群中,最少要运行3个JN系统,使得系统有一定的容错能力
FailoverController进程(ZKFC)主要是用来故障转移用的(active的NN突然挂掉了,切换到NN待机)
ZKFC是ZK集群的客户端,ZKFC用来监控NN的状态信息(zkfc在ZK上创建临时节点,与NN保持心跳)
一个命名空间对应一个块池(是同一个命名空间下的所有块集合)
NameNode Federation
本质:将一部分文件迁移到其他NN上进行管理,只有元数据管理和存放被分隔开,但是真实数据存储还是共享
优势:
- 命名空间横向扩展
- 性能提升
- 资源的隔离
应用:新的文件系统viewfs(视图文件系统)
HDFS快照:主要用来做数据备份,一个只读的基于时间点的文件系统拷贝,快照并不影响HDFS的正常操作,快照数据是当前数据减去修改的部分计算出来的,会存在snapshottable目录下,对目录进行设定,只记录了块列表和文件大小,不会复制文件
HDFS2.0缓存 - “集中式缓存,通过中央节点提前把目录加载进去
- 集中化缓存对于重复访问的文件很有用
- 明确的锁定可以阻止频繁使用的数据被从内存中清除
- 缓存可以缓存当前目录和文件,但是目录是非递归
Hadoop的ACL机制:和linux一致,在Hadoop2.4版本以后