Hive 安装过程

openkk 12年前

一、查看需求

安装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
</div>

修改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
</div>
......

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”这样简单的错误会搜索到很多解决方法,但大家遇到的问题都不一样,问题一直没有解决。后来才想起去查看日志,一眼便看出问题。因此,一定要养成出错先看日志的习惯。
</div>

三、安装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'。

</div>
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>
</div> </div>

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上建立数据表:
</div>
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)
</div>

在TBLS中可以看到Hive表的元数据。


参考:

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

http://wadefall.iteye.com/blog/1204286
http://blog.csdn.net/lengzijian/article/details/7042280

转自:http://blog.csdn.net/gudaoqianfu/article/details/7319287