1.前言
在装好hadoop的基础之上,我们就可以安装hive了,hive是个数据仓库,它提供一种类似SQL的叫HiveQL简称HQL的查询语言,同时当逻辑在HQL中不方便或效率很低时,hive还支持嵌入传统的自定义的mapper和reducer。
Hive官方图像如下:
2.下载
网址为https://github.com/apache/hive
我使用的是hive0.10.0下载地址为https://github.com/apache/hive/tree/branch-0.10
大家可以用git下载或者点右边的下载zip
3.编译
我用的hive-branch-0.10,进入该文件夹后运行ant package即可,可能会报缺工具的错误,按照上面提示,缺什么安装什么就是,centos命令式yum install ???
我把hive放在/opt/下
编译成功后得到的/opt/hive-branch-0.10/build/dist就是可以执行的hive编译后文件
4.安装
4.1配置环境变量
切换到hadoop用户
vi ~/.bashrc
加上这些:
export HIVE_HOME=/opt/hive-branch-0.10/build/dist
export PATH=$PATH:$HADOOP_HOME/bin:$HIVE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$HIVE_HOME/lib:$jAVA_HOME/lib/tools.jar
然后. ~/.bashrc
4.2运行
别忘记把hadoop的服务启动起来先
然后测试一下是否能运行
[hadoop@arionvm1 conf]$ hive
Logging initialized using configuration in file:/opt/hive-branch-0.10/build/dist/conf/hive-log4j.properties
Hive history file=/tmp/hadoop/hive_job_log_hadoop_201405151631_1098734951.txt
hive> show tables;
如果能运行会显示OK
在本地创建一个文件iphone,内容为
1 thangool
2 thank
3 thanks
4 good
5 google
我们用这个数据测试一下其他操作
hive> create table iphone (id int,owner string) row format delimited fields terminated by ' ';
hive> load data local inpath 'iphone' into table iphone;
hive> select * from iphone;
然后输入exit;或者quit;退出
5.修改元数据
5.1mysql部分
如果读者能成功跑完,就会发现在当前目录下多了derby.log和metastore_db文件夹
hive默认使用derby存储元数据,这种方式如果换个目录运行就找不到原来的元数据了,会新建一个,并且不支持多个hive用户一起读取元数据,所以我们下一步就是要将元数据换为在mysql中存储。
首先安装mysql,在root用户下yum -y install mysql
然后设置密码(默认无密码)
/usr/bin/mysqladmin -u root password '123456'
mysql -uroot -p123456
进入mysql命令行之后输入
insert into mysql.user(Host,User,Password) values (‘localhost’,’hadoop’,password(‘hadoop’));
create database hive;
grant all privileges on hive.* to hadoop@localhost identified by ‘hadoop’;
flush privileges;
然后把mysql-connector-java-5.1.27-bin.jar(可能你的和我的版本不同,这没有关系)放入hive的lib文件夹中,至于这个文件在哪,大家可以用find命令找一下,实在不行就从网上下一个。
5.2.hive部分
cp hive-default.xml.template hive-site.xml
在原来的模板中就有几处错误,就括号没有匹配,还有注释有点问题,运行hive,看报哪一行有错,用set nu翻到那一行,进行更改,直到可以运行hive为止。
然后找到相应位置作修改
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://arionvm1:3306/hive</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>hadoop</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hadoop</value>
</property>
其中URL要改下,我写的是arionvm1
<property>
<name>hive.stats.dbclass</name>
<value>jdbc:mysql</value>
<description>The default database that stores temporary hive statistics.</description>
</property>
<property>
<name>hive.stats.jdbcdriver</name>
<value>com.mysql.jdbc.Driver</value>
<description>The JDBC driver for the database that stores temporary hive statistics.</description>
</property>
<property>
<name>hive.stats.dbconnectionstring</name>
<value>jdbc:mysql://arionvm1:3306/hive</value>
<description>The default connection string for the database that stores temporary hive statistics.</description>
</property>
我还改了以上三处,看到有人没改,我试过,如果没改的话执行某些语句不会生成derby文件,也就是说完全用的是mysql,可是如果执行某些特定语句的话还是会生成derby文件,也就是还与derby有关,所以这三处也建议改一下。
这篇文章一部分是我由记忆写出来的,如果有错误欢迎留言,我运行下看看到底哪里出了问题,有什么疑问也欢迎提出。