您的位置:首页 > 运维架构

hadoop设计基础和目标-笔记01 分类: hadoop 2015-03-22 10:43 68人阅读 评论(0) 收藏

2015-03-22 10:43 295 查看
硬件错误是常态,因此需要冗余.

流式数据访问,即数据批量读写而非随机读写,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还没实现)

支持存储摸个时间点的映象,需要时可以使数据重返时间点的状态
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