簡介:Hive Metastore (HMS) 是一種服務,用於在后端 RDBMS(例如 MySQL 或 PostgreSQL)中存儲與 Apache Hive 和其他服務相關的元數據。本文主要分享HMS數據庫設置和優化
設置 Metastore 數據庫
如果您有本地集群,則需要知道如何為 Hive Metastore (HMS) 設置后端數據庫。設置包括安裝受支持的數據庫、配置屬性、指定 Metastore 位置。您還可以配置可選的連接參數。
您需要為 Hive Metastore (HMS) 安裝支持的數據庫來存儲元數據。您可以通過修改hive-site.xml. 您可以使用 Cloudera Manager 安全閥功能而不是hive set key=value在命令行上。
設置后端 Hive Metastore 數據庫
CDP公有雲后端Hive Metastore數據庫僅支持PostgreSQL,一般無需手動安裝。在CDP Private Cloud Base 中,您需要安裝、啟動和配置后端數據庫。
在此過程中,您將在與 HiveServer 不同的節點/集群上安裝數據庫,以便與 Hive、Impala、Spark 和其他組件共享 Hive 元存儲 (HMS)。不要將 HiveServer 和數據庫放在同一個節點上。您的集群中可以有一個或多個 HMS 實例,它們可以在出現問題時接管。
安裝受支持的數據庫。
- MariaDB/MySQL
- PostgreSQL
- Oracle
配置 Metastore 數據庫屬性
在CDP Private Cloud Base 中,您可以通過使用 Cloudera Manager 安全閥功能間接修改hive-site.xml來配置 Hive 和 Hive 元存儲。一個循序漸進的過程向您展示了如何設置一些屬性名稱和值來代替hive set key=value在命令行上使用,這是不受支持的。
此任務假定數據庫正在運行myhost,用戶帳戶是hiveuser,密碼是mypassword。根據您的數據庫類型替換以下連接 URL 和驅動程序名稱。
- MySQL 連接URL:jdbc:mysql://myhost/metastore
MySQL 驅動程序名稱:com.mysql.jdbc.Driver
- Postgres 連接URL:jdbc:postgresql://myhost/metastore
Postgres 驅動程序名稱:jdbc:postgresql://myhost/metastore
- Oracle 連接 URL:jdbc:oracle:thin:@//myhost/xe
Oracle 驅動程序名稱:oracle.jdbc.OracleDriver
- 以下組件正在運行:
- HiveServer
- Hive Metastore
- Metastore 的數據庫,例如默認的 MySQL 服務器
- Hive 客戶端
- 最低要求角色:配置者(也由集群管理員、完全管理員提供)
- 通過導航到Cloudera Manager > Hosts > Role(s)並查看角色列表以查找Hive Metastore Server的完全限定域名或 IP 地址。
2. 在Clusters > Hive Metastore > Configuration 中導航到 Metastore 主機配置,然后搜索 javax.jdo.option.ConnectionURL.
3. 在值中,使用以下語法指定數據庫連接字符串: <connection protocol>://<metastore host>/<metastore database>?createDatabaseIfNotExist=true
在以 XML 格式查看中,將出現 XML 配置片段。
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://10.65.13.98/mydb?createDatabaseIfNotExist=true</value> <description>Database connection string</description> </property>
- 或者,在集群中的所有主機上重復前面的步驟。
- 以相同的方式,在 Metastore 主機(必需)或所有主機(可選)上指定其他必需的連接屬性,如下例所示。
<property> <name>javax.jdo.option.ConnectionDriverName</name> <value>(your driver name)</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>mypassword</value> </property> <property> <name>datanucleus.autoCreateSchema</name> <value>false</value> </property> <property> <name>datanucleus.fixedDatastore</name> <value>true</value> </property> <property> <name>datanucleus.autoStartMechanism</name> <value>SchemaTable</value> </property> <property> <name>hive.metastore.schema.verification</name> <value>true</value> </property>
配置 Metastore 位置和 HTTP 模式
除了需要在CDP Private Cloud Base 中設置的數據庫屬性之外,還必須配置 Metastore URI 屬性。該屬性定義了一個或多個 Metastore 位置。
- 最低要求角色:配置者(也由集群管理員、完全管理員提供)
- 在Clusters > Hive Metastore > Configuration 中,搜索hive-site.xml
- 在用於更改 hive-site.xml 中的屬性的 Hive Metastore 服務器高級配置安全閥中,單擊 + 並hive.metastore.uris使用以下語法添加 屬性:thrift://<n.n.n.n>:9083
Metastore 主機的 IP 地址或完全限定域名 (FQDN) 替換<n.n.n.n>。
只有 hive-site.xml 中的 Hive Metastore Server Default Group 應定義此屬性。
設置 JDBC URL 連接覆蓋
您可以配置 HMS 數據庫連接的細粒度調整。您指定一個 JDBC URL 覆蓋,這取決於您的數據庫,用於建立到 Hive 元存儲數據庫的連接。
此任務僅適用於高級數據庫用戶。使用此覆蓋時,將覆蓋以下屬性
- Hive Metastore 數據庫名稱
- Hive Metastore 數據庫主機
- Hive Metastore 數據庫端口
- 對 Hive Metastore 數據庫啟用 TLS/SSL
- 所需的默認用戶角色是配置員。
- 您知道用於設置以下屬性的值:
- Hive Metastore 數據庫類型
- Hive Metastore 數據庫用戶
- Hive Metastore 數據庫密碼
- 根據您的集群配置設置 Hive Metastore Database JDBC URL Override 屬性的值。
- MySQL
jdbc:mysql://<host>:<port>/<metastore_db>?key=value
- PostgreSQL
jdbc:postgresql://<host>:<port>/<metastore_db>?key=value
- 使用服務名稱的 Oracle JDBC Thin
jdbc:oracle:thin:@//<host>:<port>/<service_name>
- 使用 SID 的 Oracle JDBC Thin
jdbc:oracle:thin:@<host>:<port>:<SID>
- 使用 TNSName 的 Oracle JDBC Thin
jdbc:oracle:thin:@<TNSName>
2. 單擊保存。
3. 單擊 操作>部署客戶端配置。
4. 重新啟動 Hive Metastore。
優化元存儲
與其他調優過程類似,一般 Metastore 調優涉及調整和測試,直到您發現可以提高 Metastore 性能的更改組合。調整建議包括硬件和軟件更改。
通常,您需要限制與 Hive Metastore 的並發連接。隨着打開連接數量的增加,延遲也會增加。后端數據庫問題、Hive 使用不當(例如極其復雜的查詢、連接泄漏和其他因素)都會影響性能。
通常的Metastore 調優
嘗試進行以下更改以調整 HMS 性能:
- 確保單個查詢訪問不超過 10,000 個表分區。如果查詢連接表,計算跨所有表訪問的組合分區計數。
- 調整后端(RDBMS)。HiveServer連接HMS,只有HMS連接RDBMS。后端花費的時間越長,HMS 響應相同請求所需的內存就越多。限制后端數據庫中的連接數。
MySQL:例如,在 /etc/my.cnf 中:
[mysqld] datadir=/var/lib/mysql max_connections=8192 . . .
MariaDB:例如,在 /etc/systemd/system/mariadb.service.d/limits.conf 中:
[Service] LimitNOFILE=24000 . . .
- 使用默認的 thrift 屬性 (8K):
hive.server2.async.exec.threads 8192 hive.server2.async.exec.wait.queue.size 8192 hive.server2.thrift.max.worker.threads 8192
- datanucleus.connectionPool.maxPoolSize為您的應用程序設置。例如,如果 poolSize = 100,有 3 個 HMS 實例(一個專用於壓縮),每個服務器有 4 個池,則可以容納 1200 個連接。
原文鏈接
本文為阿里雲原創內容,未經允許不得轉載。