Hive初始化元資料常見報錯
阿新 • • 發佈:2020-09-10
Hive元資料相關配置
hive的配置
下面是Hive元儲存”的儲存位置為MySQL資料庫,必要的配置。包括連線URL,驅動類,資料庫賬號以及密碼
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master1-1:3306/hive?characterEncoding=UTF-8</value> <description>連線的url</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>連線驅動類名</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>********</value> <description>連線資料庫使用者名稱</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>********</value> <description>連線資料庫密碼</description> </property>
mysql資料庫配置
- 首先我們要建立一個用於儲存hive元資料的資料庫
create database hive charset=utf8
2.賦予hive連線mysql使用者遠端的許可權(這裡我使用的是root賬戶來進行連線
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION
3.將連線mysql的驅動包放到hive的lib目錄下
cp mysql-connector-java.jar ${HIVE_HOME}/lib/
初始化hive的元資料
使用schematool 初始化hive的元資料
schematool -initSchema -dbType mysql
檢查資料庫
use hive
show tables;
我們會看到存放hive元資料的資料庫已經生成了很多表,到這裡,就表示你hive元資料配置和初始化成功了!
hive初始化元資料常見的報錯
錯誤1
org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
這裡的排查方法是:
-
檢查hive-site.xml的資料庫使用者名稱密碼有沒有寫錯
-
檢查用於連線的使用者是否有遠端登陸的許可權
錯誤2
[ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
對於這個錯誤,我們把${HADOOP_HOME}/share/hadoop/yarn/lib/jline-0.9.94.jar
這個檔案刪除就可以了
rm ${HADOOP_HOME}/share/hadoop/yarn/lib/jline*.jar
錯誤3
有時候,由於你不是用的root使用者進行安裝會導致一些臨時檔案或者目錄沒有許可權的問題
Logging initialized using configuration in file:/opt/apache-hive-2.3.5-bin/conf/hive-log4j2.properties Async: true
Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
at org.apache.hadoop.fs.Path.initialize(Path.java:254)
at org.apache.hadoop.fs.Path.<init>(Path.java:212)
at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:659)
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:582)
at org.apache.hadoop.hive.ql.session.SessionState.beginStart(SessionState.java:549)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:750)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:239)
at org.apache.hadoop.util.RunJar.main(RunJar.java:153)
Caused by: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
at java.net.URI.checkPath(URI.java:1823)
at java.net.URI.<init>(URI.java:745)
at org.apache.hadoop.fs.Path.initialize(Path.java:251)
我們需要配置一下臨時檔案目錄,而且hive的管理使用者擁有訪問這些目錄的許可權,最好的建立在安裝hive的使用者的使用者目錄下,我這裡是hive使用者,就建立在/home/hive這個目錄下
<property>
<name>Hive.exec.local.scratchdir</name>
<value>/home/hive/tmp/</value>
<description>資原始檔目錄</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/home/hive/tmp/resources</value>
<description>下載資源目錄</description>
</property>
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/home/hive/tmp/operation_logs</value>
<description>日誌檔案目錄</description>