使用Hive连接器可以查询和分析存储在Hive数据仓库中的数据。
背景信息
- 不同格式的数据文件,通常存储在Hadoop分布式文件系统(HDFS)或对象存储系统(例如,阿里云OSS)中。
- 存储着数据文件到Schema和Table映射的元数据。该元数据存储在数据库(例如,MySQL)中,并通过Hive Metastore Service(HMS)访问。
- 一种称为HiveQL的查询语言。该查询语言在分布式计算框架(例如,MapReduce或Tez)上执行。
前提条件
已创建DataLake集群或Hadoop集群,并选择了Presto服务,详情请参见创建集群。
使用限制
- 配置Hive连接器需要配置Hive Metastore Service。
- Hive连接器支持多种分布式存储系统,包括HDFS、阿里云OSS或OSS的兼容系统,都可以使用Hive连接器查询。Coordinator节点和所有worker节点必须能够通过网络访问Hive Metastore以及存储系统。通过Thrift协议访问Hive Metastore的默认端口是9083。
修改Hive连接器配置
修改Hive连接器配置,详情请参见配置连接器。
连接器默认配置
参数 | 描述 |
---|---|
hive.recursive-directories | 允许从表或分区所在位置的子目录读取数据,类似Hive的hive.mapred.supports.subdirectories 属性。
|
hive.metastore.uri | Hive Metastore使用Thrift协议连接的URI。
默认值格式 |
hive.config.resources | HDFS配置文件的列表,多个配置文件时以逗号(,)分隔。这些配置文件必须存在于Presto运行的所有主机上。
注意 仅在必须访问HDFS的情况下配置此项。
|
hive.delta-table-enabled | 是否支持Presto读取Delta Lake表。取值如下:
|
hive.delta-compatible-mode-enabled | Delta Lake表是否启用兼容模式。取值如下:
|
hive.hdfs.impersonation.enabled | 是否启用用户代理。取值如下:
|
多个Hive集群配置
如果您有多个Hive集群,可以在etc/catalog路径下增加相应数量的Catalog文件,确保文件后缀名为.properties。
例如,如果属性文件名为sales.properties,则Presto将使用其中配置的连接器创建一个叫sales的Catalog。
HDFS配置
hive.config.resources
属性以引用所需的HDFS配置文件。
- 仅在需要配置时,才需要额外指定配置文件。建议减少配置文件以包含所需的最少属性集,防止属性间不兼容。
- 配置文件必须存在于Presto运行的所有主机上。如果要引用现有的Hadoop配置文件,请确保将其拷贝到任何未运行Hadoop的Presto节点上。
HDFS用户名与权限
在Presto中为Hive表运行任何CREATE TABLE
或CREATE TABLE AS
语句之前,都需要检查Presto用于访问HDFS的用户是否有权访问Hive的仓库目录。 Hive仓库目录由hive-site.xml中的配置变量hive.metastore.warehouse.dir
指定,默认值为/user/hive/warehouse
。
支持的文件类型
文件类型 | 备注 |
---|---|
ORC | 无 |
Parquet | 无 |
Avro | 无 |
RCText | 使用ColumnarSerDe 的RCFile。
|
RCBinary | 使用LazyBinaryColumnarSerDe 的RCFile。
|
SequenceFile | 无 |
JSON | 使用org.apache.hive.hcatalog.data.JsonSerDe 。
|
CSV | 使用org.apache.hadoop.hive.serde2.OpenCSVSerde 。
|
TextFile | 无 |
支持的表类型
表类型 | 描述 |
---|---|
ACID表 | 在连接3.x版本的Hive Metastore时,Hive连接器支持insert-only和ACID表的读写,且完全支持分区和分桶。
对ACID表支持行级的DELETE与UPDATE,不支持分区键列和桶列的UPDATE,不支持使用Hive Streaming Ingest创建的ACID表,详情Streaming Data Ingest。 |
物化视图 | Hive连接器支持从Hive的物化视图中读取数据。在Presto中,这些视图将以常规的、只读表的形式展示。 |
Hive视图
Hive视图由HiveQL定义,存储在Hive Metastore Service中。
模式 | 描述 |
---|---|
Disabled | 视图中编码的业务逻辑和数据在Presto中是不可见的。
默认行为是忽略Hive视图。 |
Legacy | Hive视图的简单实现,可以读取Presto中的数据。
可以通过配置 如果想为特定的Catalog临时启用此传统访问方式,可以将Catalog Session属性 由于HiveQL与SQL非常相似,因此Legacy方式可以通过SQL语言解释任何定义了视图的HiveQL查询,不做任何转换。 此方式适用于简单的Hive视图,但可能会导致复杂的查询出现问题。例如,如果HiveQL函数具有与SQL相同的签名,但具有不同行为,则返回的结果可能会有所不同。在更极端的情况下,查询可能会失败,甚至无法解析和执行。 |
Experimental | 可以分析、处理与重写Hive视图,包括其包含的表达式和语句。
可以通过配置 使用此模式时,暂不支持以下功能:
|
配置属性
Hive配置属性
Hive连接器支持使用Jindo Table加速。EMR集群中内置了两个Hive连接器,分别为hive.properties
和hive-acc.properties
。hive-acc.properties
内置了JindoTable Native Engine,对ORC或Parquet格式的文件进行加速优化,请根据您SmartData的版本查看相应的文档,详情请参见开启native查询加速。
属性名 | 描述 |
---|---|
hive.config.resources | HDFS配置文件的列表,多个文件时以逗号(,)分隔。这些文件必须存在于Presto运行的所有主机上。
说明 仅在必须访问HDFS的情况下配置该属性。
|
hive.recursive-directories | 允许从表或分区所在位置的子目录读取数据,类似Hive的hive.mapred.supports.subdirectories 属性。
|
hive.ignore-absent-partitions | 当文件系统位置不存在时,忽略该分区而不是报查询失败,但也有可能会跳过原本可能属于表的一部分数据。
默认值为false。 |
hive.storage-format | 建表时的默认文件格式。
默认值为ORC。 |
hive.compression-codec | 写文件时使用的文件编码方式。取值可以为NONE、SNAPPY、LZ4、ZSTD或GZIP。
默认值为GZIP。 |
hive.force-local-scheduling | 强制将分片规划到与处理该分片数据的Hadoop DataNode服务相同的节点上。此配置方式对于Presto与每个DataNode并置的安装很有用,可以提升并置安装的效率。
默认值为false。 |
hive.respect-table-format | 新分区应使用现有的表格式还是Presto的格式。取值如下:
|
hive.immutable-partitions | 新数据能否插入到现存的分区中。
设置为true时, 默认值为false。 |
hive.insert-existing-partitions-behavior | 数据插入现有分区时的行为。取值如下:
|
hive.create-empty-bucket-files | 是否应为没有数据存储的桶创建空文件。取值如下:
|
hive.max-partitions-per-writers | 每个writer的最大分区数。
默认值为100。 |
hive.max-partitions-per-scan | 一次表扫描的最大分区数。
默认值为100,000。 |
hive.hdfs.authentication.type | HDFS身份验证类型。取值如下:
|
hive.hdfs.impersonation.enabled | 是否启用HDFS端用户模拟。取值如下:
|
hive.hdfs.trino.principal | Presto连接HDFS时使用的Kerberos主体。 |
hive.hdfs.trino.keytab | HDFS客户端密钥文件的位置。 |
hive.dfs.replication | HDFS副本因子。 |
hive.security | 默认值为legacy。详情请参见Hive connector security configuration。 |
security.config-file | 当设置hive.security=file 时使用的配置文件路径。
|
hive.non-managed-table-writes-enabled | 启用对非托管(外部)Hive表的写入。
默认值为false。 |
hive.non-managed-table-creates-enabled | 启用对非托管(外部)Hive表的创建。
默认值为true。 |
hive.collect-column-statistics-on-write | 启用在写入时以列为单位自动收集统计信息。详情请参见配置属性。
默认值为true。 |
hive.file-status-cache-tables | 特定表的缓存路径列表。
例如, |
hive.file-status-cache-size | 缓存文件状态条目的最大总数。
默认值为1000000。 |
hive.file-status-cache-expire-time | 缓存路径列表的有效时间。
默认值为1m。 |
hive.rcfile.time-zone | 将时间戳的二进制编码值调整到指定时区。
默认值为JVM default。 说明 Hive 3.1及后续版本,需要将此值设为UTC。
|
hive.timestamp-precision | 指定Timestamp类型Hive列的精度。取值如下:
默认值为MILLISECONDS。 说明 精度高于配置的值时将会四舍五入。
|
hive.temporary-staging-directory-enabled | 控制是否将在hive.temporary-staging-directory-path 中配置的临时模拟目录用于写入操作。 临时模拟目录不会用于写入OSS、加密HDFS或外部位置的无序表。写入排序表时会在排序操作期间使用此路径暂存临时文件。设置为禁用时,目标存储将用于在写入排序表时进行暂存,此方式在写入对象存储时效率低下。
默认值为true。 |
hive.temporary-staging-directory-path | 控制用于写操作的临时暂存目录的位置。
默认值为
/tmp/presto-${USER} 。
说明 ${USER}占位符可用于让每个用户使用不同的位置。
|
hive.translate-hive-views | 启用Hive视图的变换操作。
默认值为false。 |
hive.legacy-hive-view-translation | 使用传统算法转换Hive视图。可以将legacy_hive_view_translation catalog session 属性用于特定的Catalog。
默认值为false。 |
hive.parallel-partitioned-bucketed-writes | 提高分区表和分桶表写入的并行性。
默认值为true。 说明 禁用时,写入线程的数量将仅限于存储桶的数量。
|
ORC格式配置属性
属性名 | 描述 |
---|---|
hive.orc.time-zone | 为未声明时区的旧版ORC文件设置默认时区。
默认值为JVM default。 |
hive.orc.use-columns-names | 按名称访问ORC列。
默认情况下,ORC文件中的列按它们在Hive表定义中的顺序位置进行访问。 默认值为false。 |
Parquet格式配置属性
属性名 | 描述 |
---|---|
hive.parquet.time-zone | 将Timestamp的值调整到指定时区。
默认值为JVM default。 说明 Hive 3.1及后续版本,需要将此值设为UTC。
|
hive.parquet.use-columns-names | 访问Parquet列的方式。取值如下:
catalog session 属性和parquet_use_column_names 功能一样。
|
Metastore配置属性
属性名 | 描述 |
---|---|
hive.metastore | Hive Metastore使用的类型。Presto支持默认的Hive Thrift metastore(thrift)及其衍生产品。
默认值为thrift。 |
hive.metastore-cache-ttl | Hive Metastore缓存的Metastore数据被视为可用的持续时间。
默认值为0s。 |
hive.metastore-cache-maximum-size | Hive Metastore缓存的Metastore数据对象的最大个数。
默认值为10000。 |
hive.metastore-refresh-interval | 访问后异步刷新缓存的Metastore数据。如果缓存的数据是尚未过期的旧数据,则允许后续访问查看新数据。 |
hive.metastore-refresh-max-threads | 刷新Metastore数据缓存的最大线程数。
默认值为10。 |
hive.metastore-timeout | Hive Metastore请求的超时时间。
默认值为10s。 |
Thrift Metastore配置属性
属性名 | 描述 |
---|---|
hive.metastore.uri | Hive Metastore使用Thrift协议连接的URI。
如果提供了多个URI,则会默认使用第一个,其余的当作备用Metastore。此属性是必填项。示例: |
hive.metastore.username | Presto用于访问Hive Metastore的用户名。 |
hive.metastore.authentication.type | Hive Metastore身份验证的方式类型。取值如下:
|
hive.metastore.thrift.impersonation.enabled | 启用Hive Metastore端用户模拟。 |
hive.metastore.thrift.delegation-token.cache-ttl | Metastore Delegation Token缓存的有效期限。
默认值为1h。 |
hive.metastore.thrift.delegation-token.cache-maximum-size | Delegation Token缓存的最大值。
默认值为1000。 |
hive.metastore.thrift.client.ssl.enabled | 连接到Metastore时是否启用SSL。取值如下:
|
hive.metastore.thrift.client.ssl.key | 私钥和客户端证书(keyStore)的路径。 |
hive.metastore.thrift.client.ssl.key-password | 私钥的密码。 |
hive.metastore.thrift.client.ssl.trust-certificate | 服务器证书链(trustStore)的路径。
说明 启用SSL时必填。
|
hive.metastore.thrift.client.ssl.trust-certificate-password | 服务器证书链的密码。 |
hive.metastore.service.principal | Hive Metastore服务的Kerberos规则。 |
hive.metastore.client.principal | Presto连接Hive Metastore服务时使用的Kerberos规则。 |
hive.metastore.client.keytab | Hive Metastore客户端keytab文件的位置。 |
性能调优配置属性
属性名 | 描述 |
---|---|
hive.max-outstanding-splits | 在Scheduler尝试暂停之前,一次查询中每个表扫描的缓存split的目标数量。
默认值为1000。 |
hive.max-splits-per-second | 每次表扫描每秒生成的最大split数,可用于减少存储系统的负载。默认情况下没有限制,即Presto将最大化数据访问的并行度。 |
hive.max-initial-splits | 对于每次表扫描,coordinator首先分配大小不超过max-initial-split-size的文件片段。在分配了max-initial-splits个片段之后,剩余split的最大值由max-split-size决定。
默认值为200。 |
hive.max-initial-split-size | 在已分配的片段数不超过max-initial-splits时,分配给worker节点的单个文件片段的大小。较小的split会导致更高的并行度,从而加速小查询。
默认值为32 MB。 |
hive.max-split-size | 分配给worker节点的单个文件片段的最大值。较小的split会导致更高的并行度,从而可以减少延迟,但也会产生更大的开销并增加系统负载。
默认值为64 MB。 |
表统计数据
Hive连接器支持收集和管理表统计数据以改进查询过程的性能。
列类型 | 可收集信息 |
---|---|
TINYINT | 空值数量、不同的值数量、最大值或最小值 |
SMALLINT | 空值数量、不同的值数量、最大值或最小值 |
INTEGER | 空值数量、不同的值数量、最大值或最小值 |
BIGINT | 空值数量、不同的值数量、最大值或最小值 |
DOUBLE | 空值数量、不同的值数量、最大值或最小值 |
REAL | 空值数量、不同的值数量、最大值或最小值 |
DECIMAL | 空值数量、不同的值数量、最大值或最小值 |
DATE | 空值数量、不同的值数量、最大值或最小值 |
TIMESTAMP | 空值数量、不同的值数量、最大值或最小值 |
VARCHAR | 空值数量、不同的值数量 |
CHAR | 空值数量、不同的值数量 |
VARBINARY | 空值数量 |
BOOLEAN | 空值数量、true或false值数量 |