本文介绍了将非 PowerScale Hadoop 环境备份到 Dell PowerScale 群集的建议最佳实践。Dell PowerScale 强大的纠删码数据保护可提供高于 80% 的存储效率,使其成为 Hadoop 群集上数据的理想备份目标。DistCp(分布式复制)是所有 Hadoop 发行版和版本附带的标准工具。DistCp 可以复制整个 Hadoop 目录。DistCp 作为 MapReduce 作业运行,完全使用您的系统(如果需要)并行执行文件复制。还有一个选项可以限制带宽,以控制对其他任务的影响。
环境
本文使用以下测试环境:
由于 DistCp 是标准 Hadoop 工具,因此本文档中概述的方法适用于大多数 Hadoop 发行版和版本。
阅读本文档时,请假设要备份的数据位于 PHD Hadoop HDFS 群集上的 /mydata目录中。示例会将这些数据备份到 PowerScale 群集的 /Ifs/hadoop/backup/mydata 目录中.
图 1:将 Hadoop 群集备份到 Isilon
最简单的备份命令如下所示:
[gpadmin@phddas2-0 ~]$ hadoop distcp -skipcrccheck -update /mydata hdfs://all-nc-s-hdfs/backup/mydata
您可以在任何安装了 Hadoop 客户端 (hadoop) 的主机上运行上述命令。运行此命令的用户必须具有读取源文件和写入目标文件的权限。
必须指定 -skipcrccheck 和 -update 选项,以避免对存储在 PowerScale 群集上的目标文件进行 CRC 检查。PowerScale 不存储 Hadoop CRC,计算它的成本会太高。因此,这些选项是防止与 CRC 检查相关的错误所必需的。
下一个参数“/mydata”是源 Hadoop 群集上的源路径。您也可以使用“/”来备份整个 HDFS 命名空间。由于路径不是完全限定,因此它使用 core-site.xml 的 fs.defaultFS 参数中指定的 HDFS NameNode。
最后一个参数“hdfs://all-nc-s-hdfs/backup/mydata”是 PowerScale 群集上的目标路径。主机部分“all-nc-s-hdfs”可以是相对或完全限定的 DNS 名称,例如 all-nc-s-hdfs.example.com。它应该是 PowerScale 群集的 SmartConnect 分区 DNS 名称。目录部分“/backup/mydata”相对于 PowerScale 群集访问分区中定义的 HDFS 根路径。如果您的 HDFS 根路径为 /ifs/hadoop,则此值是 /ifs/hadoop/backup/mydata。
源目录和目标目录中大小相同的文件被认为保持不变并且没有复制。具体而言,文件时间戳没有用于确定更改的文件。有关 DistCp 的更多详细信息,请参阅 Hadoop DistCp 版本 2 指南。
复制权限
默认情况下,对于发起 DistCp 的用户创建的新文件,目标文件的所有者、组和权限会重置为默认值。为源文件定义的任何所有者、组和权限都会丢失。要保留源文件中的此信息,请使用 -p 选项。由于 -p 选项必须执行 chown/chgrp,因此发起 DistCp 的用户必须是目标系统上的超级用户。PowerScale 群集上的 root 用户可用于此目的。例如: [root@phddas2-0 ~]$ hadoop distcp -skipcrccheck -update -pugp /mydata hdfs://all-nc-s-hdfs/backup/mydata
为备份源创建快照
大型数据集的备份可能需要很长时间。在扫描目录结构时,DistCp 进程开始时存在的文件在该文件复制后可能不再存在。文件中的这种更改会导致错误。此外,应用程序可能需要一致的单个时间点备份才能使用。为避免这些问题,建议您创建源的 HDFS 快照,以确保数据集在备份过程中不会更改。这与目标 PowerScale 群集的 SnapshotIQ 功能无关。
要使用 HDFS 快照,您必须先允许特定目录的快照:[gpadmin@phddas2-0 ~]$ hdfs dfsadmin -allowSnapshot /mydata
Allowing snapshot on /mydata succeeded
在使用 DistCp 进行备份之前,创建 HDFS 快照:
[gpadmin@phddas2-0 ~]$ hdfs dfs -createSnapshot /mydata backupsnap Created snapshot /mydata/.snapshot/backupsnap
此快照的名称是 backupsnap。您可以通过 HDFS 路径 /mydata/.snapshot/backupsnap 访问它。在此快照创建之后发生的任何 HDFS 文件更改都不会反映在后续备份中。您可以使用以下命令将快照备份到 PowerScale:
[gpadmin@phddas2-0 ~]$ hadoop distcp -skipcrccheck -update /mydata/.snapshot/backupsnap hdfs://all-nc-s-hdfs/backup/mydata
当备份命令完成运行后,您可以删除快照。这样做可以释放用于保存自快照以来修改的旧版本文件的空间:
[gpadmin@phddas2-0 ~]$ hdfs dfs -deleteSnapshot /mydata backupsnap
为备份目标创建 PowerScale 快照
除了为备份源创建快照之外,还建议您保留备份目标目录的多个快照,以用于恢复较旧版本的文件。
要在 PowerScale 上创建快照,您必须具有 SnapshotIQ 许可证。您可以使用 Web 管理员界面或 CLI 创建快照。要使用 CLI 手动创建单个 PowerScale 快照,请通过 SSH 连接到任意 PowerScale 节点并运行以下命令:all-nc-s-1# isi snapshot snapshots create /ifs/hadoop/backup/mydata --name backup-2014-07-01 --expires 1D --verbose
Created snapshot backup-2014-07-01 with ID 6
您可以将此命令添加到下面的“计划备份”部分中讨论的备份过程。
有关 PowerScale OneFS 快照的更多详细信息,请参阅适用于您的 OneFS 版本的 PowerScale OneFS CLI 管理指南:PowerScale OneFS 信息中心
多个 PowerScale 群集的 SYNCIQ 复制
使用 DistCp 备份到 PowerScale 群集完成后,您可以使用 OneFS SyncIQ 通过 WAN 将快照复制到其他 PowerScale 群集。复制的快照可以为灾难恢复策略提供多功能且高效的组件。
图 2:多个 Isilon 群集的 SynIQ 复制
处理已删除的文件
默认情况下,从源 Hadoop 群集中删除的文件不会从目标 Hadoop 群集中删除。如果您需要删除,请将 -delete 参数添加到 DistCp 命令。使用此命令时,建议为备份目标创建快照,以防需要恢复已删除的文件。
计划备份
您可以使用各种方法自动执行和计划备份 Hadoop 群集的步骤。Apache Oozie 通常用于自动执行 Hadoop 任务,并且它直接支持 DistCp。CRON 还可用于运行 Shell 脚本。要在 SSH 会话中自动运行命令,请启用无密码 SSH。无密码 SSH 允许 CRON 用户连接到 Hadoop 客户端和 PowerScale 群集(如果使用 SnapshotIQ)。
由于 PowerScale 支持 HDFS,因此您可以通过与源文件相同的方式从 Hadoop 应用程序访问 PowerScale 上的备份目标文件。您可以直接使用备份数据,而无需先将其恢复到原始源 Hadoop 环境。此功能可节省分析时间。例如,如果您运行这样的 MapReduce 命令:hadoop jar /usr/lib/gphd/hadoop-mapreduce/hadoop-mapreduce-examples.jar grep /mydata/mydataset1 output1 ABC
您可以使用以下命令针对 PowerScale 上的备份数据集运行 MapReduce 作业:hadoop jar /usr/lib/gphd/hadoop-mapreduce/hadoop-mapreduce-examples.jar grep hdfs://all-nc-s-hdfs/backup/ /mydata/mydataset1 output1 ABC
要指定完全限定的 Hadoop 路径,而不是使用 fs.defaultFS 参数,请与您的应用程序提供商确认详细信息。此外,专为备份和归档而非高性能而设计的 PowerScale 群集可能无法提供与主 Hadoop 环境相同的性能。建议您进行测试,或咨询 Dell PowerScale 以进行适当的规模调整。