备份和还原 HDFS 存储位置的要求

备份和还原 HDFS 存储位置时,有一些注意事项:

  • 存储位置的 HDFS 目录必须已启用快照。您可以直接自行配置此功能,或者让数据库管理员的 Hadoop 帐户自动为您执行此操作。有关详细信息,请参阅用于备份和还原的 Hadoop 配置

  • 如果 Hadoop 群集使用 Kerberos,则 Vertica 节点必须有权访问某些 Hadoop 配置文件。请参阅下面的配置 Kerberos

  • 要还原 HDFS 存储位置,Vertica 群集必须能够运行 Hadoop distcp 命令。请参阅下文的在 Vertica 群集上配置 distcp

  • HDFS 存储位置不支持对象级别备份。您必须执行完整数据库备份,才能备份 HDFS 存储位置中的数据。

  • HDFS 存储位置中的数据将备份至 HDFS。此备份可防止数据的意外删除或损坏。但如果整个 Hadoop 群集发生灾难性故障,它并不能防止数据丢失。为了防止数据丢失,您必须为 Hadoop 群集制定备份和灾难恢复计划。

    存储在 Linux 本机文件系统上的数据仍将备份到您在备份配置文件中指定的位置。该数据和 HDFS 存储位置中的数据将由 vbr 备份脚本分别处理。

配置 Kerberos

如果 HDFS 使用 Kerberos,则要备份 HDFS 存储位置,需额外执行以下步骤:

  1. 向每个 Vertica 节点的 Kerberos 主体授予 Hadoop 超级用户权限。

  2. 按照访问 Hadoop 配置文件中所述,将 Hadoop 配置文件复制到您的数据库节点。Vertica 需要访问 core-site.xmlhdfs-site.xmlyarn-site.xml 以进行备份和还原。如果 Vertica 节点共置于 HDFS 节点上,则这些文件已经存在。

  3. 将 HadoopConfDir 参数设置为包含这些文件的目录的位置。如果文件位于多个目录中,则该值可以是路径。例如:

    => ALTER DATABASE exampledb SET HadoopConfDir = '/etc/hadoop/conf:/etc/hadoop/test';
    

    这三个配置文件必须全部存在于每个数据库节点的此路径上。

如果您的 Vertica 节点共置于 HDFS 节点上,而且您使用 Kerberos,则还必须更改某些 Hadoop 配置参数。要想从备份还原为工作状态,就需要执行这些更改。在每个 Vertica 节点上的 yarn-site.xml 中,设置以下参数:

无需在不属于 Vertica 节点的 HDFS 节点上做任何更改。

在 Vertica 群集上配置 distcp

Vertica 群集必须能够运行 Hadoop distcp 命令,才能还原 HDFS 存储位置的备份。要使群集能够运行此命令,最简单的方法是在每个节点上安装几个 Hadoop 程序包。这些程序包必须来自同一个发行版,而且其 Hadoop 版本必须与 Hadoop 群集上运行的版本相同。

您需要遵循的步骤取决于:

  • 包含 HDFS 存储位置的 Hadoop 群集上运行的 Hadoop 发行版和版本。

  • Vertica 群集上运行的 Linux 发行版。

配置概述

配置 Vertica 群集以还原 HDFS 存储位置备份的步骤如下:

  1. 如有必要,在 Vertica 群集中的主机上安装并配置 Java 运行时。

  2. 找到 Hadoop 发行版包存储库的位置。

  3. 在群集中的所有主机上,将 Hadoop 发行版的包存储库添加到 Linux 程序包管理器中。

  4. 在 Vertica 主机上安装必要的 Hadoop 程序包。

  5. 在 Vertica 数据库中设置两个与 Java 和 Hadoop 有关的配置参数。

  6. 确认 Hadoop distcp 命令可在 Vertica 主机上运行。

以下各节将更加详尽地介绍上述步骤。

安装 Java 运行时

Vertica 群集必须安装 Java 虚拟机 (JVM) 才能运行 Hadoop distcp 命令。如果您已出于以下目的配置群集,则其已经安装了 JVM:

如果 Vertica 数据库安装了 JVM,则验证您的 Hadoop 发行版是否支持它。请参阅 Hadoop 发行版的文档,以确定其所支持的 JVM。

如果您的 Hadoop 发行版不支持 Vertica 群集上安装的 JVM,您必须卸载该 JVM。然后,您必须安装 Vertica 和 Hadoop 发行版均支持的 JVM。有关与 Vertica 兼容的 JVM 列表,请参阅 Vertica SDK

如果您的 Vertica 群集没有 JVM(或其现有 JVM 与您的 Hadoop 发行版不兼容),请按照在 Vertica 群集上安装 Java 运行时中的说明进行操作。

找到 Hadoop 发行版的包存储库

许多 Hadoop 发行版均具有自己的安装系统,如 Cloudera Manager 或 Ambari。但它们同样支持使用本机 Linux 程序包(如 RPM 和 .deb 文件)执行手动安装。这些程序包文件均保存在存储库中。您可以配置 Vertica 主机以访问此存储库,以便下载并安装 Hadoop 程序包。

请查阅 Hadoop 发行版的文档,以找到其 Linux 包存储库的位置。这一信息通常可在文档中介绍手动安装技巧的部分找到。

每个 Hadoop 发行版均针对各个主要的 Linux 程序包管理系统维护不同的存储库。请为 Vertica 群集上运行的 Linux 发行版找到特定的存储库。请确保您选择的包存储库与 Hadoop 群集上使用的版本相匹配。

配置 Vertica 节点以访问 Hadoop 发行版的包存储库

配置 Vertica 群集中的节点,使其可以访问 Hadoop 发行版的包存储库。Hadoop 发行版的文档应该说明如何将存储库添加到 Linux 平台。如果该文档没有说明如何将存储库添加到打包系统,请参阅 Linux 发行版的文档。

