首页 > 代码库 > hadoop学习笔记之--- HDFS原理学习

hadoop学习笔记之--- HDFS原理学习

HDFS

HDFS设计基础与目标:

  1. 冗余:硬件错误是常态

  2. 流式数据访问。即数据比量读取而非随机读写,Hadoop擅长做的是数据分析而不是事务处理。

  3. 大规模数据集

  4. 简单一致性模型。为了降低系统复杂程度,对文件采用一次性写多多次读的逻辑设置,即是文件一经写入,关闭,再也不能修改。

  5. 程序采用“数据京近”原则分配节点执行。

 

OLTP:偶尔随机性德读写

 

HDFS体系架构:

 

NameNode:

管理文件系统的命名空间;

记录每个文件数据块在各个Datanode上的位置和副本信息;

协调客户端对文件的访问;

记录命名空间内的改动或空间本身属性的改动;

Namenode使用事务日志记录HDFS元数据的变化;

使用映像文件存储文件系统的命令空间,包括文件映射,文件属性等;

 

DateNode

 

负责所在物理节点的存储管理;

一次写入,多次读取(不能修改,不用考虑数据读取一致性);

文件由数据块组成,典型块大小64MB

数据块尽量散布到各个节点;

 

HDFS读取数据流程

 

客户端要访问HDFS中一个文件;

首先从namenode获得组成这个文件的数据块位置列表;

根据列表知道存储数据块的datanode;

访问datanode获取数据;

Namenode并不参与数据实际传输;

 

 

HDFS的可靠性

 

  1. 冗余副本策略

hdfs-site.xml设置replication设置复制因子,指定副本数量;

复制因子:如果是1 没有副本。副本数太多,空间利用,复制副本影响性能

 

Datanode启动时,遍历本地文件系统,产生一份hdfs数据块和本地文件的对应关系列表(块报告blockreport)汇报给namenode

 

  1. 机架策略

集群一般放在不同机架上,机架间带宽要比机架内带宽要小;

 

HDFS的“机架感知”

一般在本机架存放一个副本,在其它机架再放别的副本,这样可以防止机架失效时丢失数据,提高带宽利用率;

 

  1. 心跳机制

Oracle:  rack

 

Namenode周期性从datanode接收心跳信号和块报告;

Namenode根据块报告验证元数据;

没有按时发送心跳的datanode会被标记为宕机,不会再给它任何I/O请求;

如果datanode失效造成副本数量下降,并且低于预先设置的阈值,namenode会检测出这些数据块,并在合适的时机进行重复制;

引发重新复制的原因还包括数据副本本身损坏、磁盘错误,复制因子被增大等;

 

 

  1. 安全模式

 

Namenode启动时会先经过一个安全模式阶段;

安全模式阶段不会产生数据写;

在此阶段namenode收集各个datanode的报告,当数据块达到最小副本以上时,会被认为是安全的;

在一定比例(可设置)的数据块被确定安全后,再过若干时间,安全模式结束;

当检测到副本数不足的数据块时,该块会被复制直达到最小副本数;

 

  1. 校验和:验证数据是否是完整

 

在文件创立时,每个数据块都会产生校验和;

校验和会作为单独一个隐藏文件保存在命名空间下;

客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏;

如果正在读取的数据块损坏,则可以继续读取其它副本;

 

  1. 回收

 

删除文件时,其实是放入回收站,同windows回收站;

回收站里的文件可以快速恢复;

可以设置一个时间阈值,当回收站里文件的存放时间超过这个阈值时,就被彻底删除,并且释放占用的数据块;

core_site.xml文件中开启功能:fs.trash.interval

说明:hadoop垃圾回收机制,每隔多长时间清理一次垃圾

value1440

备注:默认值是0,不打开垃圾收回机制。删除掉的文件将直接清除,不保存。如果设置了,则将保存到本地的.crash文件夹下

 

 

如果开启回收站功能:

 

  1. 元数据保护

 

元数据包括映像文件和事务日志;

namenode的核心数据,可配置为拥有多个副本;

 

  1. 快照

 

支持存储某个时间点的映像,需要时可以使数据重返这个时间的状态;

 

本文出自 “Linux_蚂蚁” 博客,请务必保留此出处http://onlyoulinux.blog.51cto.com/7941460/1548545

hadoop学习笔记之--- HDFS原理学习