使用Hive连接器可以查询和分析存储在Hive数据仓库中的数据。本文为您介绍Hive连接器相关的内容和操作。
背景信息
- 不同格式的数据文件,通常存储在Hadoop分布式文件系统(HDFS)或对象存储系统(例如,阿里云OSS)中。
- 存储着数据文件到Schema和Table映射的元数据。该元数据存储在数据库(例如,MySQL)中,并通过Hive Metastore Service(HMS)访问。
- 一种称为HiveQL的查询语言。该查询语言在分布式计算框架(例如,MapReduce或Tez)上执行。
前提条件
已创建EMR-3.45.0及后续版本和EMR-5.11.0及后续版本,且选择了Presto服务的集群,详情请参见创建集群。
使用方式
Hive连接器支持多种分布式存储系统,包括HDFS、阿里云OSS或Amazon S3的兼容系统,都可以使用Hive连接器查询。
访问Hive Metastore时,必须确保Coordinator节点和所有worker节点能够通过网络访问Hive Metastore以及存储系统。默认情况下,通过Thrift协议访问Hive Metastore的端口号为9083。
Hive连接器支持访问DLF。只需在创建集群时,元数据选择DLF统一元数据,即可让Hive连接器默认指向DLF。
查询示例
进入Presto命令行,详情请参见通过命令方式访问Presto。
执行以下命令,创建测试表。
create table hive.default.doc(id int);
执行以下命令,写入数据。
insert into hive.default.doc values(1),(2);
执行以下命令,查询数据。
select * from hive.default.doc;
返回以下信息。
id ---- 1 2 (2 rows)
默认配置
参数 | 描述 |
hive.metastore.uri | Hive Metastore使用Thrift协议连接的URI。 默认值格式为 连接DLF时可以填任意合法的值。 |
hive.config.resources | HDFS配置文件的列表,多个配置文件时以逗号(,)分隔。这些配置文件必须存在于Presto运行的所有主机上。例如core-site.xml,hdfs-site.xml等。 在EMR集群中,core-site.xml内包含访问OSS所需的配置,不建议随意修改。 |
hive.recursive-directories | 是否允许从表或分区所在位置的子目录读取数据,类似Hive的hive.mapred.supports.subdirectories属性,默认为true。 |
hive.non-managed-table-writes-enabled | 是否启用对非托管(外部)Hive表的写入,默认为true。 |
hive.copy-on-first-write-configuration-enabled | 是否减少hdfsConfiguration的拷贝数,默认为false。 建议保持为默认值false,因为开启该参数后,OSS免密以及LDAP、Kerberos均会失效。 |
hive.hdfs.impersonation.enabled | 是否启用用户代理,默认为false。 如果您在HDFS侧启用了用户代理,则需要开启此配置,否则不需要开启该配置。 |
多连接器
如果您有多个Hive集群,或者同时访问DLF与Hive Metastore,可以通过以下方式配置多连接器:
在
etc/catalog
路径下增加相应数量的.properties后缀的Catalog文件。例如,如果您创建了一个名为sales.properties的属性文件,则Presto将使用其中配置的连接器创建一个名为sales的Catalog。通过将connector.name配置为hive-hadoop2,Presto可以将其识别成一个Hive连接器。
使用EMR提供的占位连接器。
EMR默认提供了5个占位连接器,即connector1到connector5。您可以选择其中任意一个,修改相应配置使之成为第二个Hive连接器。该方式的缺点是查询时的Catalog名称只能是connector1到connector5。