hive安裝過程

一、查看需求

安裝java 1.6及hadoop 0.20.x

二、安裝hive
tar -xf hive-x.y.z.tar.gz(本次安裝爲hive-0.8.1.tar.gz)
將解壓後的hive-0.8.1文件放在系統的/home/hadooptest/中。

在/etc/profile中添加:
export HIVE_HOME=/home/hadooptest/hive-0.8.1
export PATH=$HIVE_HOME/bin:$PATH

修改hive-0.8.1目錄下/conf/hive-env.sh.template中的HADOOP_HOME爲實際的Hadoop安裝目錄:/home/hadooptest/hadoop-0.20.205.0。

在HDFS中創建/tmp和/user/hive/warehouse並設置權限:
$ $HADOOP_HOME/bin/hadoop fs -mkdir /tmp
$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse

將conf/hive-default.xml.template複製兩份,分別命名爲hive-default.xml(用於保留默認配置)和hive-site.xml(用於個性化配置,可覆蓋默認配置

啓動hive:
$HIVE_HOME/bin/hive

hive> show tables; 
OK 
Time taken: 3.496 seconds

執行成功。
(可根據https://cwiki.apache.org/confluence/display/Hive/GettingStarted中的指引使用hive自帶的數據來建表進行測試)
依據https://cwiki.apache.org/confluence/display/Hive/GettingStarted中的方法建表並進行查詢,使用select * from pokes查詢成功,但只查詢表中某一項時卻報錯(若查詢成功說明你的mapreduce沒有問題,可跳過下列的報錯分析):
hive> select foo from pokes;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
java.net.ConnectException: Call to namenode/192.168.1.112:8021 failed on connection exception: java.net.ConnectException: Connection refused
......

mapreduce無法執行。於是,退出hive,執行jps查看java進程,發現jobtracker進程掛了。
於是重啓hadoop(由於這個hadoop的配置還有些問題,datanode丟失block的比例達到閾值,系統會一直處於安全模式,所以想在HDFS中進行寫入或擦除時,必須先執行hadoop dfsadmin -safemode leave來關閉安全模式),執行jps發現所有hadoop進程都正常運行,但是執行關閉安全模式命令後,jobtracker和tasktracker進程便掛了,所以mapreduce無法運行。
執行mapreduce程序時提示無法連接namenode:
INFO ipc.Client: Retrying connect to server: namenode/192.168.1.102:8021. Already tried 0 time(s).
INFO ipc.Client: Retrying connect to server: namenode/192.168.1.102:8021. Already tried 1 time(s).
......

查看hadoop-hadooptest-jobtracker-tigerchan-VirtualBox.log日誌文件,發現錯誤爲:
2012-03-04 21:43:47,919 INFO org.apache.hadoop.mapred.CapacityTaskScheduler: Initializing 'default' queue with cap=100.0, maxCap=-1.0, ulMin=100, ulMinFactor=1.0, supportsPriorities=false, maxJobsToInit=3000, maxJobsToAccept=30000, maxActiveTasks=200000, maxJobsPerUserToInit=3000, maxJobsPerUserToAccept=30000, maxActiveTasksPerUser=100000
2012-03-04 21:43:47,921 FATAL org.apache.hadoop.mapred.JobTracker: java.io.IOException: Queue 'slow' doesn't have configured capacity!
at org.apache.hadoop.mapred.CapacityTaskScheduler.parseQueues(CapacityTaskScheduler.java:906)
at org.apache.hadoop.mapred.CapacityTaskScheduler.start(CapacityTaskScheduler.java:823)
at org.apache.hadoop.mapred.JobTracker.offerService(JobTracker.java:2581)
at org.apache.hadoop.mapred.JobTracker.main(JobTracker.java:4979)

2012-03-04 21:43:47,922 INFO org.apache.hadoop.mapred.JobTracker: SHUTDOWN_MSG: 

由此可知,隊列slow沒有配置容量!!哦,原來是之前我把mapred-site.xml文件中的mapred.queue.names設置爲default,slow,fast,卻忘記配置slow和fast隊列。故,把mapred.queue.names設置爲default,或者保留slow,fast,然後正確配置隊列即可。重啓hadoop便正常運行。上述的查詢問題也得以解決。
這個問題可能不是很普遍,可能其他人會遇到其他問題。所以,在使用hive時,一定要先保證hadoop正常運行。若出現問題,則第一時間查看日誌分析錯誤,沒法找出錯誤再上網查找解決方法。此次出現錯誤,我第一時間上網查找方法,但“無法連接namenode”這樣簡單的錯誤會搜索到很多解決方法,但大家遇到的問題都不一樣,問題一直沒有解決。後來纔想起去查看日誌,一眼便看出問題。因此,一定要養成出錯先看日誌的習慣。

三、安裝mysql
但是這樣安裝的元數據保持在內嵌的數據庫Derby中,只能允許一個會話連接,如果要支持多用戶多會話,則需要一個獨立的元數據庫,目前比較流行的是使用MySQL,下面進行配置。
 
1)安裝MySQL服務器並啓動MySQL服務

2)爲Hive建立相應的MySQL帳號,並賦予足夠的權限
①進入root:mysql -uroot -p;
②創建hive數據庫:create database hive;
③創建用戶hive,它只能從localhost連接到數據庫並可以連接到wordpress數據庫:grant all on hive.* to hive@localhost identified by '123456'。

