hive+mysql安裝


hive安裝

剛剛安裝好hadoop迫不及待要玩下hive,所以自己找了些資料,安裝了下hive,這里記錄詳細的安裝過程和碰到的問題:

1.在安裝hadoop之前首先確定hadoop已經安裝成功,具體安裝方法請參考hadoop安裝。

2.下載hive版本 我下載的是  

下載地址為http://hive.apache.org/releases.htm

解壓文件:

  1. tar -zxvf hive-0.7.0-bin.tar.gz  
  1. tar -zxvf hive-0.7.0-bin.tar.gz  

3.配置環境變量:

  1. [root@localhost hive]# vim /etc/profile  
  1. [root@localhost hive]# vim /etc/profile  
  1. export HADOOP_HOME=/root/hadoop-0.20.2  
  2. export PATH=$PATH:$HADOOP_HOME/bin  
  3.   
  4. export HIVE_HOME=/usr/hive/hive-0.7.0-bin  
  5. PATH=$PATH:$HIVE_HOME/bin  
  6.   
  7. export PATH  
  8. export JAVA_HOME=/usr/java/jdk1.7.0_01  
  1. export HADOOP_HOME=/root/hadoop-0.20.2  
  2. export PATH=$PATH:$HADOOP_HOME/bin  
  3.   
  4. export HIVE_HOME=/usr/hive/hive-0.7.0-bin  
  5. PATH=$PATH:$HIVE_HOME/bin  
  6.   
  7. export PATH  
  8. export JAVA_HOME=/usr/java/jdk1.7.0_01  


4.我存儲元數據是采用第三方的mysql數據庫,這種情況下需要下載一個數據包mysql-connector-java-5.1.18-bin.jar,放到hive的lib目錄下;

 

為Hive建立相應的MySQL賬戶,並賦予足夠的權限,執行命令如下:

hadoop@ubuntu:~$ mysql -u root -pmysql
mysql> CREATE USER 'hive' IDENTIFIED BY 'mysql';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' WITH GRANT OPTION;
mysql> flush privileges;

5,0.8.1的hive版本忽略hive-default.xml,因此需要將hive/conf下的hive-default.xml.template復制並改名為hive-site.xml。並將hive-site.xml復制到hadoop/conf下

修改hive-site.xml中的如下幾項:

<configuration>  
<property>  
<name>hive.metastore.local</name>  
  <value>true</value>  
</property>  
  
<property>  
<name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:mysql://localhost:3306/metastore_db?createDatabaseIfNotExist=true</value>  
</property>  
  
<property>  
<name>javax.jdo.option.ConnectionDriverName</name>  
  <value>com.mysql.jdbc.Driver</value>  
</property>  
  
<property>   
  <name>javax.jdo.option.ConnectionUserName</name>   
  <value>hive</value>   
</property>   
    
<property>   
  <name>javax.jdo.option.ConnectionPassword</name>   
  <value>123456</value>   
</property>   

 

5.運行hive

  1. [root@localhost conf]# hive  
  2. Hive history file=/tmp/root/hive_job_log_root_201112061510_1145168119.txt  
  3. hive> show tables;  
  4. OK  
  5. log  
  6. log_info  
  7. log_new  
  8. maptile  
  9. result  
  10. Time taken: 2.889 seconds  
  11. hive>   
  1. [root@localhost conf]# hive  
  2. Hive history file=/tmp/root/hive_job_log_root_201112061510_1145168119.txt  
  3. hive> show tables;  
  4. OK  
  5. log  
  6. log_info  
  7. log_new  
  8. maptile  
  9. result  
  10. Time taken: 2.889 seconds  
  11. hive>   

6.這里遇到點問題:剛開始執行hive時,執行show tables;報如下錯誤:

  1. FAILED: Hive Internal Error: java.lang.RuntimeException(Error while making MR scratch directory - check filesystem config (null))  
  2. java.lang.RuntimeException: Error while making MR scratch directory - check filesystem config (null)  
  1. FAILED: Hive Internal Error: java.lang.RuntimeException(Error while making MR scratch directory - check filesystem config (null))  
  2. java.lang.RuntimeException: Error while making MR scratch directory - check filesystem config (null)  

后來詢問了google,得到如下解決辦法:

原有的hadoop配置文件core-site.xml信息如下:

  1. <pre name="code" class="plain"><!-- Put site-specific property overrides in this file. -->  
  2.   
  3. <configuration>  
  4. <property>  
  5.     <name>hadoop.tmp.dir</name>  
  6.     <value>/hadoop-root/tmp</value>  
  7. </property>  
  8. <property>    
  9.     <name>fs.default.name</name>    
  10.     <value>hdfs://192.168.30.149:9000/</value>  
  11. </property>  
  12. </configuration>  
  1. <pre name="code" class="plain"><!-- Put site-specific property overrides in this file. -->  
  2.   
  3. <configuration>  
  4. <property>  
  5.     <name>hadoop.tmp.dir</name>  
  6.     <value>/hadoop-root/tmp</value>  
  7. </property>  
  8. <property>    
  9.     <name>fs.default.name</name>    
  10.     <value>hdfs://192.168.30.149:9000/</value>  
  11. </property>  
  12. </configuration>  

 

