upgrade-0.12.0-to-0.13.0.mysql.sql 成功。hive-site.xml 配置 MySQL 連接信息(JDBC URL、Driver、用戶、密碼)。Another instance of Derby may have already booted the database metastore_db。hive-site.xml 後 Hive 仍能啟動 → **配置文件未生效,仍讀取默認 Derby 配置**。hive 依賴 HIVE_CONF_DIR 環境變量或 --config 參數指定配置目錄。若未設置,默認讀取 $HIVE_HOME/conf,但用戶可能修改了錯誤路徑下的文件。javax.jdo.option.ConnectionURL 等的完整 XML 標簽**(被合併顯示),實際文件可能格式錯誤導致解析失敗。metastore_db/dbex.lck 未清理,Hive 啟動時檢測到鎖,誤以為另一實例在運行,拋出 ERROR XSDB6。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 索引長度限制
cp mysql-connector-java-5.1.49.jar $HIVE_HOME/lib/
# 版本需與 MySQL 服務器兼容,5.1.x 較安全
<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>
# 刪除本地 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
# 顯式指定配置目錄啟動
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;
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 database | JDBC URL 缺少 createDatabaseIfNotExist=true | 補全參數 |
| 報錯 Derby lock | metastore_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 配置。按上述標準步驟操作,必能成功遷移。