錯(cuò)誤信息
org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
Underlying cause: java.sql.SQLException : Access denied for user 'sfpql'@'localhost'
SQL Error code: 1698
Use --verbose for detailed stacktrace.

原因
一般報(bào)Failed to get schema version是連接不上MySQL的原因
排查點(diǎn):
- 看MySQL的驅(qū)動(dòng)是否添加到hive的lib目錄下,并且jar包版本要符合MySQL版本
- 看hive的hive-site.xml文件是否編寫正確
-
connect首字母大寫
connect首字母大寫 -
用戶名密碼檢查
用戶名密碼
-
解決
我的錯(cuò)誤是報(bào)SQL Error code: 1698
原因是因?yàn)樵谧罱腢buntu安裝(當(dāng)然也可能是其他安裝)中,MySQL默認(rèn)使用了UNIX auth_socket plugin插件。
簡(jiǎn)單來(lái)說(shuō)這意味著當(dāng)db_users使用數(shù)據(jù)庫(kù)時(shí),將會(huì)通過(guò)系統(tǒng)用戶認(rèn)證表進(jìn)行認(rèn)證。你可以通過(guò)下面的命令看看你的root用戶是否設(shè)置成了這樣:
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User | Host | plugin |
+------------------+-----------+-----------------------+
| root | localhost | auth_socket |
| mysql.session | localhost | mysql_native_password |
| mysql.sys | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
就像你在查詢語(yǔ)句中看到的那樣,root用戶在使用auth_socket插件。有兩種方法來(lái)解決這個(gè)問(wèn)題:
1. 你可以設(shè)置你的root用戶使用mysql_native_password插件 2. 你可以創(chuàng)建一個(gè)與你的系統(tǒng)用戶一致的新的數(shù)據(jù)庫(kù)用戶(推薦)
(筆者注:方法2即滿足auth_socket插件的要求)
選擇1:
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
選擇2( 用你的操作系統(tǒng)用戶名代替YOUR_SYSTEM_USER) :
mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
# 別忘了設(shè)置密碼
mysql> alter user 'YOUR_SYSTEM_USER'@localhost identified by 'password';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
記住如果你選擇使用方法2,你應(yīng)該通過(guò)使用你的操作系統(tǒng)用戶名來(lái)連接到MySQL(mysql -u YOUR_SYSTEM_USER)。
注意:在一些操作系統(tǒng)中(例如Debian系)‘a(chǎn)uth_socket’插件被叫做’unix_socket’,所以相應(yīng)的SQL命令語(yǔ)句應(yīng)該為UPDATE user SET plugin=‘unix_socket’ WHERE User=‘YOUR_SYSTEM_USER’。

