用户模拟 (doAs)

您可以使用用户模拟从 Vertica 访问 HDFS 群集中的数据。这种方法称为 "doAs"(表示 "do As"),因为 Vertica 使用单个代理用户代表另一个 (Hadoop) 用户。模拟的 Hadoop 用户不需要是 Vertica 用户。

在下图中,Alice 是 Hadoop 用户,但不是 Vertica 用户。她以代理用户 vertica-etl 的身份连接到 Vertica。在她的会话中,Vertica 代表 doAs 用户 (Alice) 获得一个委托令牌 (DT),并使用该委托令牌访问 HDFS。

您可以使用带有或不带 Kerberos 的 doAs,只要 HDFS 和 Vertica 匹配即可。如果 HDFS 使用 Kerberos,那么 Vertica 也必须使用 Kerberos。

用户配置

Hadoop 管理员必须创建一个代理用户并允许其代表其他用户访问 HDFS。在 core-site.xml 中设置值,如下例所示:

<name>hadoop.proxyuser.vertica-etl.users</name>
<value>*</value>
<name>hadoop.proxyuser.vertica-etl.hosts</name>
<value>*</value>

在 Vertica 中,创建相应的用户。

会话配置

要代表 Hadoop 用户发出请求,首先设置 HadoopImpersonationConfig 会话参数以指定用户和 HDFS 群集。Vertica 将以该用户身份访问 HDFS,直到会话结束或您更改参数为止。

此会话参数的值是 JSON 对象的集合。每个对象指定一个 HDFS 群集和一个 Hadoop 用户。对于群集,您可以指定名称服务或单个名称节点。如果您使用的是 HA 名称节点,则必须使用名称服务或指定所有名称节点。 HadoopImpersonationConfig 格式 描述了完整的 JSON 语法。

以下示例显示了代表两个不同用户的访问权限。用户 "stephanie" 和 "bob" 是 Hadoop 用户,而不是 Vertica 用户。"vertica-etl" 是 Vertica 用户。


$ vsql -U vertica-etl

=> ALTER SESSION SET
   HadoopImpersonationConfig = '[{"nameservice":"hadoopNS", "doAs":"stephanie"}]';
=> COPY nation FROM 'webhdfs:///user/stephanie/nation.dat';

=> ALTER SESSION SET
   HadoopImpersonationConfig = '[{"nameservice":"hadoopNS", "doAs":"bob"}, {"authority":"hadoop2:50070", "doAs":"rob"}]';
=> COPY nation FROM 'webhdfs:///user/bob/nation.dat';

Vertica 使用从名称节点获取的 Hadoop 委托令牌来模拟 Hadoop 用户。在长时间运行的会话中,令牌可能会过期。Vertica 会尝试自动更新令牌;请参阅令牌过期

测试配置

您可以使用 HADOOP_IMPERSONATION_CONFIG_CHECK 函数测试 HDFS 委托令牌,使用 HCATALOGCONNECTOR_CONFIG_CHECK 测试 HCatalog 连接器委托令牌。