使用Hive連接器可以查詢和分析儲存在Hive資料倉儲中的資料。
背景資訊
- 不同格式的資料檔案,通常儲存在HadoopDistributed File System(HDFS)或Object Storage Service系統(例如,阿里雲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或外部位置的無序表。寫入排序表時會在排序操作期間使用此路徑暫存臨時檔案。設定為禁用時,目標儲存將用於在寫入排序表時進行暫存,此方式在寫入Object Storage Service時效率低下。預設值為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值數量 |