使用 HCatalog 连接器定义架构
设置 HCatalog 连接器后,您可以用它来定义 Vertica 数据库中的架构,以访问 Hive 数据库中的表。您可以使用 CREATE HCATALOG SCHEMA 语句定义架构。
创建架构时,您必须提供要在 Vertica 中定义的架构名称。其它参数为可选参数。如果您不提供值,Vertica 将使用默认值。Vertica 从 HDFS 配置文件中读取一些默认值;请参阅配置参数。
要创建架构,您必须具有对所有 Hive 数据的读取访问权限。验证创建架构的用户是否已直接或通过授权服务(如 Sentry 或 Ranger)被授予访问权限。dbadmin 用户没有自动的特殊权限。
创建架构后,您可以使用 ALTER HCATALOG SCHEMA 语句更改多个参数。
定义架构后,您可以按照与查询原生 Vertica 表相同的方式,查询 Hive 数据仓库中的数据。下面的示例演示了,如何创建 HCatalog 架构并随后查询几个系统表以检查新架构的内容。有关这些表的详细信息,请参阅查看 Hive 架构和表元数据。
=> CREATE HCATALOG SCHEMA hcat WITH HOSTNAME='hcathost' PORT=9083
HCATALOG_SCHEMA='default' HIVESERVER2_HOSTNAME='hs.example.com'
SSL_CONFIG='/etc/hadoop/conf/ssl-client.xml' HCATALOG_USER='admin';
CREATE SCHEMA
=> \x
Expanded display is on.
=> SELECT * FROM v_catalog.hcatalog_schemata;
-[ RECORD 1 ]----------------+-------------------------------------------
schema_id | 45035996273748224
schema_name | hcat
schema_owner_id | 45035996273704962
schema_owner | admin
create_time | 2017-12-05 14:43:03.353404-05
hostname | hcathost
port | -1
hiveserver2_hostname | hs.example.com
webservice_hostname |
webservice_port | 50111
webhdfs_address | hs.example.com:50070
hcatalog_schema_name | default
ssl_config | /etc/hadoop/conf/ssl-client.xml
hcatalog_user_name | admin
hcatalog_connection_timeout | -1
hcatalog_slow_transfer_limit | -1
hcatalog_slow_transfer_time | -1
custom_partitions | f
=> SELECT * FROM v_catalog.hcatalog_table_list;
-[ RECORD 1 ]------+------------------
table_schema_id | 45035996273748224
table_schema | hcat
hcatalog_schema | default
table_name | nation
hcatalog_user_name | admin
-[ RECORD 2 ]------+------------------
table_schema_id | 45035996273748224
table_schema | hcat
hcatalog_schema | default
table_name | raw
hcatalog_user_name | admin
-[ RECORD 3 ]------+------------------
table_schema_id | 45035996273748224
table_schema | hcat
hcatalog_schema | default
table_name | raw_rcfile
hcatalog_user_name | admin
-[ RECORD 4 ]------+------------------
table_schema_id | 45035996273748224
table_schema | hcat
hcatalog_schema | default
table_name | raw_sequence
hcatalog_user_name | admin
配置参数
如果您在创建架构时未覆盖这些值,HCatalog 连接器将使用 Hadoop 配置文件中的以下值。
使用分区数据
Hive 支持对数据进行分区,如下例所示:
hive> create table users (name varchar(64), address string, city varchar(64))
partitioned by (state varchar(64)) stored as orc;
Vertica 利用元数据(ORC 和 Parquet)中提供的格式的分区信息。查询可以完全跳过不相关的分区(分区修剪),Vertica 不需要实体化分区列。有关如何在 Vertica 中使用分区的详细信息,请参阅分区文件路径。有关如何在 Hive 中创建兼容分区的详细信息,请参阅适用于 Vertica 集成的 Hive 入门知识。
默认情况下,Hive 将分区信息存储在表定义的路径下,可能成为 Hive 本地的信息。但是,Hive 用户也可以选择将分区信息存储在其他位置,例如 S3 等共享位置,如下例所示:
hive> alter table users add partition (state='MA')
location 's3a://DataLake/partitions/users/state=MA';
因此,在查询执行期间,Vertica 必须查询 Hive 以获取表分区信息的位置。
由于额外的 Hive 查询可能很昂贵,因此 Vertica 默认仅在 Hive 的默认位置查找分区信息。如果您的 Hive 表指定了自定义位置,请使用 CUSTOM_PARTITIONS 参数:
=> CREATE HCATALOG SCHEMA hcat WITH HOSTNAME='hcathost' PORT=9083
HCATALOG_SCHEMA='default' HIVESERVER2_HOSTNAME='hs.example.com'
SSL_CONFIG='/etc/hadoop/conf/ssl-client.xml' HCATALOG_USER='admin'
CUSTOM_PARTITIONS='yes';
Vertica 可以访问 S3 和 S3a 方案中的分区位置,不支持 S3n 方案。
HIVE_CUSTOM_PARTITIONS_ACCESSED 系统表记录了查询中使用的所有自定义分区位置。
将 HCatalog 连接器与 WebHCat 一起使用
默认情况下,HCatalog 连接器使用 HiveServer2 访问 Hive 数据。如果您改用 WebHCat,请在创建架构之前将 HCatalogConnectorUseHiveServer2 配置参数设置为 0,如下例所示。
=> ALTER DATABASE DEFAULT SET PARAMETER HCatalogConnectorUseHiveServer2 = 0;
=> CREATE HCATALOG SCHEMA hcat WITH WEBSERVICE_HOSTNAME='webhcat.example.com';
如果您之前使用过 WebHCat,则可以通过将配置参数设置为 1 并使用 ALTER HCATALOG SCHEMA 设置 HIVESERVER2_HOSTNAME 来切换到使用 HiveServer2。您不需要移除 WebHCat 值;HCatalog 连接器使用 HCatalogConnectorUseHiveServer2 的值来确定要使用的参数。