HDFS 文件系统
HDFS 是 Hadoop 分布式文件系统。您可以使用 webhdfs
和 swebhdfs
架构通过 WebHDFS 服务访问数据。Vertica 还支持 hdfs
架构,默认情况下使用 WebHDFS。要让 hdfs
URI 使用已弃用的 LibHDFS++ 包,请将 HDFSUseWebHDFS 配置参数设置为 0(禁用)。
如果您指定 webhdfs
URI,但 Hadoop HTTP 策略 (dfs.http.policy
) 设置为 HTTPS_ONLY,Vertica 会自动使用 swebhdfs
。
如果您使用 LibHDFS++,则 WebHDFS 服务必须仍然可用,因为 Vertica 回退到 WebHDFS 以执行不受 LibHDFS++ 支持的操作。
已弃用
已弃用对 LibHDFS++ 的支持。将来,HDFSUseWebHDFS 会在所有情况下启用,且hdfs
URI 将等效于 webhdfs
URI。
URI 格式
webhdfs
、swebhdfs
和 hdfs
架构中的 URI 都有两种格式,具体取决于您是指定名称服务,还是指定主机和名称节点的端口:
-
[[s]web]hdfs://[nameservice]/path
-
[[s]web]hdfs://namenode-host:port/path
字符可以进行 URL 编码(%NN,其中 NN 是两位十六进制数),但不是必须的,除非必须对“%”字符进行编码。
要使用 HDFS 配置文件中指定的默认名称服务,请省略 nameservice。此速记仅用于读取外部数据,而不用于创建存储位置。
将 Vertica 与多个 HDFS 群集一起使用时,始终显式指定名称服务或主机。名称服务或主机名必须全局唯一。使用 [web]hdfs:///
可能会产生意外结果,因为 Vertica 使用它找到的第一个 fs.defaultFS
值。
身份验证
Vertica 可以对 Cloudera 或 Hortonworks HDFS 群集使用 Kerberos 身份验证。请参阅访问已进行 Kerberize 的 HDFS 数据。
对于加载和导出数据,Vertica 可以通过 swebhdfs
架构访问受 mTLS 保护的 HDFS 群集。您必须创建证书和密钥并设置 WebhdfsClientCertConf 配置参数。
如果指定 TEMPORARY 关键字,则可以使用 CREATE KEY 和 CREATE CERTIFICATE 创建临时的会话范围值。临时密钥和证书存储在内存中,而不是磁盘上。
WebhdfsClientCertConf 配置参数保存一个或多个 HDFS 群集的客户端凭据。该值是一个 JSON 字符串,列出名称服务或权限及其对应的键。您可以在会话或数据库级别配置参数。在数据库级别设置参数有以下额外要求:
-
UseServerIdentityOverUserIdentity 配置参数必须设置为 1 (true)。
-
用户必须是 dbadmin,或必须有权访问 HDFS 中的用户存储位置。
以下示例显示了 mTLS 的用法。密钥和证书值本身不会显示,只显示开始标记和结束标记:
=> CREATE TEMPORARY KEY client_key TYPE 'RSA'
AS '-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----';
-> CREATE TEMPORARY CERTIFICATE client_cert
AS '-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----' key client_key;
=> ALTER SESSION SET WebhdfsClientCertConf =
'[{"authority": "my.hdfs.namenode1:50088", "certName": "client_cert"}]';
=> COPY people FROM 'swebhdfs://my.hdfs.namenode1:50088/path/to/file/1.txt';
Rows Loaded
-------------
1
(1 row)
要配置对多个 HDFS 群集的访问,请定义密钥和证书,然后在 WebhdfsClientCertConf 的值中为每个群集包括一个对象:
=> ALTER SESSION SET WebhdfsClientCertConf =
'[{"authority" : "my.authority.com:50070", "certName" : "myCert"},
{"nameservice" : "prod", "certName" : "prodCert"}]';
配置参数
以下数据库配置参数适用于 HDFS 文件系统。您可以使用适当的 ALTER 语句设置不同级别的参数,例如 ALTER SESSION...SET PARAMETER。 查询 CONFIGURATION_PARAMETERS 系统表以确定哪些级别(节点、会话、用户、数据库)对给定参数有效。 有关 Hadoop 相关的所有参数的信息,请参阅 Hadoop 参数。
- EnableHDFSBlockInfoCache
- 布尔值,是否将规划启动程序时收集的块位置元数据分发到所有数据库节点以便执行,减少名称节点争用现象。默认为已禁用。
- HadoopConfDir
- 包含从 Hadoop 复制的 XML 配置文件的目录路径。相同的路径必须在每个 Vertica 节点上都有效。文件将由运行 Vertica 服务器进程的 Linux 用户进行访问。
- HadoopImpersonationConfig
- 会话参数,用于指定 HDFS 访问的委派令牌或 Hadoop 用户。请参阅 HadoopImpersonationConfig 格式了解有关此参数值的信息,请参阅代理用户和委托令牌了解有关更一般的上下文。
- HDFSUseWebHDFS
- Boolean。如果为 true(默认值),则
hdfs
架构中的 URI 将被视为在webhdfs
架构中。如果为 false,Vertica 会尽可能使用 LibHDFS++,但如果 LibHDFS++ 不支持,某些操作仍可使用 WebHDFS。 - WebhdfsClientCertConf
- 一个 JSON 字符串,用于访问一个或多个 WebHDFS 服务器的 mTLS 配置。每个对象必须指定一个
nameservice
或authority
字段和一个certName
字段。请参阅身份验证。
配置文件
HadoopConfDir 中指定的路径必须包含下表中所列文件的目录。Vertica 将在数据库启动时读取这些文件。如果您未设置值,Vertica 会在 /etc/hadoop/conf 中查找文件。
如果未定义属性,Vertica 将使用表中显示的默认值。如果没有指定属性的默认值,则配置文件必须指定一个值。
如果使用高可用性 (HA) 名称节点,则还必须在 hdfs-site.xml 中定义单个名称节点。
注意
如果您在 HDFS 上使用 Eon 模式和公共存储,且设置 dfs.encrypt.data.transfer,则必须使用swebhdfs
架构进行公共存储。
要验证 Vertica 能否在 HadoopConfDir 中找到配置文件,请使用 VERIFY_HADOOP_CONF_DIR 函数。
要通过 hdfs
架构测试访问,请使用 HDFS_CLUSTER_CONFIG_CHECK 函数。
有关测试配置的详细信息,请参阅验证 HDFS 配置。
要重新读取配置文件,请使用 CLEAR_HDFS_CACHES 函数。
名称节点和名称服务
您可以使用默认名称节点(不指定名称节点或名称服务)访问 HDFS 数据:
=> COPY users FROM 'webhdfs:///data/users.csv';
Vertica 使用 fs.defaultFS
Hadoop 配置参数来查找名称节点。(然后,它使用该名称节点来查找数据。)您可以改为使用以下格式显式指定主机和端口:
webhdfs://nn-host:nn-port/
指定的主机是名称节点,而不是单个数据节点。如果您使用的是高可用性 (HA) 名称节点,则不应使用显式主机,因为高可用性是通过名称服务提供的。
如果 HDFS 群集使用高可用性名称节点或定义名称服务,请使用名称服务而不是主机和端口,格式为 webhdfs://nameservice/
。您指定的名称服务必须在 hdfs-site.xml
中定义。
以下示例显示了如何使用名称服务 hadoopNS:
=> CREATE EXTERNAL TABLE users (id INT, name VARCHAR(20))
AS COPY FROM 'webhdfs://hadoopNS/data/users.csv';
如果您使用 Vertica 从多个 HDFS 群集访问数据,请始终在 URL 中使用显式名称服务或主机。使用 ///
速记可能会产生意外结果,因为 Vertica 使用它找到的 fs.defaultFS
的第一个值。要访问多个 HDFS 群集,您必须使用全局唯一的主机名和服务名。有关详细信息,请参阅配置 HDFS 访问。