改成:

  1. <!-- Put site-specific property overrides in this file. -->  
  2.   
  3. <configuration>  
  4. <property>  
  5.     <name>hadoop.tmp.dir</name>  
  6.     <value>/hadoop-root/tmp</value>  
  7. </property>  
  8. <property>    
  9.     <name>fs.default.name</name>    
  10.     <value>hdfs://hadoop149:9000/</value>  
  11. </property>  
  12. </configuration>  
  1. <!-- Put site-specific property overrides in this file. -->  
  2.   
  3. <configuration>  
  4. <property>  
  5.     <name>hadoop.tmp.dir</name>  
  6.     <value>/hadoop-root/tmp</value>  
  7. </property>  
  8. <property>    
  9.     <name>fs.default.name</name>    
  10.     <value>hdfs://hadoop149:9000/</value>  
  11. </property>  
  12. </configuration>  

重啟hadoop,運行hive,問題解決。

之后創建表一直很順利,但是到查詢表例如我執行:select size from log limit 10;時,又報錯如下:

  1. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf  
  1. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf  

后來問了下百度和google都沒有結果,自己覺得是缺少了類文件,我便把hive/lib下所有的hive-*文件拷貝到hadoop的lib下

重啟hadoop,問題解決。但是歸根結底我覺得是$HADOOP_CLASSPATH變量沒有配置清楚,這個之后再解決這里做個標記。

執行select 后運行正常:

  1. hive> select size from log_info limit 12;  
  2. Total MapReduce jobs = 1  
  3. Launching Job 1 out of 1  
  4. Number of reduce tasks is set to 0 since there's no reduce operator  
  5. Starting Job = job_201112061127_0004, Tracking URL = http://hadoop149:50030/jobdetails.jsp?jobid=job_201112061127_0004  
  6. Kill Command = /root/hadoop-0.20.2/bin/hadoop job  -Dmapred.job.tracker=hdfs://192.168.30.149:9004 -kill job_201112061127_0004  
  7. 2011-12-06 15:35:47,923 Stage-1 map = 0%,  reduce = 0%  
  8. 2011-12-06 15:35:50,952 Stage-1 map = 9%,  reduce = 0%  
  9. 2011-12-06 15:35:52,975 Stage-1 map = 27%,  reduce = 0%  
  10. 2011-12-06 15:35:53,984 Stage-1 map = 45%,  reduce = 0%  
  11. 2011-12-06 15:35:56,001 Stage-1 map = 64%,  reduce = 0%  
  12. 2011-12-06 15:35:59,023 Stage-1 map = 82%,  reduce = 0%  
  13. 2011-12-06 15:36:00,038 Stage-1 map = 100%,  reduce = 0%  
  14. 2011-12-06 15:36:03,062 Stage-1 map = 100%,  reduce = 100%  
  15. Ended Job = job_201112061127_0004  
  1. hive> select size from log_info limit 12;  
  2. Total MapReduce jobs = 1  
  3. Launching Job 1 out of 1  
  4. Number of reduce tasks is set to 0 since there's no reduce operator  
  5. Starting Job = job_201112061127_0004, Tracking URL = http://hadoop149:50030/jobdetails.jsp?jobid=job_201112061127_0004  
  6. Kill Command = /root/hadoop-0.20.2/bin/hadoop job  -Dmapred.job.tracker=hdfs://192.168.30.149:9004 -kill job_201112061127_0004  
  7. 2011-12-06 15:35:47,923 Stage-1 map = 0%,  reduce = 0%  
  8. 2011-12-06 15:35:50,952 Stage-1 map = 9%,  reduce = 0%  
  9. 2011-12-06 15:35:52,975 Stage-1 map = 27%,  reduce = 0%  
  10. 2011-12-06 15:35:53,984 Stage-1 map = 45%,  reduce = 0%  
  11. 2011-12-06 15:35:56,001 Stage-1 map = 64%,  reduce = 0%  
  12. 2011-12-06 15:35:59,023 Stage-1 map = 82%,  reduce = 0%  
  13. 2011-12-06 15:36:00,038 Stage-1 map = 100%,  reduce = 0%  
  14. 2011-12-06 15:36:03,062 Stage-1 map = 100%,  reduce = 100%  
  15. Ended Job = job_201112061127_0004  

現在又找到的心得問題:在執行刪除表操作時,出現如下錯誤:

  1. NestedThrowables:  
  2. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes  
  3. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask  
  1. NestedThrowables:  
  2. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes  
  3. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask  

這個問題還沒有解決:期待牛人解決

 另外兩點需要注意:

hive是做為客戶端被安裝的,調用了hadoop的腳本,有兩點需要注意:

(1)問題1:

View Code
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf   
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)

解決方法:在hadoop-env.sh中增加以下腳本

#import hive jar
for LIB in `ls -1 $HIVE_HOME/lib/*.jar ./lib/*.zip 2>/dev/null`
do
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$LIB
done

 

加載所有hive/lib下的jar包

(2)問題:所有配置都設置好了,Hive就是無法連接到mysql:郁悶的不得了:

解決方法如下:

將hive-site.xml、hive-env.sh.template、hive-exec-log4j.properties、hive-log4j.properties配置文件

拷貝到{Hadoop_Home}/conf下

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM