Hadoop学习笔记 容错(一)

日志文件:在数据库中用事务日志文件记录数据的修改操作,其中的每条日志记录或者记录所执行的逻辑操作,或者记录已修改数据的前像和后像。前像是操作执行前的数据复本;后像是操作执行后的数据复本

namenodesecondaryNamenode的联系

NameNode将对文件系统的改动追加保存到本地文件系统上的一个日志文件(edits)。当一个NameNode启动时,它首先从一个映像文件(fsimage)中读取HDFS的状态,接着应用日志文件中的edits操作。然后它将新的HDFS状态写入(fsimage)中,并使用一个空的 edits文件开始正常操作。因为NameNode只有在启动阶段才合并fsimageedits,所以一段时间后日志文件可能会变得非常庞大,特别是对大型的集群。日志文件太大的另一个副作用是下一次NameNode启动会花很长时间。 
Secondary NameNode定期合并fsimageedits日志,将edits日志文件大小控制在一个限度下。因为内存需求和NameNode在一个数量级上,所以通常secondary NameNode(运行在单独的物理机器上)和NameNode运行在不同的机器上。

Secondary NameNode保存最新检查点的目录与NameNode的目录结构相同。 所以NameNode可以在需要的时候读取Secondary NameNode上的检查点镜像。

 

热备?

 

光从字面上来理解,很容易让一些初学者先入为主的认为:SecondaryNameNodesnn)就是NameNodenn)的热备进程。其 实不是。snnHDFS架构中的一个组成部分,但是经常由于名字而被人误解它真正的用途,其实它真正的用途,是用来保存namenode中对HDFS metadata【元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

】的信息的备份,并减少namenode重启的时间。对于hadoop进程中 ,要配置好并正确的使用 snn,还是需要做一些工作的。hadoop的默认配置中让 snn进程默认运行在了 namenode 的那台机器上,但是这样的话,如果这台机器出错,宕机,对恢复HDFS文件系统是很大的灾难,更好的方式是:将snn的进程配置在另外一台机器 上运行。

hadoop中,namenode负责对HDFSmetadata的持久化存储,并且处理来自客户端的对HDFS的各种操作的交互反馈。为了保 证交互速度,HDFS文件系统的metadata是被loadnamenode机器的内存中的,并且会将内存中的这些数据保存到磁盘进行持久化存储。为 了保证这个持久化过程不会成为HDFS操作的瓶颈,hadoop采取的方式是:没有对任何一次的当前文件系统的snapshot磁盘快照(Snapshot)是针对整个磁盘卷册进行快速的档案系统备份,与其它备份方式最主要的不同点在于「速度」。进行磁盘快照时,并不牵涉到任何档案复制动作。就算数据量再大,一般来说,通常可以在一秒之内完成备份动作。

】进行持久化,对HDFS最 近一段时间的操作list会被保存到namenode中的一个叫Editlog的文件中去。当重启namenode时,除了 load 【加载】fsImage意外,还会对这个EditLog文件中 记录的HDFS操作进行replay,以恢复HDFS重启之前的最终状态。

SecondaryNameNode,会周期性的将EditLog中记录的对HDFS的操作合并到一个checkpoint中,然后清空 EditLog。所以namenode的重启就会Load最新的一个checkpoint,并replay EditLog中 记录的hdfs操作,由于EditLog中记录的是从 上一次checkpoint以后到现在的操作列表,所以就会比较小。如果没有snn的这个周期性的合并过程,那么当每次重启namenode的时候,就会 花费很长的时间。而这样周期性的合并就能减少重启的时间。同时也能保证HDFS系统的完整性。

这就是SecondaryNameNode所做的事情。所以snn并不能分担namenode上对HDFS交互性操作的压力。尽管如此,当 namenode机器宕机或者namenode进程出问题时,namenodedaemon【后台程序】进程可以通过人工的方式从snn上拷贝一份metadata 来恢复HDFS文件系统。

至于为什么要将SNN进程运行在一台非NameNode的 机器上,这主要出于两点考虑:

可扩展性: 创建一个新的HDFSsnapshot需要将namenodeload到内存的metadata信息全部拷贝一遍,这样的操作需要的内存就需要 和namenode占用的内存一样,由于分配给namenode进程的内存其实是对HDFS文件系统的限制,如果分布式文件系统非常的大,那么 namenode那台机器的内存就可能会被namenode进程全部占据。

容错性: 当snn创建一个checkpoint的时候,它会将checkpoint拷贝成metadata的几个拷贝。将这个操作运行到另外一台机器,还可以提供分布式文件系统的容错性。

1secondarynamenode可以配置多个,master文件里面多写几个就可以。

2、千万记得如果要恢复数据是需要手动拷贝到namenode机器上的。不是自动的(参看上面写的恢复操作)。

3、镜像备份的周期时间是可以修改的,如果不想一个小时备份一次,可以改的时间短点。core-site.xml中的fs.checkpoint.period

并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

 

 

 

 

Hadoop容错

包含NameNode单点失效解决策略,Block数据块多副本存储机制,NameNodeDataNode之间心跳检测机制,数据存储机制,及任务出错重做机制。

 

单点失效问题:

1.BackupNodeSecondary NameNodeCheckPoint Node都只是提供一个fsimage更新和检查点备份,并不提供NameNode 服务,当NameNode宕机的时候就会引起HDFS集群不可用。  Backup Node提供一个真正意义上的备用节点,NameNode所有写操作都会实时将更新Logedits文件数据)发送给Backup NodeBackup Node据此更新本机fsimageedits文件,并在内存中维护和NameNode 一样的Matadata数据。

2.Secondary NameNode

3.Avatar机制

 

数据块多副本存储机制:

首先将数据分块储存,每一个数据块保存多个副本,副本分布在不同节点上,这种数据分块存储+副本的策略是HDFS实现高可靠性和高性能的关键。

1文件分块存储之后,按照数据块来读取,提高了文件随机读和并发读的效率。

2保存数据块若干副本到不同机器节点实现可靠性的同时也提高了同一数据块的并发读效率。

3数据分块非常符合mapreduce任务切分的思想。副本存放策略又是HDFS实现高可靠性和高性能的关键。

HDFS采用一种称为机架感知的策略来改进数据的可靠性、可用性、和网络带宽的利用率。一般副本数为3,本地机架节点上一个,同一机架另外节点上一个,不同机架节点上一个。减少了机架间数据传输,提高了写操作效率。

 

HDFS心跳机制

DataNode数据服务器会在主循环中调用方法,向NameNode汇报状况。如多少可用空间、用了多大空间。当NameNode处理消息后,会将相关指令封装,交还给DataNode。在主循环中,DataNode会调用另一个方法,其周期比之前的方法长,这个方法会提交本地所有数据块状况给NameNode,这样NameNode会和本地数据块信息比较,决定什么删除,什么新增。同样一起封装在命令中。

 

数据存储机制

HDFS负载均衡。利用相关工具。迁移数据块。

 

MapReduce容错

TaskTracker周期向JobTracker发送心跳信息。

 

 

 

Hadoop HBase容错


参考书籍:深入云计算 hadoop应用开发实战详解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值