对 HDFS 存储位置进行故障排除

本主题将介绍 HDFS 存储位置的一些常见问题。

HDFS 存储磁盘消耗

默认情况下,HDFS 为其存储的每个文件制作三个副本。这种复制有助于防止由磁盘或系统故障导致的数据丢失。还可以通过允许多个节点处理一个文件请求,来帮助提高性能。

K-Safety 值为 1 或更大的 Vertica 数据库还使用伙伴实例投影以冗余方式存储其数据。

当 K-Safe Vertica 数据库将数据存储在 HDFS 存储位置时,其数据冗余会因为 HDFS 的冗余而增加。HDFS 将存储主投影数据的三个副本外加伙伴实例投影的三个副本,从而总共存储数据的六个副本。

如果您想降低 HDFS 位置使用的磁盘存储量,您可以更改 HDFS 存储的数据副本数量。名为 HadoopFSReplication 的 Vertica 配置参数控制 HDFS 存储的数据副本数量。

您可以通过登录到 Hadoop NameNode 并发出以下命令,确定当前的 HDFS 磁盘使用情况:

$ hdfs dfsadmin -report

此命令可打印出整个 HDFS 存储的使用情况,后面则是 Hadoop 群集中各个节点的详细信息。下面的示例显示了此命令输出的开头部分,其中磁盘总空间已突出显示:

$ hdfs dfsadmin -report
Configured Capacity: 51495516981 (47.96 GB)
Present Capacity: 32087212032 (29.88 GB)
DFS Remaining: 31565144064 (29.40 GB)
DFS Used: 522067968 (497.88 MB)
DFS Used%: 1.63%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
. . .

将一个简单的百万行表加载到 HDFS 存储位置中存储的一个表之后,报告将显示更大的磁盘使用量:

Configured Capacity: 51495516981 (47.96 GB)
Present Capacity: 32085299338 (29.88 GB)
DFS Remaining: 31373565952 (29.22 GB)
DFS Used: 711733386 (678.76 MB)
DFS Used%: 2.22%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
. . .

以下 Vertica 示例演示了下列操作:

  1. 在 HDFS 上创建存储位置。

  2. 删除 Vertica 中的表。

  3. 将 HadoopFSReplication 配置选项设置为 1。这将规定 HDFS 存储 HDFS 存储位置数据的一个副本。

  4. 重新创建表并重新加载数据。

=> CREATE LOCATION 'hdfs://hadoopNS/user/dbadmin' ALL NODES SHARED
    USAGE 'data' LABEL 'hdfs';
CREATE LOCATION

=> DROP TABLE messages;
DROP TABLE

=> ALTER DATABASE DEFAULT SET PARAMETER HadoopFSReplication = 1;

=> CREATE TABLE messages (id INTEGER, text VARCHAR);
CREATE TABLE

=> SELECT SET_OBJECT_STORAGE_POLICY('messages', 'hdfs');
 SET_OBJECT_STORAGE_POLICY
----------------------------
Object storage policy set.
(1 row)

=> COPY messages FROM '/home/dbadmin/messages.txt';
 Rows Loaded
-------------
1000000

现在在 Hadoop 上运行 HDFS 报告将显示磁盘空间使用量减少:

$ hdfs dfsadmin -report
Configured Capacity: 51495516981 (47.96 GB)
Present Capacity: 32086278190 (29.88 GB)
DFS Remaining: 31500988416 (29.34 GB)
DFS Used: 585289774 (558.18 MB)
DFS Used%: 1.82%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
. . .

错误 6966: StorageBundleWriter

将数据加载到小型 Hadoop 群集(数据节点不超过 5 个)上的存储位置时,您可能会遇到错误 6966。此错误是由 HDFS 管理写入管道和复制的方式引起的。您可以通过减少副本数量来缓解此问题,如 [HDFS 存储磁盘消耗](#HDFS Sto)中所述。有关可以在 Hadoop 群集中进行的配置更改,请参阅 Hortonworks 中的这篇博文

创建存储位置时的 Kerberos 身份验证

如果 HDFS 使用 Kerberos 身份验证,那么 CREATE LOCATION 语句将使用 Vertica keytab 主体而不是执行操作的用户的主体进行身份验证。如果因为身份验证错误导致创建失败,请验证您已遵循 Kerberos 中所述的步骤来配置此主体。

如下面的示例所示,使用 Kerberos 在 Hadoop 群集上创建 HDFS 存储位置时,CREATE LOCATION 可以报告正在使用的主体:

=> CREATE LOCATION 'hdfs://hadoopNS/user/dbadmin' ALL NODES SHARED
             USAGE 'data' LABEL 'coldstorage';
NOTICE 0: Performing HDFS operations using kerberos principal [vertica/hadoop.example.com]
CREATE LOCATION

备份或还原失败

有关 HDFS 存储位置的备份/还原问题,请参阅备份和还原故障排除