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;

沒有報錯了,所以把踩過的坑都記下來,希望對大家有幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章