您需要遵循的步骤取决于 Linux 平台使用的程序包管理系统。通常而言,此过程包括:

  • 下载配置文件。

  • 将配置文件添加到程序包管理系统的配置目录。

  • 对于基于 Debian 的 Linux 发行版,将 Hadoop 存储库加密密钥添加到根帐户 keyring。

  • 更新程序包管理系统的索引,让其发现新的程序包。

您必须将 Hadoop 存储库添加到 Vertica 群集中的所有主机。

安装所需的 Hadoop 程序包

存储库配置完毕后,您就可以安装 Hadoop 程序包。您需要安装的程序包有:

  • hadoop

  • hadoop-hdfs

  • hadoop-client

通常情况下,这些程序包的名称在所有 Hadoop 和 Linux 发行版中都是相同的。这些程序包往往具有其他相关性。请务必接受 Linux 程序包管理器要求安装的所有额外的程序包。

要安装这些程序包,请针对您的 Linux 发行版使用程序包管理器命令。您需要使用的程序包管理器命令取决于您的 Linux 发行版:

  • 在 Red Hat 和 CentOS 上,程序包管理器命令为 yum

  • 在 Debian 和 Ubuntu 上,程序包管理器命令为 apt-get

  • 在 SUSE 上,程序包管理器命令为 zypper

有关安装程序包的说明,请查阅 Linux 发行版的文档。

设置配置参数

您必须设置两个 Hadoop 配置参数,才能使 Vertica 还原 HDFS 数据:

  • JavaBinaryForUDx 是指到 Java 可执行文件的路径。您可能已经设置此值,以使用 Java UDx 或 HCatalog 连接器。您可以使用以下命令,从 Bash 命令外壳中找到默认 Java 可执行文件的路径:

    $ which java
    
  • HadoopHome 是包含 bin/hadoop 的目录(包含 Hadoop 可执行文件的 bin 目录)。此参数的默认值为 /usr。如果您的 Hadoop 可执行文件位于 /usr/bin/hadoop,则默认值是正确的。

以下示例展示了如何设置并随后查看这些参数的值:

=> ALTER DATABASE DEFAULT SET PARAMETER JavaBinaryForUDx = '/usr/bin/java';
=> SELECT current_value FROM configuration_parameters WHERE parameter_name = 'JavaBinaryForUDx';
 current_value
---------------
 /usr/bin/java
(1 row)
=> ALTER DATABASE DEFAULT SET HadoopHome = '/usr';
=> SELECT current_value FROM configuration_parameters WHERE parameter_name = 'HadoopHome';
 current_value
---------------
 /usr
(1 row)

您还可以设置以下参数:

  • HadoopFSReadRetryTimeout 和 HadoopFSWriteRetryTimeout 指定失败前的等待时长。二者的默认值均为 180 秒。如果确信您的文件系统失败速度更快,降低这些值有助于您提高性能。

  • HadoopFSReplication 指定 HDFS 生成的副本数量。Hadoop 客户端默认选择此参数;Vertica 将相同的值用于所有节点。

  • HadoopFSBlockSizeBytes 是要写入到 HDFS 的数据块大小;较大的文件将被划分成这般大小的数据块。默认值为 64MB。

确认 distcp 可以运行

程序包在群集中的所有主机上安装完毕后,数据库应该能够运行 Hadoop distcp 命令。要进行测试:

  1. 数据库超级用户身份登录到群集中的任何主机。

  2. 在 Bash 外壳,输入以下命令:

    $ hadoop distcp
    
  3. 该命令应打印出与下面类似的消息:

    usage: distcp OPTIONS [source_path...] <target_path>
                  OPTIONS
     -async                 Should distcp execution be blocking
     -atomic                Commit all changes or none
     -bandwidth <arg>       Specify bandwidth per map in MB
     -delete                Delete from target, files missing in source
     -f <arg>               List of files that need to be copied
     -filelimit <arg>       (Deprecated!) Limit number of files copied to <= n
     -i                     Ignore failures during copy
     -log <arg>             Folder on DFS where distcp execution logs are
                            saved
     -m <arg>               Max number of concurrent maps to use for copy
     -mapredSslConf <arg>   Configuration for ssl config file, to use with
                            hftps://
     -overwrite             Choose to overwrite target files unconditionally,
                            even if they exist.
     -p <arg>               preserve status (rbugpc)(replication, block-size,
                            user, group, permission, checksum-type)
     -sizelimit <arg>       (Deprecated!) Limit number of files copied to <= n
                            bytes
     -skipcrccheck          Whether to skip CRC checks between source and
                            target paths.
     -strategy <arg>        Copy strategy to use. Default is dividing work
                            based on file sizes
     -tmp <arg>             Intermediate work path to be used for atomic
                            commit
     -update                Update target, copying only missingfiles or
                            directories
    
  4. 在数据库中的其他主机上重复上述步骤,以验证所有主机均可运行 distcp

故障排除

如果您无法运行 distcp 命令,请尝试执行以下步骤:

  • 如果 Bash 找不到 hadoop 命令,您可能需要将 Hadoop 的 bin 目录手动添加到系统搜索路径。另一种方法是,在到 hadoop 二进制文件的搜索路径(如 /usr/bin)的现有目录中创建符号链接。

  • 请确保 Vertica 群集上安装的 Java 版本与您的 Hadoop 发行版兼容。

  • 审查 Linux 程序包安装工具的日志中是否存在错误。在某些情况下,程序包可能没有完全安装,或者由于网络问题而没有被下载。

  • 请确保数据库管理员帐户具有执行 hadoop 命令的权限。您可能必须将该帐户添加到特定的组,才能使其运行必要的命令。