首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Hive 0.13.1 元數據遷移 MySQL 失敗?核心配置缺失與 Derby 殘留排查

     編輯:程式設計綜合問答

故障現象

  • 執行升級腳本 upgrade-0.12.0-to-0.13.0.mysql.sql 成功。
  • 修改 hive-site.xml 配置 MySQL 連接信息(JDBC URL、Driver、用戶、密碼)。
  • 啟動 Hive 後,MySQL 中**未自動創建 hivenew 數據庫/表**,報錯 Another instance of Derby may have already booted the database metastore_db。
  • 刪除 hive-site.xml 後 Hive 仍能啟動 → **配置文件未生效,仍讀取默認 Derby 配置**。

根因定位

  1. 配置文件未被讀取:Hive 啟動腳本 hive 依賴 HIVE_CONF_DIR 環境變量或 --config 參數指定配置目錄。若未設置,默認讀取 $HIVE_HOME/conf,但用戶可能修改了錯誤路徑下的文件。
  2. 關鍵配置項缺失/錯誤:用戶貼出的配置中**缺少核心屬性 javax.jdo.option.ConnectionURL 等的完整 XML 標簽**(被合併顯示),實際文件可能格式錯誤導致解析失敗。
  3. Derby 鎖文件殘留:metastore_db/dbex.lck 未清理,Hive 啟動時檢測到鎖,誤以為另一實例在運行,拋出 ERROR XSDB6。

標準遷移步驟(Hive 0.13 → MySQL)

1. 準備 MySQL

CREATE DATABASE hive_metastore CHARACTER SET latin1 COLLATE latin1_bin;
CREATE USER 'hive'@'%' IDENTIFIED BY 'hivepass';
GRANT ALL PRIVILEGES ON hive_metastore.* TO 'hive'@'%';
FLUSH PRIVILEGES;
# latin1 避免早期版本 UTF-8 索引長度限制

2. 放置驅動

cp mysql-connector-java-5.1.49.jar $HIVE_HOME/lib/
# 版本需與 MySQL 服務器兼容,5.1.x 較安全

3. 正確的 hive-site.xml(完整版)

<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive_metastore?createDatabaseIfNotExist=true&useSSL=false</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hivepass</value>
  </property>
  <property>
    <name>datanucleus.autoCreateSchema</name>
    <value>true</value>
  </property>
  <property>
    <name>datanucleus.fixedDatastore</name>
    <value>false</value>
  </property>
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  </property>
</configuration>

4. 清理 Derby 殘留並初始化

# 刪除本地 Derby 元數據
rm -rf $HIVE_HOME/metastore_db

# 初始化 MySQL Schema (Hive 0.13 提供 schematool)
$HIVE_HOME/bin/schematool -dbType mysql -initSchema
# 或手動執行 hive-schema-0.13.0.mysql.sql

5. 驗證啟動

# 顯式指定配置目錄啟動
HIVE_CONF_DIR=/path/to/conf hive
# 或
hive --config /path/to/conf

# 進入 CLI 檢查
hive> show databases;
hive> create table test(id int);
hive> show tables;

6. MySQL 端驗證

mysql> USE hive_metastore;
mysql> SHOW TABLES;  -- 應看到 TBLS, DBS, PARTITIONS 等 50+ 張表
mysql> SELECT * FROM DBS;  -- 應有默認數據庫記錄

常見坑點檢查表

症狀可能原因解決
MySQL 無表未執行 schematool -initSchema執行初始化
報錯 Access denied用戶權限/密碼/主機名不匹配GRANT ALL ON hive_metastore.* TO 'hive'@'%' IDENTIFIED BY 'pass'
報錯 Unknown databaseJDBC URL 缺少 createDatabaseIfNotExist=true補全參數
報錯 Derby lockmetastore_db/dbex.lck 存在rm -rf metastore_db
配置不生效HIVE_CONF_DIR 未指向修改後的 conf 目錄export HIVE_CONF_DIR=... 或 hive --config ...

總結

Hive 元數據遷移 MySQL **核心在於**:正確的 hive-site.xml 放在正確位置 + 執行 schematool 初始化 Schema + 清理本地 Derby 鎖文件。用戶案例中配置文件未生效是主因,刪除文件後仍能啟動證明 Hive 讀取的是默認內嵌 Derby 配置。按上述標準步驟操作,必能成功遷移。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved