天天看點

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
  1. 在用于更改 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      
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 個連接配接。