这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

使用 HDFS 存储位置

Vertica 以原生格式 ROS 将数据存储在存储位置。您可以将存储位置放在本地 Linux 文件系统或 HDFS 中。如果您将存储位置放在 HDFS 中,则必须在 HDFS 中执行额外的配置才能管理它们。这些是 Vertica 中对管理存储位置备份/还原的要求的补充。

如果您使用 HDFS 存储位置,则在启动 Vertica 时 HDFS 数据必须可用。HDFS 群集必须可以运行,且 ROS 文件必须存在。如果您已移动数据文件,或者它们已损坏,或者 HDFS 群集没有响应,则 Vertica 无法启动。

1 - 用于备份和还原的 Hadoop 配置

如果您的 Vertica 群集使用 HDFS 上的存储位置,并且您希望能够使用 vbr 备份和还原这些存储位置,则必须在 HDFS 中启用快照。

Vertica 备份脚本使用 HDFS 的快照功能创建 HDFS 存储位置备份。在 HDFS 可以生成快照之前,目录必须允许快照功能。只有 Hadoop 超级用户可以启用目录上的快照功能。如果数据库管理员同样是 Hadoop 超级用户,则 Vertica 可以自动启用快照功能。

如果 HDFS 不安全,以下说明适用于数据库管理员帐户,通常为 dbadmin。如果 HDFS 使用 Kerberos 安全性,以下说明适用于 Vertica keytab 文件中存储的主体,通常为 vertica。下面的说明使用“数据库帐户”一词指代此用户。

我们建议您让数据库管理员或主体成为 Hadoop 超级用户。如果您无法做到这一点,则必须先启用目录上的快照功能,然后再对其进行配置,以供 Vertica 使用。

让 Vertica 数据库管理员帐户成为超级用户所需执行的步骤取决于您正在使用的 Hadoop 发行版。有关详细信息,请查阅 Hadoop 发行版的文档。

手动启用目录的快照功能

如果不能向数据库帐户授予超级用户身份,您可以转而手动启用各个目录的快照功能。请使用以下命令:

$ hdfs dfsadmin -allowSnapshot path

针对每个节点上的每个目录发出此命令。每当您将新节点添加到 HDFS 群集时,请记得执行此操作。

可生成快照的嵌套目录不受支持,因此您无法通过启用父目录的快照功能来自动启用子目录的快照功能。而必须为每个目录分别启用该功能。

Kerberos 的附加要求

如果 HDFS 使用 Kerberos,那么除了授予 keytab 主体访问权限以外,您还必须授予 Vertica 对某些 Hadoop 配置文件的访问权限。请参阅配置 Kerberos

测试数据库帐户使 HDFS 目录可生成快照的能力

使数据库帐户成为 Hadoop 超级用户后,验证该帐户能否将目录设置为可生成快照:

  1. 以数据库帐户的身份(默认为 dbadmin)登录到 Hadoop 群集。

  2. 在 HDFS 中确定一个可供数据库管理员创建目录的位置。通常情况下,可以使用 /tmp 目录。使用以下命令创建一个测试 HDFS 目录:

    $ hdfs dfs -mkdir /path/testdir
    
  3. 使用以下命令使测试目录可以生成快照:

    $ hdfs dfsadmin -allowSnapshot /path/testdir
    

下面的示例演示了如何创建 HDFS 目录并使其可以生成快照:

$ hdfs dfs -mkdir /tmp/snaptest
$ hdfs dfsadmin -allowSnapshot /tmp/snaptest
Allowing snaphot on /tmp/snaptest succeeded

2 - 移除 HDFS 存储位置

