使用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視圖??梢詫?code class="ph codeph" id="codeph-jbs-1hc-0pu">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值數量 |