文档

Hive连接器

更新时间:

使用Hive连接器可以查询和分析存储在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。

查询示例

  1. 进入Presto命令行,详情请参见通过命令方式访问Presto

  2. 执行以下命令,创建测试表。

    create table hive.default.doc(id int);
  3. 执行以下命令,写入数据。

    insert into hive.default.doc values(1),(2);
  4. 执行以下命令,查询数据。

    select * from hive.default.doc;

    返回以下信息。

     id
    ----
      1
      2
    (2 rows)

默认配置

参数

描述

hive.metastore.uri

Hive Metastore使用Thrift协议连接的URI。

默认值格式为thrift://<主节点名称>.<集群ID>.<Region名称>.emr.aliyuncs.com:9083

连接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。