Hive的安装步骤可以参考:
https://www.cnblogs.com/kinginme/p/7233315.html
综述:
Hive是基于hadoop HDFS上的一个数据仓库,本质上就是数据库。
- 数据仓库
数据仓库是一个面向主题的、集成的、不可更新的、对时间不变化的数据集合。用于支持企业和组织的决策分析处理。
面向主题:决策时所关注的方面。以商品推荐系统的数据仓库为例,其主题就是商品信息
集成的:数据仓库的数据源于不同的数据,可以是关系型数据库、非关系型数据库或者文件等。
不可更新:主要用于查询,不建议更新。
OLTP与OLAP应用
OLTP连接事务处理:关注事务的处理,如银行的转账。操作的频率会非常高。
OLAP连接分析处理:基于原来的数据进行分析与查询,如推荐系统。主要进行查询,不进行删除更新等。数据仓库模型
搭建数据仓库时需要拟定一个模型,最基本的为星型模型和雪花模型。
以商品推荐系统为例,商品信息作为核心,关联了订单、客户、促销等信息。这样就构成了一个面向商品信息的星型模型。
同样,将客户信息等内容进行扩展,就可以得到雪花模型。
什么是Hive
- Hive是搭建在Hadoop HDFS上的数据仓库基础架构。
- Hive可以进行数据的提取转化加载(ETL)
- Hive定义了类sql的查询语言,称为HQL。
- Hive允许数据MapReduce开发者开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的分析任务。
- Hive是SQL解析引擎,将SQL语句转为M/R任务,然后在Hadoop上执行。
- Hive的表其实就是HDFS的目录,其数据就是HDFS的文件
Hive的体系结构
- Hive的元数据
Hive将元数据存储在数据库中,如Mysql、Oracle、derby等。
Hive的元数据包含表名、表属性、表数据所在目录等信息。
- HQL执行过程
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存于HDFS中,并且随后由MapReduce调用执行。
- Hive体系结构
Hive的几种安装模式
- 嵌入模式
Hive的源信息存入Hive自带的Derby数据库中。
局限性较大。只允许一个链接,所以多用于演示。
将安装包解压后,通过:./hive进入hive的命令行模式。这时就使得hive初始化了元数据文件。查看目录可见metastore.db
本地模式
元数据存于另外一个数据库中。例如将元数据存于一个MySql数据库。
同时,mysql数据库与Hive运行于同一个物理机上。
支持多个链接,多用于开发与测试。远程模式
元数据存于另外一个数据库中。例如将元数据存于一个MySql数据库。
同时,mysql数据库与Hive运行于不同物理机上。
解压缩文件后,首先需要将对应数据库的驱动文件jar包拷贝进lib文件夹中。随后进入conf文件夹,配置hive-site.xml文件
需要配置的内容在官网文档中可以找到。
依次为url、驱动、用户名、密码
随后在hive中创建表
对应信息将会出现在mysql中
Hive的启动方式
- 命令行方式
进入方式:hive
静默模式:hive -S
CIL常用指令:
hive> show tables --查看表;
hive> show functions --查看内置函数;
hive> !命令 --直接执行linux指令,如!clear、!pwd;
hive> desc --查看表结构;
hive> dfs --执行HDFS指令,例如dfs -ls /;
hive> hql语句 --HQL语句,例如select * from table;
hive> source sql脚本 --执行sql脚本,例如 source /root/my.sql;
也可以不进入hive中,直接在linux命令行中执行上述语句:
hive -S -e ‘show tables’
- WEB界面方式
端口号:9999
启动方式:#hive --service hwi
若是显示:
说明该版本未携带web页面的 .war包,需要通过下载源代码(*-src.tar.gz)文件。找到/hwi/web目录。
使用指令:
jar cvfM0 hive-hwi-*.*.*.war -C web/
将其中内容打包,随后拷贝到hive的lib目录下
随后根据官网给出的配置内容修改conf/hive-site.xml文件。
还需要将jdk/lib/tools.jar 文件拷贝到hive/lib/目录下。
随后就可以通过ip:port进行访问。将上述的CIL命令改变为可视化的操作。
ps:非原生安装,如cloudera,大多通过hue进行统一的大数据页面管理:
- 远程服务
端口:10000
启动:hive --service hiveserver
如果要以JDBC或者ODBC的程序登陆到Hive中操作数据时,必须使用远程服务模式。
Hive的数据类型
- 基本数据类型
整数型:tinyint、smallint、int、bigint
浮点数型:float
布尔型:boolean
字符串型:string、varchar(0.12)、char(0.13)
建表的过程中需要对数据类型进行说明:
hive> create table person
> (pid int,
> pname string,
> married boolean,
> salary double);
- 复杂数据类型
数组类型:Array
数组类型由一系列相同数据类型的元素构成
集合类型:Map
集合类型包含key-value键值对,可以通过key访问元素
结构类型:Struct
结构类型可以包含不同类型的数据,可以通过A.b A.c进行访问。
表的创建过程与上面类似:
--array类型举例:
hive> create table person
> (pid int,
> pname string,
> grade array<float>);
{1,tom,[80,90,70]}
--ma'p类型举例:
hive> create table person
> (pid int,
> pname string,
> grade map<string,float>);
{1,tom,<'语文成绩',85>}
--可以进行组合:
> grade array<map<string,float>>
{1,tom,[<'语文成绩',85>,<'英语成绩',85>]}
--struct类型举例:
hive> create table person
> (pid int,
> info struct<name:string,age:int>);
{1,{'tom',10}}
- 时间类型
Data(从Hive0.12开始支持)
Timestamp(从Hive0.8开始支持)
两者的区别在于:
Timestampe与时区无关,是以系统存在为起点的偏移量。
Data描述特定的时间,格式一般为:YYYY-MM-DD,不包含具体时间。
可以从Hive官网找到每种类型的聚类精度范围
Hive数据存储
一般默认的Hive数据存储目录为:
hdfs上:/user/hive/warehouse
这一点在非原生的cloudera上也是一样:
Hive数据存储基于HDFS,没有单独的数据存储格式。
存储结构主要包括:数据库、文件、表、视图
可以直接加载文本文件(.txt .csv等)
创建表的时候,可以指定Hive的列分隔符,行分隔符等。
表结构包含
- Table:内部表
其概念与数据库上的表类似
每个表在hive上都有一个相应的目录进行存储。
删除表时,元数据与数据都会被删除。
操作举例:
hive> create table edwin_test_table
> (tid int,tname string,age int)
> location '/edwinFiles/hive/t2' --设定创建表的地址
> row format delimited fields terminated by ',' --指定分隔符;
--当使用create table name as select * from name2 这样的句子进行创建表时,
--需要指定分隔符,否则数据将相连。
- Partition 分区表
对应于数据库的partition列的密集索引
hive中,表中的一个partition对应于表下的一个目录,所有的partition的数据都存储在对应的目录中。
简单来说,分区表就是将数据按照某一个条件进行筛选后的表。
hive> create table edwin_test_table
> (tid int,tname string,age int)
> partitioned by (gender string) --设定分区条件
> row format delimited fields terminated by ',' --指定分隔符;
查看表的描述信息,可以看到分区infomation中包含gender
分区表所在的文件夹中,会以分区为名,分为数个子目录。
之后要向分区表中添加数据时,也需要指出分区。
insert into table edwin_test partition(gender = 'M') select * from ......
- External Table 外部表
指向已经在HDFS上存在的数据,可以用于建立partition。
与内部表在元数据的组织上是相同的,而在实际数据的存储上有差异。
外部表是一个过程,加载数据和创建表同步完成,并不会移动到数据仓库中,仅仅是一个链接。所以删除外部表不会删除真实数据文件。
创建方式如下:
hive> create external table external_test_table
> (tid int,tname string,age int)
> location '/input' --创建表的内容所在目录
> row format delimited fields terminated by ',' --指定分隔符;
- Bucket Table 桶表
桶表对数据进行哈希取值后,放入不同的文件中进行存储。
创建方式如下:
hive> create table bucket_test_table
> (tid int,tname string,age int)
> clustered by (tname) into 5 buckets;--对tname进行哈希取值,然后分入5个部分中。
视图
视图是一个虚表,是一个逻辑概念。
视图不存数据,其建立在已有表(基表)的基础上,可以跨越多个表。
其目的是为了简化查询。
比如用于合并两个表的一部分内容:
create view infos
as
select A.a,A.b,A.c,B.a,B.c
from A,B
where A.c = B.c
将视图转为实际存储数据的表的过程称为物化过程。
在Oracle和MySQL中是可以的,但是Hive中并不支持。