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

返回本页常规视图.

配置 HDFS 访问

Vertica 使用 Hadoop 群集配置中的信息来支持读取数据(COPY 或外部表)。在 Eon 模式下,它还使用此信息来访问 HDFS 上的公共存储。因此,Vertica 节点必须有权访问某些 Hadoop 配置文件。

对于使用 Kerberos 身份验证的共置群集和单独群集,请按照为 Kerberos 身份验证配置 Vertica中的说明为 Kerberos 配置 Vertica。

Vertica 需要访问所有名称节点和数据节点上的 WebHDFS 服务和端口。有关 WebHDFS 端口的详细信息,请参阅 Cloudera 文档中的 HDFS 端口

访问 Hadoop 配置文件

您的 Vertica 节点需要访问某些 Hadoop 配置文件:

  • 如果 Vertica 共置于 HDFS 节点上,那么这些配置文件已经存在。
  • 如果 Vertica 在单独的群集上运行,您必须将所需文件复制到所有数据库节点。实现这一目标的一个简单方法是,将 Vertica 节点配置为 Hadoop 的边缘节点。客户端应用程序在边缘节点上运行;从 Hadoop 的角度来看,Vertica 是一个客户端应用程序。您可以使用 Ambari 或 Cloudera Manager 配置边缘节点。有关详细信息,请参阅 Hadoop 供应商的文档。

验证 HadoopConfDir 配置参数的值(请参阅Hadoop 参数)是否包含一个包括 core-site.xmlhdfs-site.xml 文件的目录。如果您未设置值,Vertica 会在 /etc/hadoop/conf 中查找文件。对于所有 Vertica 用户,该目录由运行 Vertica 服务器进程的 Linux 用户访问。

Vertica 使用这些配置文件中定义的多个属性。这些属性列在 HDFS 文件系统 中。

使用具有高可用性 NameNode 的群集

如果您的 Hadoop 群集使用高可用性 (HA) 名称节点,请验证 dfs.nameservices 参数和各个名称节点是否在 hdfs-site.xml 中定义。

使用多个 Hadoop 群集

在某些情况下,Vertica 群集需要访问多个 HDFS 群集。例如,您的企业可能对不同的区域使用单独的 HDFS 群集,或者您可能需要来自测试和部署群集的数据。

要支持多个群集,请执行以下步骤:

  1. 将所有 HDFS 群集的配置文件复制到您的数据库节点。您可以将复制的文件放置在 Vertica 可读的任何位置。但是,作为最佳实践,您应将它们全部放在同一个目录树中,每个 HDFS 群集有一个子目录。所有数据库节点上的位置必须相同。

  2. 设置 HadoopConfDir 配置参数。该值是一个以冒号分隔的路径,其中包含所有 HDFS 群集的目录。

  3. 创建外部表或复制数据时,在 URL 中使用显式名称节点或名称服务。不要使用 hdfs:///,因为它可能不明确。有关 URL 的详细信息,请参阅 HDFS 文件系统

Vertica 直接连接到名称节点或名称服务;它不以其他方式区分 HDFS 群集。因此,HDFS 名称节点和名称服务的名称必须是全局唯一的。

验证配置

使用 VERIFY_HADOOP_CONF_DIR 函数验证 Vertica 是否可以在 HadoopConfDir 中找到配置文件。

使用 HDFS_CLUSTER_CONFIG_CHECK 函数通过 hdfs 方案测试访问。

有关测试配置的详细信息,请参阅验证 HDFS 配置

更新配置文件

如果您在启动 Vertica 后更新配置文件,请使用下面的语句对其进行刷新:

=> SELECT CLEAR_HDFS_CACHES();

CLEAR_HDFS_CACHES 函数还刷新有关在高可用性 (HA) Hadoop 群集中哪个名称节点处于活动状态的信息。因此,调用此函数后的第一次请求很慢,因为与名称节点的初始连接可能需要 15 秒以上。

1 - 验证 HDFS 配置

使用 EXTERNAL_CONFIG_CHECK 函数可测试对 HDFS 的访问。此函数调用其他几个函数。如果您更喜欢测试单个组件,或者如果某些测试不适用于您的配置,则可以单独调用这些函数。例如,如果您不使用 HCatalog 连接器,则不需要调用该函数。函数为:

要运行所有测试,请调用 EXTERNAL_CONFIG_CHECK(不带实参):

=> SELECT EXTERNAL_CONFIG_CHECK();

要仅测试某些权限、名称服务或 Hive 架构,请传递单个字符串实参。格式是“键=值”对的逗号分隔列表,其中键为 "authority"、"nameservice" 和 "schema"。值传递给所有子函数;有关如何解释值的详细信息,请参阅这些参考页面。

以下示例仅测试名为 "ns1" 的名称服务的配置:

=> SELECT EXTERNAL_CONFIG_CHECK('nameservice=ns1');

