hive连接mysql之疯狂踩坑

这次真的是非常吐血,虽然网上有很多排错教程,但介于我踩的坑实在太多,所以记录一下整个汇总信息

故事要从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&amp;useUnicode=true&amp;createDatabaseIfNotExist=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;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 &amp; 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;

没有报错了,所以把踩过的坑都记下来,希望对大家有帮助。

发布了78 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/yao09605/article/details/103995067