文章目录
  1. 1. 准备工作
  2. 2. 开始安装
  3. 3. 启动hive

介绍一下本地安装 Hive 0.13.1 ,并元数据存放到本地mysql上


准备工作

  1. 本地安装了hadoop 、mysql
  2. 下载 apache-hive-0.13.1-bin.tar.gz

开始安装

1.解压 apache-hive-0.13.1-bin.tar.gz

1
tar xzf ./apache-hive-0.13.1-bin.tar.gz

2.复制几个配置文件

1
2
cp hive-default.xml.template hive-site.xml
cp hive-env.sh.template hive-env.sh

3.用vi修改这2个文件的内容

hive-env.sh
1
2
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=$HADOOP_HOME
(注:如果你的PATH下有HADOOP_HOME变量才可以这样设置,否则应该指出hadoop的安装路径)
hive-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8</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>hive</value>
<description>password to use against metastore database</description>
</property>
解释一下这4个变量的意思
  • 第一个: 说明是让hive将元数据存放到mysql中,且用mysql连接串来连接
  • 第二个: 连接mysql的驱动 (这里下载 并把它放到hive的lib目录下)
  • 第三个: 连接mysql用户名
  • 第四个: 连接mysql密码

因此,我们需要先在mysql上,新建一个用户和密码(我这里都是叫hive),同时用hive这个用户新建一个叫hive的数据库

然后修改mysql hive 这个数据库字符集

1
alter database hive character set latin1;

启动hive

在hive的bin目录下执行

1
sh ./hive

whoops~~~~报错了,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
xiaolongyuan@xiaolongdeMacBook-Air bin$ ./hive
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:270)
at org.apache.hadoop.util.RunJar.main(RunJar.java:153)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 3 more
解决方法:

修改你的Hadoop配置hadoop-env.sh,在后面加上 $HADOOP_CLASSHPATH

hadoop-env.sh
1
2
# Extra Java CLASSPATH elements.  Optional.
export HADOOP_CLASSPATH=.:$HADOOP_CLASSPATH

再次运行,whoops~~~又报错了。。。

1
2
3
Caused by: MetaException(message:Got exception: java.net.ConnectException Call to
localhost/127.0.0.1:9000 failed on connection exception: java.net.ConnectException:
Connection refused)

这次因为由于Hadoop没有启动,启动hadoop即可。然后再次运行hive,既可以成功。

1
2
3
4
5
6
7
8
9
xiaolongyuan@xiaolongdeMacBook-Air bin$ ./hive
14/07/20 01:38:56 WARN conf.HiveConf: DEPRECATED: hive.metastore.ds.retry.* no longer has any effect. Use hive.hmshandler.retry.* instead

Logging initialized using configuration in jar:file:/Users/xiaolongyuan/Documents/hive-0.13.1/lib/hive-common-0.13.1.jar!/hive-log4j.properties
hive> show databases;
OK
default
Time taken: 0.73 seconds, Fetched: 1 row(s)
hive>

我们还可以看到hive的元数据已经存到Mysql里了