3)在Hive的conf目錄下修改配置文件hive-site.xml,配置文件修改如下
<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>  
  <description>JDBC connect string for a JDBC metastore</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>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>123456</value>  
  <description>password to use against metastore database</description>  
</property>

4)把MySQL的JDBC驅動包(我使用的是mysql-connector-java-5.0.8-bin.jar,從http://downloads.mysql.com/archives/mysql-connector-java-5.0/mysql-connector-java-5.0.8.tar.gz下載並解壓後可以找到)複製到Hive的lib目錄下。

5)啓動Hive shell,執行
show tables;
如果不報錯,表明基於獨立元數據庫的Hive已經安裝成功了。 

查看一下元數據的效果。 
在Hive上建立數據表:
CREATE TABLE my(id INT,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
show tables;
select name from my;

然後我們以剛剛建立的hive帳號登錄MySQL查看元數據信息。
mysql> use hive 
Reading table information for completion of table and column names 
You can turn off this feature to get a quicker startup with -A 

Database changed 

mysql> show tables; 
+-----------------+ 
| Tables_in_hive  | 
+-----------------+ 
| BUCKETING_COLS  | 
| COLUMNS         | 
| DATABASE_PARAMS | 
| DBS             | 
| PARTITION_KEYS  | 
| SDS             | 
| SD_PARAMS       | 
| SEQUENCE_TABLE  | 
| SERDES          | 
| SERDE_PARAMS    | 
| SORT_COLS       | 
| TABLE_PARAMS    | 
| TBLS            | 
+-----------------+ 
13 rows in set (0.00 sec) 

mysql> select * from TBLS; 
+--------+-------------+-------+------------------+--------+-----------+-------+----------+---------------+--------------------+--------------------+ 
| TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER  | RETENTION | SD_ID | TBL_NAME | TBL_TYPE      | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT | 
+--------+-------------+-------+------------------+--------+-----------+-------+----------+---------------+--------------------+--------------------+ 
|      1 |  1319445990 |     1 |                0 | hadoop |         0 |     1 | my       | MANAGED_TABLE | NULL               | NULL               | 
+--------+-------------+-------+------------------+--------+-----------+-------+----------+---------------+--------------------+--------------------+ 
1 row in set (0.00 sec)

在TBLS中可以看到Hive表的元數據。


參考:

https://cwiki.apache.org/confluence/display/Hive/GettingStarted

http://wadefall.iteye.com/blog/1204286
http://blog.csdn.net/lengzijian/article/details/7042280
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章