下载&解压
从这个地址下载Hive1.2.1 https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-1.2.1/apache-hive-1.2.1-bin.tar.gz
然后使用下面的命令解压到指定目录下面:
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /root/apps/
然后使用下面的命令改一下名字:
mv apache-hive-1.2.1-bin hive-1.2.1
安装MySQL
MySQL用于存储Hive的元数据,不建议使用Derby作为Hive的元数据库,因为它的数据文件默认保存在运行目录下面,下次换一个目录启动就看不见之前的数据了。
我这边已经装好了,如果需要安装可以参考http://www.cnblogs.com/liuchangchun/p/4099003.html,记得配置远程登录。
修改配置文件
使用下面的命令来创建配置文件:
vim /root/apps/hive-1.2.1/conf/hive-site.xml
粘入如下内容:
<configuration>
<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>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>sorry</value>
<description>password to use against metastore database</description>
</property>
</configuration>
拷贝Jar包
没有mysql-connector-java.jar的可以去http://download.csdn.net/detail/u014436218/7217805下载。
将刚下载下来的mysql-connector-java-5.1.30-bin.jar拷贝到hive的lib目录下面去。
启动Hive
启动Hive之前需要先把Hadoop集群启动起来。然后使用下面的命令来启动Hive:
/root/apps/hive-1.2.1/bin/hive
出现如下的提示符即表示启动成功:
hive>
验证Hive运行正常
启动Hive以后输入下面的命令:
hive> show databases;
输出为:
OK
default
Time taken: 1.029 seconds, Fetched: 1 row(s)
创建数据库
使用下面的命令来创建一个数据库:
create database test_db;
输出结果如下:
OK
Time taken: 0.216 seconds
数据库的数据文件被存放在HDFS的/user/hive/warehouse/test_db.db下面
创建表
使用下面的命令来创建一个表:
use test_db;
create table t_test(id int,name string);
输出结果如下:
OK
Time taken: 0.237 seconds
表的数据文件被存放在HDFS的/user/hive/warehouse/test_db.db/t_test下面
插入数据
接下来,我们来导入一些数据到表里面。
准备下面的数据文件,sz.data。文件内容如下:
1,张三
2,李四
3,风凌
4,三少
5,月关
6,abc
然后使用下面的命令把文件上传到hdfs上面:
hadoop fs -put sz.data /user/hive/warehouse/test_db.db/t_test/sz.data
然后使用下面的语句尝试进行一下查询:
select * from t_test;
输出的结果如下:
OK
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
Time taken: 0.329 seconds, Fetched: 6 row(s)
数据没有被成功识别,这是因为没有指定数据的分隔符。
使用下面的命令清空表数据:
truncate table t_test;
这时表还存在,但是HDFS下面的数据已经没有了。
使用下面的命令来删除表:
drop table t_test;
使用下面的命令来重新创建表,指定数据的分隔符。
create table t_test(id int, name string)
row format delimited
fields terminated by ',';
然后再拷贝一次数据。
hadoop fs -put sz.data /user/hive/warehouse/test_db.db/t_test/sz.data
重新执行查询:
hive> select * from t_test;
输出如下:
OK
1 张三
2 李四
3 风凌
4 三少
5 月关
6 abc
Time taken: 0.146 seconds, Fetched: 6 row(s)
count查询
使用下面的命令来体验一下Hive利用MapReduce来运行查询:
select count(1) from t_test;
能看到下面的运行提示:
Query ID = root_20170325234306_1aaf3dcf-e758-4bbd-9ae5-e649190d8417
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
Starting Job = job_1490454340487_0001, Tracking URL = http://amaster:8088/proxy/application_1490454340487_0001/
Kill Command = /root/apps/hadoop-2.7.3/bin/hadoop job -kill job_1490454340487_0001
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
2017-03-25 23:43:23,084 Stage-1 map = 0%, reduce = 0%
2017-03-25 23:43:36,869 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.71 sec
2017-03-25 23:43:48,392 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 3.4 sec
MapReduce Total cumulative CPU time: 3 seconds 400 msec
Ended Job = job_1490454340487_0001
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 3.4 sec HDFS Read: 6526 HDFS Write: 2 SUCCESS
Total MapReduce CPU Time Spent: 3 seconds 400 msec
同时,在YARN集群里面也可以看到任务信息。
输出结果如下:
OK
6
Time taken: 44.51 seconds, Fetched: 1 row(s)
发现Hive的速度确实很慢,不适合用于在线业务支撑。
Hive的元数据
接下来,我们来看一下Hive保存在MySQL里面的元数据。
可以看到有很多表。其中DBS表记录了数据库的记录:
其他的表的作用可以自行探索。