这次真的是非常吐血,虽然网上有很多排错教程,但介于我踩的坑实在太多,所以记录一下整个汇总信息
故事要从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;
没有报错了,所以把踩过的坑都记下来,希望对大家有帮助。