我们正在准备实施我们的第一个Hadoop集群。 因此,我们从四个节点的设置开始小。 (1个主节点和3个工作节点)每个节点将有6TB的存储空间。 (6 x 1TB磁盘)我们使用了一个SuperMicro 4节点机箱,所有四个节点共用一个4U机箱。
我们现在正在考虑如何备份这个解决scheme以进行灾难恢复。 (思考机架或站点丢失,而不是驱动器丢失)最好的解决scheme似乎是一个群集到群集的副本。 虽然我也读过关于复制NAS或SMB共享数据的人。 另外,我们将通过传统的备份方式来备份主节点。 我只关心HDFS数据。 这是我的问题:
1)对于群集到群集的副本,我可以设置具有大量存储的SINGLE节点群集来充当我的场外副本吗? 我不关心它的性能,只是存在和能够保存整个数据集。 (恢复时间不是一个问题,因为这个集群不是任务关键)复制是否可以安排,以便它只能运行一次,等等?
2)对于SMB或NAS选项,这是如何工作的? 目标磁盘是否需要格式化HDFS? 我需要全部备份三个工作节点中的每一个吗? 还是有一些智能脚本可以备份没有奇偶校验的数据集? 我不是很熟悉这个解决scheme,只能在网上看到它的参考。 我没有太多的运气find资源或信息。
我也对Hadoop HDFS的其他DR选项开放。 我们的目标是获取HDFS数据集的完整副本,以便我们可以使用它来从机架或站点丢失中恢复。
谢谢!
对于选项1,可以使用distcp从一个群集复制到另一个群集。 只要备份集群上有名称节点和数据节点,备份集群当然可以是单节点服务器。 基本上,你正在寻找以伪分布模式运行 。 要定期运行distcp,
为了做到这一点,我会创build一个如下的shell脚本:
我build议使用locking文件,因为您不希望在此特定设置中运行多个distcp。 你将最终压倒你的伪分布式集群。 我也将伪分布式集群configuration的默认复制因子设置为1。 如果你不需要的话,不需要在块上加倍(尽pipe如此,我不记得一个伪簇是否默认为YMMV)。
可以使distcp工作,就像一个愚蠢的rsync,只能复制那些改变的东西。
对于选项2,可以使用hadoop fs -copyToLocal。 缺点是每次都是完全复制的,所以如果你复制/,它每次都在复制一切。
对于hadoop元数据,您需要复制fsimage和edits文件。 这个博客有一个相当合理的概述做什么。 它适合使用Cloudera,但对于任何Hadoop 1.0或2.0群集应该基本相同。
Hdfs通过devise复制,通常最less3个节点,所以如果你有3个节点,数据已经在所有三个节点上复制了。
当然,这些节点应该在不同的物理服务器上。 那么它不可能失败,或者所有三个都不能立即失败。
要复制您当前的hdfs,您可以简单地将节点添加到其他服务器上的hdfs服务,并且数据将被复制。 要确保数据复制的数量超过3个原始节点,请将容错设置增加到4个或更多个节点。 Thrnclosures单个设备上的其他节点,您的数据将保留在所有节点上。