HMS數據庫設置和優化


簡介: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 客戶端
  • 最低要求角色:配置者(也由集群管理員、完全管理員提供)
  1. 通過導航到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>
  1. 或者,在集群中的所有主機上重復前面的步驟。
  2. 以相同的方式,在 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 位置。

  • 最低要求角色:配置者(也由集群管理員、完全管理員提供)
  1. 在Clusters > Hive Metastore > Configuration 中,搜索hive-site.xml
  2. 在用於更改 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 數據庫密碼
  1. 根據您的集群配置設置 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 個連接。

原文鏈接
本文為阿里雲原創內容,未經允許不得轉載。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM