Hive筆記--安裝

Hive的安裝其實很簡單下載tar包解壓,然後配置一下HIVE_HOME和系統PATH就可以了

然後運行hive

Logging initialized using configuration in jar:file:/home/kira/src/hive/current/lib/hive-common-0.8.1.jar!/hive-log4j.properties
Hive history file=/tmp/kira/hive_job_log_kira_201209101140_767693934.txt

看到以上信息就可以開始在命令行中使用Hive了

先試一下show tables;

結果報錯:

FAILED: Error in metadata: javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
NestedThrowables:
java.lang.reflect.InvocationTargetException
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

這個錯誤出現的原因是Hive自帶的lib中沒有mysql的jar,我用的是mysql-connector-java-5.1.18-bin.jar,拷貝到HIVE_HOME/lib中

再運行,還是報錯,這次錯誤信息不一樣了

FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: The connection property 'useUnicode' only accepts values of the form: 'true', 'false', 'yes' or 'no'. The value 'true;characterEncoding=UTF-8;createDatabaseIfNotExist=true' is not in this set.
NestedThrowables:
java.sql.SQLException: The connection property 'useUnicode' only accepts values of the form: 'true', 'false', 'yes' or 'no'. The value 'true;characterEncoding=UTF-8;createDatabaseIfNotExist=true' is not in this set.
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

這個提示還是很明確的,找到hive-site.xml中的

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/hive?useUnicode=true;characterEncoding=UTF-8;createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

修改爲

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/hive?useUnicode=true&amp;characterEncoding=UTF-8&amp;createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

好了繼續跑

又出錯了

FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Access denied for user 'root'@'localhost' (using password: YES)
NestedThrowables:
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

這次坑爹了,從terminal運行mysql -uroot -p是可以進去的呀

看了一下hive-site.xml,配置mysql用戶名密碼的信息爲:

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>root</value>
  <description>username to use against metastore database</description>
</property>


<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value></value>
  <description>password to use against metastore database</description>
</property>

沒錯呀我的用戶名是root,密碼爲空

然後就是查是否是權限開放的有問題,於是各種GRANT,改user表,都試了一遍還是不行

由於我有很多其他項目在本地都是用的root和空這套用戶名密碼,所以從一開始就不想換用戶名密碼,也就導致所有的修改都沒能成功的原因

後來想到是否是javax.jdo.option.ConnectionPassword配置爲空導致hive的程序使用了NULL而非空字符串做密碼呢

於是只能添加新的用戶名密碼了

進去mysql:mysql -uroot -p

輸入密碼

use mysql;

insert into user(Host,User,Password) values("localhost","hive",password("hive"));

FLUSH PRIVILEGES;

GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'localhost' IDENTIFIED BY 'hive' WITH GRANT OPTION;

FLUSH PRIVILEGES;

然後修改hive-site.xml

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
  <description>username to use against metastore database</description>
</property>


<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>hive</value>
  <description>password to use against metastore database</description>
</property>

再run,總算OK了

到此爲止總算是能跑了,最後那個問題應該是和密碼爲空有關,但是否是上面所說的被hive改爲了NULL,這點沒有看源碼,以後再認證吧!

我的hive版本hive-0.8.1


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