Hive是由Facebook最初开发的基于Hadoop的数据仓库工具,提供了类SQL的查询语言Hive SQL(HQL)。
在内部,Hive将用户的SQL语句转化为一系列的MapReduce作业,并提交到集群中运行。
在Hive中,数据通过表来组织,提供了一种将表结构附加(attaching)到HDFS中的数据的一种方式。诸如表的Schema等元数据存放在一个称为metastore的数据库中。默认情况下,metastor存放在本地,但是可以配置在远程共享,这通常在生成环境中使用。
Hive整体架构如下;
下载安装
下载稳定版本,留意与Hadoop版本的兼容:
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.0.0/apache-hive-2.0.0-bin.tar.gz
tar -zxvf apache-hive-2.0.0-bin.tar.gz
mv apache-hive-2.0.0-bin /home/hive-2.0.0
vim /etc/profile
export HIVE_HOME=/home/hive-2.0.0
export PATH=$PATH:$HIVE_HOME/bin
source /etc/profile
确保集群中配置了HADOOP_CONF_DIR环境变量,以便Hive可以找到集群配置。
配置metastore
metastore的3种模式:
- Embedded metastore:
- Local metastore:
- Remote metastore
Local模式配置
创建数据库用作metastore:
create database hive;
hive-site.xml
<configuration>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.1.132:3306/hive?characterEncoding=UTF-8</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>yourpasssword</value>
</property>
</configuration>
把MySQL JDBC驱动上传到hive的lib目录下。
初始化:
schematool -initSchema -dbType mysql
启动Hive:
% hive
简单实例
创建表
create table records(year string , temperature int ,quality int) row format delimited fields terminated by '\t'
成功之后,我们可以在mysql的元数据中看到这个表的信息,在hive.TBLS表中:
导入数据
将HDFS的文件导入Hive:
load data inpath "/input/ncdc/micro-tab/sample.txt"
overwrite into table records;
在/user/hive/warehouse目录下可以看到下面的文件:
查询数据
Hive跟语法跟MySQL非常像,如下查询表中所有数据:
select * from records;
来一个分组查询:
select year , max(temperature)
from records
where temperature != 9999 and quality in ( 0,1,4,5,9)
group by year;
可以看到Hive启动了一个MapReduce作业,计算得到最终结果。YARN管理界面可以看到该作业:
Hive Server
启动HiveServer2
hiveserver2
此时在默认的10020端口可以访问的hive界面:
(完)