這次真的是非常吐血,雖然網上有很多排錯教程,但介於我踩的坑實在太多,所以記錄一下整個彙總信息
故事要從hive啓動開始,如果你的hive啓動不起來,
是因爲你的$HADOOP_HOME/etc/hadoop/hadoop-env.sh
當中的HADOOP_CLASSPATH
配置的不對,這個不用配置哈,使用默認的就可以。我是畫蛇添足了。
啓動hive之後:
hive> show databases;
FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
又報錯!!!
本來想用內置的Derby數據庫練習的,逼我配置mysql
首先安裝mysql這個是很簡單的,沒什麼出錯的可能。這裏就不贅述了。
使用root進入mysql
$ sudo mysql -u root
這種模式下是不需要密碼的,其實是我忘記密碼了
下面我們要建一個給hive用的數據庫,然後建一個給hive用的賬號
mysql > create database metastore;
mysql > create 'hive'@'localhost' identified by 'password'
mysql > revoke all privileges, grant option from 'hive'@'localhost';
mysql > GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY 'password';
mysql > FLUSH PRIVILEGES;
mysql > ALTER DATABASE metastore CHARACTER SET latin1;
# 別急着走,還要把建的庫刪掉,不然待會兒沒法初始化
mysql > drop database metastore;
mysql > exit;
然後是配置hive-site.xml,這是關鍵一步,
需要修改的內容有以下這些:
# 這邊地址和數據庫按自己要求改
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/metastore?autoReconnect=true&useUnicode=true&createDatabaseIfNotExist=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>hive.druid.metadata.db.type</name>
<value>mysql</value>
<description>
Expects one of the pattern in [mysql, postgresql, derby].
Type of the metadata database.
</description>
</property>
<property>
<name>hive.metastore.db.type</name>
<value>mysql</value>
<description>
Expects one of [derby, oracle, mysql, mssql, postgres].
Type of database used by the metastore. Information schema & JDBCStorageHandler depend on it.
</description>
</property>
保存配置
這時候如果你和我一樣沒有mysql-connector-java
那麼你就需要去官網下載一個,或者百度一下。下載好之後把解壓後的jar文件放到$HIVE_HOME/lib下
文件名類似這樣:mysql-connector-java-5.1.48.jar
這個時候就可以初始化hive了
運行如下命令:
$ schematool -dbType mysql -initSchema --verbose
這個命令只能一次運行,如果之前運行過,就把mysql當中的metastore這個database再刪除一遍吧。
沒有報錯就OK了
對了,一開始是哪裏報錯來着??
現在我們再進入hive的sheil
hive> show databases;
OK
default
Time taken: 1.738 seconds, Fetched: 1 row(s)
hive> exit;
沒有報錯了,所以把踩過的坑都記下來,希望對大家有幫助。