Hive 的官网:http://hive.apache.org/
Hive versions 1.2 onward require Java 1.7 or newer.
上一篇提到的 MapRedue 虽然简化了分布式应用的实现方式,但还是离不开写代码。
Hive 简介
Hive 是基于 Hadoop 的一个【数据仓库工具】,可以将结构化的数据文件映射为一张 hive 数据库表,并提供简单的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。
非 Java 编程者对 HDFS 的数据做 mapreduce 操作。
好处:使用 SQL 来快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,学习成本低,十分适合数据仓库的统计分析。
数据仓库简介
Hive 是一个数据仓库工具,那么数据仓库是什么呢?相信大家对数据库并不陌生,翻译成英文是 DataBase , 而数据仓库的英文翻译是 Data Warehouse,可以简写成 DW 或 DWH。不同于数据库,数据仓库是面向主题的,为了支持决策创建的,主要理解这四个特点就可以了:面向主题、数据集成、历史数据、有时间维度的。
OLTP & OLAP
联机事务处理 on-line transaction processing
OLTP 是传统关系数据库的主要应用,主要是基本的事务处理,例如交易系统。
它强调数据库内存效率,强调各种指标的命令率,强调绑定变量,强调并发操作。
联机分析处理 on-line analytical processing
OLAP 是数据仓库的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
它强调数据分析,强调 SQL 执行市场,强调磁盘 I/O,强调分区。
下表是 OLTP 和 OLAP 的区别(用户,功能,DB 设计,数据,存取,工作单位,用户数,DB 大小,时间要求,主要应用)
OLTPOLAP用户初级的决策者、高级的功能基本查询分析决策DB 设计面向应用面向主题数据当前的。最新的细节,二维分立的历史的,多数据源的(聚集的,多维的)存取读取 10 条记录读上百万条记录工作单位简单的事务复杂的查询用户数上千个上百万个DB 大小MB-GBGB、TB、PB、EB时间要求实时对实时要求不严格主要应用数据库数据仓库
综上。数据仓库支持很复杂的查询,就是用来做数据分析的数据库。基本不用来做插入,修改,删除操作。
Hive 运行时,元数据存储在关系型数据库中。
还需要明确两点:
Hive 的真实数据是在 HDFS 上的。
Hive 的计算是通过 Yarn 和 MR 的。
Hive 架构
用户接口主要有三个:Cli, Client 和 WUI 。见图 1-1,图 1-2
图 1-1
图 1-2
从图中可以看到,有三种连接方式:
1.cli 是最常用的,cli 启动时,会同时创建一个 Hive 副本。
安装好之后,直接使用 hive 命令,进入 hive> ,如下图 1-3
图 1-3
这种方式,也可以使用命令: hive --service cli
2.使用 Client 方式,需要在编写 JDBC 程序,需要指定 HIve Server。 所指定的节点需要开启 Hive Server。
Plain Text
1
$ $HIVE_HOME/bin/hiveserver2
2
$ $HIVE_HOME/bin/beeline -u jdbc:hive2://$HS2_HOST:$HS2_PORT
当然也可以使用 hive --service hivesrver2 的方式开启。
注:使用 hiveServer2 的方式和使用 metastore 方式不同的地方在于前者还可以提供 JDBC 等连接。
3.WUI ,使用浏览器使用 Hive。(这个很少用)
数据仓库 Hive 的元数据存储在关系型数据库中,如 mysql,derby等。元数据包括表的名字,表的列,属性,数据所在目录等信息。
解释器,编译器,优化器成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
Hive 的数据存储在 HDFS 中。计算由 Yarn 和 mapReduce 来完成。值得注意的是,SELECT * from XXX;这样的操作,不会提交 MapReduce 任务。
总结:
Hive 是一个基于 Hadoop 文件系统之上的数据仓库架构,存储用 hdfs,计算用 mapreduce。
Hive 可以理解为一个工具,不存在主从架构,不需要安装在每台服务器上,只需要安装几台就行了。
Hive 还支持类 sql 语言,它可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能。
Hive 有个默认数据库:derby,默认存储元数据--->一般企业使用关系型数据库存储 mysql 元数据
。
三种部署方式
前提
下载安装包:apache-hive-1.2.1-bin.tar.gz ,解压。
准备 mysql 环境,用来保存元数据的。
有Hadoop 集群环境,Hive 存储要使用 HDFS 的。
内嵌模式
这种模式,使用的是内嵌的数据库 derby 来保存元数据,但是只允许一个会话连接。
配置很简单,只需要一个 hive-site.xml 文件。(注:使用 derby 存储方式时,运行 hive 会在当前目录生成一个 derby 文件和一个 metastore_db)
XML
1
<?xml version="1.0"?>
2
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
3
<configuration>
4
<property>
5
<name>javax.jdo.option.ConnectionURL</name>
6
<value>jdbc:derby:;databaseName=metastore_db;create=true</value>
7
</property>
8
<property>
9
<name>javax.jdo.option.ConnectionDriverName</name>
10
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
11
</property>
12
<property>
13
<name>hive.metastore.local</name>
14
<value>true</value>
15
</property>
16
<property>
17
<name>hive.metastore.warehouse.dir</name>
18
<value>/user/hive/warehouse</value>
19
</property>
20
</configuration>
本地模式(测试用)
本地模式就是把元数据的存储介质由 derby 换成了 mysql 。
需要:
把 mysql 的驱动添加到 $HIVE_HOME 目录下的 lib 下。
配置文件:hive-site.xml, 注意这种方式 mysql 的账户密码就明文写在配置文件里面了。
XML
1
<?xml version="1.0"?>
2
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
3
<configuration&g