hadoop设计基础和目标-笔记01
- 硬件错误是常态,因此需要冗余.
- 流式数据访问,即数据批量读写而非随机读写,Hadoop擅长做的数据分析而不是事务处理
- 大规模数据集
- 简单一致性模型。为了降低系统复杂度,对文件采用一次性写多次读的逻辑设计,也就是说:文件一经过写入,关闭就再也不能修改!
- 程序采用“数据就近”原则分配节点执行.
NameNode:
1.管理文件系统的命名空间
2.记录每个文件数据块在各个DateNode上的位置和副本信息
3.协调客户端对文件的访问
4.记录命名空间内的改动和空间本身属性的改动
5.NameNode使用事务日志记录HDFS元数据的变化。使用映像文件的命名空间,包括文件映射,文件属性
DataNode:
1.负责所在物理节点的存储管理
2.一次写入,多次读取(不修改,也是就不需要处理读写一致性的问题)
3.文件由数据块组成,典型的块大小是64MB。
4.数据块尽量散布到各个节点,实现副本冗余的效果。
读取数据流程:
1.客户端要访问hdfs文件
2.首先从NameNode获取组成这个文件的数据块位置列表
3.根据列表知道存储数据块的DataNode
4.访问DataNode获取数据
5.NameNode不参与实际数据传输,只是起到查询作用。
HDFS的可靠性:
1.冗余副本策略
hdfs-site.xml设置复制因子指定副本数量,所有数据块都有副本,DataNode启动时,遍历本地文件系统,产生一份HDFS数据块和本地文件的对应关系列表(BlockReport)汇报给NameNode.
复制因子越大越安全,但是空间利用率低。
2.机架策略
集群一般放在不同机架上,机架间带宽要比机架内带宽要小。HDFS的“机架感知”,一般在本机架存放一个副本,在其他机架再存放别的副本,这样可以防止机架失效丢失数据,也可以提高带宽利用率。
3.心跳机制
NameNode周期性从DataNode接收心跳信号和块报告(BlockReport),NameNode根据块报告验证元数据。
没有按时发送心跳的DataNode会被标记为宕机,不会再给它任何I/O请求.如果DataNode失效造成副本数量下降,并且低于预先设置的阀值,NameNode会检测出这些数据块,并在合适的时间进行重新复制,引发重新复制的原因还包括数据副本本身损坏、磁盘错误、复制因子备增大等。
4.安全模式
NameNode在启动时会经过一个”安全模式”(SafeMode)阶段,此阶段不会产生数据读写.在此阶段NameNode收集各个DataNode的报告,当数据块达到最小副本数以上时,会备认为是“安全”的.
在一定比例(可设置)的数据库被确定为“安全”后,再过若干时间,安全模式结束。当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数。
5.校验和
在文件创建时,每个数据块都会产生校验和, 校验和会作为一个隐藏文件保存在命名空间下,客户端获取数据时可以检查校验和是否相同,从而发现数据库是否损坏。如果正在读取的数据块损坏,则可以继续读取其他副本。
6.回收站
删除文件时,其实是放入回收站(Trash).回收站里的文件可以快速恢复,可以设置一个时间阀值,当回收站里文件的存放时间超过这个阀值,就会彻底删除并释放占用的数据块。
7.元数据保护
映像文件和事务日志是NameNode的核心数据,可以配置为拥有多个副本。副本会降低NameNode的处理速度,但增加安全性,NameNode依然是单点,如果发生故障要手工切换.
8.快照机制(0.20.2还没实现)
支持存储摸个时间点的映象,需要时可以使数据重返时间点的状态
版权声明:本文为博主原创文章,未经博主允许不得转载。