10.3.2 Hadoop的备份

1.元数据的备份

如果NameNode中存储的持久化元数据信息丢失或遭到破坏,那么整个文件系统就不可用了。因此元数据的备份至关重要,需要备份不同时期的元数据信息(1小时、1天、1周……)以避免突然宕机带来的破坏。

备份的一个最直接的办法就是编写一个脚本程序,然后周期性地将Secondary NameNode中previous.checkpoint子目录(该目录由fs.checkpoint.dir属性值确定)下的文件归档到另外的机器上。该脚本需要额外验证所复制的备份文件的完整性。这个验证可以通过在NameNode的守护进程中运行一个验证程序来实现,验证其是否成功地从内存中读取了fsimage及edits文件。

2.数据的备份

HDFS的设计目标之一就是能够可靠地在分布式集群中储存数据。HDFS允许数据丢失的发生,所以数据的备份就显得至关重要了。由于Hadoop可以存储大规模的数据,备份哪些数据、备份到哪里就成为一个关键。在备份过程中,最优先备份的应该是那些不能再生的数据和对商业应用最关键的数据。而对于那些可以通过其他手段再生的数据或对于商业应用价值不是很大的数据,可以考虑不进行备份。

这里需要强调的是,不要认为HDFS的副本机制可以代替数据的备份。HDFS中的Bug也会导致副本丢失,同样硬件也会出现故障。尽管Hadoop可以承受集群中廉价商用机器故障,但是有些极端情况不能排除在外,特别是系统有时还会出现软件Bug和人为失误的情况。

通常Hadoop会设置用户目录的策略,比如,每个用户都有一个空间配额,每天晚上都可进行备份工作。但是不管设置什么样的策略,都需要通知用户,以避免客户反映问题。

前面介绍的distcp工具(参见第9章HDFS详解)是在不同HDFS之间或不同Hadoop文件系统之间转存和备份数据的好工具,因为distcp可以并行运行数据复制。