移除 HDFS 存储位置的步骤与移除标准存储位置的步骤类似:

  1. 通过使用 SET_OBJECT_STORAGE_POLICY 更改每个对象的存储位置,从 HDFS 存储位置移除任何现有数据。或者,您可以使用 CLEAR_OBJECT_STORAGE_POLICY。由于 Tuple Mover 不经常运行,请将 enforce-storage-move 参数设置为 true 以立即进行更改。

  2. 使用 RETIRE_LOCATION,在定义了该存储位置的每个主机上停用该位置。将 enforce-storage-move 设置为 true

  3. 使用 DROP_LOCATION 删除每个节点上的位置。

  4. 可以选择将快照和文件从该存储位置的 HDFS 目录中移除。

  5. 执行完整的数据库备份。

有关更改存储策略、更改使用、停用位置和删除位置的详细信息,请参阅管理存储位置

从 HDFS 移除存储位置文件

删除 HDFS 存储位置不会自动清理存储该位置文件的 HDFS 目录。也不会删除备份该位置时创建的任何数据文件快照。这些文件不但占用 HDFS 上的磁盘空间,还使该目录无法再次用作 HDFS 存储位置。Vertica 无法在包含现有文件或子目录的目录中创建存储位置。

您必须登录到 Hadoop 群集,才能将文件从 HDFS 中删除。一个替代方案是,使用一些其他的 HDFS 文件管理工具。

移除备份快照

如果您试图移除具有快照的目录,HDFS 将返回以下错误:

$ hdfs dfs -rm -r -f -skipTrash /user/dbadmin/v_vmart_node0001
rm: The directory /user/dbadmin/v_vmart_node0001 cannot be deleted since
/user/dbadmin/v_vmart_node0001 is snapshottable and already has snapshots

作为备份过程的一部分,Vertica 备份脚本将创建 HDFS 存储位置的快照。如果制作了 HDFS 存储位置的备份,您必须在删除目录之前删除快照。

HDFS 将快照存储在名为 .snapshot 的子目录中。您可以使用标准的 HDFS ls 命令列出目录中的快照。

$ hdfs dfs -ls /user/dbadmin/v_vmart_node0001/.snapshot
Found 1 items
drwxrwx---   - dbadmin supergroup          0 2014-09-02 10:13 /user/dbadmin/v_vmart_node0001/.snapshot/s20140902-101358.629

要删除快照,请使用以下命令:

$ hdfs dfs -removeSnapshot directory snapshotname

下面的示例演示了用于删除上个示例中显示的快照的命令:

$ hdfs dfs -deleteSnapshot /user/dbadmin/v_vmart_node0001 s20140902-101358.629

您必须将每个快照从群集中各个主机的目录中删除。删除快照后,您就可以删除存储位置中的目录。

有关管理和移除快照的详细信息,请参阅 Apache 的 HDFS 快照文档

移除存储位置目录

您可以通过下列任一方法,删除保存存储位置数据的目录:

  • 使用 HDFS 文件管理器删除目录。请参阅 Hadoop 发行版的文档,以确定其是否提供文件管理器。

  • 使用数据库管理员帐户登录到 Hadoop 名称节点,然后使用 HDFS 的 rmr 命令删除目录。有关详细信息,请参阅 Apache 的文件系统 Shell 指南

下面的示例从 Linux 命令行使用 HDFS rmr 命令,来删除 HDFS 存储位置目录 /user/dbamin 中剩余的目录。它使用 -skipTrash 标志来强制立即删除这些文件:

$ hdfsp dfs -ls /user/dbadmin
Found 3 items
drwxrwx---   - dbadmin supergroup          0 2014-08-29 15:11 /user/dbadmin/v_vmart_node0001
drwxrwx---   - dbadmin supergroup          0 2014-08-29 15:11 /user/dbadmin/v_vmart_node0002
drwxrwx---   - dbadmin supergroup          0 2014-08-29 15:11 /user/dbadmin/v_vmart_node0003

$ hdfs dfs -rmr -skipTrash /user/dbadmin/*
Deleted /user/dbadmin/v_vmart_node0001
Deleted /user/dbadmin/v_vmart_node0002
Deleted /user/dbadmin/v_vmart_node0003