使用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。