2 - 排除 HDFS 数据读取故障

访问 HDFS 中的数据时,可能会遇到以下问题。

使用 [web]hdfs:/// 的查询显示意外结果

如果您使用 /// 简写查询外部表并看到意外结果(例如测试群集中的生产数据),请验证 HadoopConfDir 是否设置为您期望的值。HadoopConfDir 配置参数定义了用于搜索 Vertica 解析文件位置所需的 Hadoop 配置文件的路径。HadoopConfDir 参数可以在会话级别设置,覆盖数据库中设置的永久值。

要调试 /// URL 的问题,请尝试将 URL 替换为使用显式名称服务或名称节点的 URL。如果显式 URL 有效,则问题在于简写的解析。如果显式 URL 也没有按预期工作,则问题出在其他地方(例如您的名称服务)。

使用 HA 时查询需要很长时间才能运行

HDFS 中的高可用性名称节点功能允许名称节点故障转移到备用名称节点。dfs.client.failover.max.attempts 配置参数(在 hdfs-site.xml 中)指定故障转移时尝试的次数。如果未设置此参数,Vertica 将使用默认值 4。在达到最大故障转移尝试次数后,Vertica 会断定 HDFS 群集不可用并中止操作。Vertica 使用 dfs.client.failover.sleep.base.millisdfs.client.failover.sleep.max.millis 参数来决定重试之间的等待时间。典型范围是 500 毫秒到 15 秒,连续重试的等待时间更长。

另一个参数 ipc.client.connect.retry.interval 指定尝试之间的等待时间,典型值为 10 到 20 秒。

Cloudera 和 Hortonworks 都提供可自动生成配置文件的工具。这些工具可能将最大故障转移尝试次数设置为更高的数(50 或 100)。如果 HDFS 群集不可用(所有名称节点都无法访问),Vertica 可能会在尝试连接时出现长时间挂起(几分钟到几小时)。

QUERY_EVENTS 系统表记录了故障转移尝试。以下示例展示了如何查询此表以查找这些事件:

=> SELECT event_category, event_type, event_description, operator_name,
   event_details, count(event_type) AS count
   FROM query_events
   WHERE event_type ilike 'WEBHDFS FAILOVER RETRY'
   GROUP BY event_category, event_type, event_description, operator_name, event_details;
-[ RECORD 1 ]-----+---------------------------------------
event_category    | EXECUTION
event_type        | WEBHDFS FAILOVER RETRY
event_description | WebHDFS Namenode failover and retry.
operator_name     | WebHDFS FileSystem
event_details     | WebHDFS request failed on ns
count             | 4

您可以等待 Vertica 完成或中止连接,或者将 dfs.client.failover.max.attempts 参数设置为较低的值。

使用 LibHDFS++ 时出现 WebHDFS 错误

创建外部表或者加载数据并使用 hdfs 方案时,您可能会看到 WebHDFS 失败的错误消息。此类错误消息表明,Vertica 无法使用 hdfs 方案并已回退到 webhdfs,但并不表明 WebHDFS 的配置不正确。

首先验证 HadoopConfDir 配置参数的值(可以在会话级别设置该参数)。然后,验证找到的 HDFS 配置文件是否具有适用于 Hadoop 群集的正确 WebHDFS 配置。有关使用这些文件的信息,请参阅配置 HDFS 访问。有关 WebHDFS 配置的信息,请参阅 Hadoop 文档。

Vertica 在名称节点上施加了过多负载 (LibHDFS++)

当包括 Vertica 在内的客户端需要定位数据时,大型 HDFS 群集有时会在名称节点上遇到繁重的负载。如果您的名称节点对此负载敏感并且您使用的是 LibHDFS++,则可以指示 Vertica 将有关块位置的元数据分发到其节点,这样它们就不必经常联系名称节点。在没有争用名称节点的部署中,分发此元数据可能会降低数据库性能。产生这种性能影响的原因是数据必须是序列化和分布式的。

如果保护名称节点免受负载比查询性能更重要,请将 EnableHDFSBlockInfoCache 配置参数设置为 1 (true)。通常这适用于名称节点争用已经成为问题的大型 HDFS 群集。

此设置适用于通过 LibHDFS++(hdfs 方案)进行的访问。有些时候,LibHDFS++ 会退回到不使用此设置的 WebHDFS。如果您启用了此设置,而仍然看到 Vertica 名称节点上的流量很高,请查看 QUERY_EVENTS 系统表中的 LibHDFS++ UNSUPPORTED OPERATION 事件。

Kerberos 身份验证错误

如果 Hadoop 频繁使票证过期,即使票证有效,Kerberos 身份验证也可能失败。身份验证也可能由于 Hadoop 和 Vertica 节点之间的时钟偏差而失败。有关详细信息,请参阅Kerberos 身份验证故障排除