HDFS
HDFS设计基础与目标:
冗余:硬件错误是常态
流式数据访问。即数据比量读取而非随机读写,Hadoop擅长做的是数据分析而不是事务处理。
大规模数据集
简单一致性模型。为了降低系统复杂程度,对文件采用一次性写多多次读的逻辑设置,即是文件一经写入,关闭,再也不能修改。
程序采用“数据京近”原则分配节点执行。
OLTP:偶尔随机性德读写
HDFS体系架构:
NameNode:
管理文件系统的命名空间;
记录每个文件数据块在各个Datanode上的位置和副本信息;
协调客户端对文件的访问;
记录命名空间内的改动或空间本身属性的改动;
Namenode使用事务日志记录HDFS元数据的变化;
使用映像文件存储文件系统的命令空间,包括文件映射,文件属性等;
DateNode
负责所在物理节点的存储管理;
一次写入,多次读取(不能修改,不用考虑数据读取一致性);
文件由数据块组成,典型块大小64MB;
数据块尽量散布到各个节点;
HDFS读取数据流程
客户端要访问HDFS中一个文件;
首先从namenode获得组成这个文件的数据块位置列表;
根据列表知道存储数据块的datanode;
访问datanode获取数据;
Namenode并不参与数据实际传输;
HDFS的可靠性
冗余副本策略
在hdfs-site.xml设置replication设置复制因子,指定副本数量;
复制因子:如果是1 没有副本。副本数太多,空间利用,复制副本影响性能。
Datanode启动时,遍历本地文件系统,产生一份hdfs数据块和本地文件的对应关系列表(块报告blockreport)汇报给namenode;
机架策略
集群一般放在不同机架上,机架间带宽要比机架内带宽要小;
HDFS的“机架感知”
一般在本机架存放一个副本,在其它机架再放别的副本,这样可以防止机架失效时丢失数据,提高带宽利用率;
心跳机制
Oracle: rack
Namenode周期性从datanode接收心跳信号和块报告;
Namenode根据块报告验证元数据;
没有按时发送心跳的datanode会被标记为宕机,不会再给它任何I/O请求;
如果datanode失效造成副本数量下降,并且低于预先设置的阈值,namenode会检测出这些数据块,并在合适的时机进行重复制;
引发重新复制的原因还包括数据副本本身损坏、磁盘错误,复制因子被增大等;
安全模式
Namenode启动时会先经过一个安全模式阶段;
安全模式阶段不会产生数据写;
在此阶段namenode收集各个datanode的报告,当数据块达到最小副本以上时,会被认为是安全的;
在一定比例(可设置)的数据块被确定安全后,再过若干时间,安全模式结束;
当检测到副本数不足的数据块时,该块会被复制直达到最小副本数;
校验和:验证数据是否是完整
在文件创立时,每个数据块都会产生校验和;
校验和会作为单独一个隐藏文件保存在命名空间下;
客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏;
如果正在读取的数据块损坏,则可以继续读取其它副本;
回收 站
删除文件时,其实是放入回收站,同windows回收站;
回收站里的文件可以快速恢复;
可以设置一个时间阈值,当回收站里文件的存放时间超过这个阈值时,就被彻底删除,并且释放占用的数据块;
core_site.xml文件中开启功能:fs.trash.interval
说明:hadoop垃圾回收机制,每隔多长时间清理一次垃圾
value:1440
备注:默认值是0,不打开垃圾收回机制。删除掉的文件将直接清除,不保存。如果设置了,则将保存到本地的.crash文件夹下
如果开启回收站功能:
元数据保护
元数据包括映像文件和事务日志;
是namenode的核心数据,可配置为拥有多个副本;
快照
支持存储某个时间点的映像,需要时可以使数据重返这个时间的状态;
本文出自 “Linux_蚂蚁” 博客,请务必保留此出处http://onlyoulinux.blog.51cto.com/7941460/1548545
原文地址:http://onlyoulinux.blog.51cto.com/7941460/1548545