Hive 基础知识

Hive的安装步骤可以参考:
https://www.cnblogs.com/kinginme/p/7233315.html

综述:

Hive是基于hadoop HDFS上的一个数据仓库,本质上就是数据库。

  • 数据仓库
    数据仓库是一个面向主题的、集成的、不可更新的、对时间不变化的数据集合。用于支持企业和组织的决策分析处理。
    面向主题:决策时所关注的方面。以商品推荐系统的数据仓库为例,其主题就是商品信息
    集成的:数据仓库的数据源于不同的数据,可以是关系型数据库、非关系型数据库或者文件等。
    不可更新:主要用于查询,不建议更新。

《Hive 基础知识》

  • OLTP与OLAP应用
    OLTP连接事务处理:关注事务的处理,如银行的转账。操作的频率会非常高。
    OLAP连接分析处理:基于原来的数据进行分析与查询,如推荐系统。主要进行查询,不进行删除更新等。

  • 数据仓库模型
    搭建数据仓库时需要拟定一个模型,最基本的为星型模型和雪花模型。
    以商品推荐系统为例,商品信息作为核心,关联了订单、客户、促销等信息。这样就构成了一个面向商品信息的星型模型。
    同样,将客户信息等内容进行扩展,就可以得到雪花模型。

《Hive 基础知识》 星型模型
《Hive 基础知识》 雪花模型-part

什么是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的元数据包含表名、表属性、表数据所在目录等信息。

《Hive 基础知识》

  • HQL执行过程
    解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存于HDFS中,并且随后由MapReduce调用执行。

《Hive 基础知识》

  • Hive体系结构

《Hive 基础知识》

Hive的几种安装模式
  • 嵌入模式
    Hive的源信息存入Hive自带的Derby数据库中。
    局限性较大。只允许一个链接,所以多用于演示。

《Hive 基础知识》

将安装包解压后,通过:./hive进入hive的命令行模式。这时就使得hive初始化了元数据文件。查看目录可见metastore.db

《Hive 基础知识》

  • 本地模式
    元数据存于另外一个数据库中。例如将元数据存于一个MySql数据库。
    同时,mysql数据库与Hive运行于同一个物理机上。
    支持多个链接,多用于开发与测试。

  • 远程模式
    元数据存于另外一个数据库中。例如将元数据存于一个MySql数据库。
    同时,mysql数据库与Hive运行于不同物理机上。

《Hive 基础知识》

解压缩文件后,首先需要将对应数据库的驱动文件jar包拷贝进lib文件夹中。随后进入conf文件夹,配置hive-site.xml文件
需要配置的内容在官网文档中可以找到。

《Hive 基础知识》

依次为url、驱动、用户名、密码

《Hive 基础知识》

随后在hive中创建表

《Hive 基础知识》

对应信息将会出现在mysql中

《Hive 基础知识》
《Hive 基础知识》

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
    若是显示:

《Hive 基础知识》

说明该版本未携带web页面的 .war包,需要通过下载源代码(*-src.tar.gz)文件。找到/hwi/web目录。
使用指令:

jar cvfM0 hive-hwi-*.*.*.war -C web/

将其中内容打包,随后拷贝到hive的lib目录下
随后根据官网给出的配置内容修改conf/hive-site.xml文件。

《Hive 基础知识》

还需要将jdk/lib/tools.jar 文件拷贝到hive/lib/目录下。
随后就可以通过ip:port进行访问。将上述的CIL命令改变为可视化的操作。

《Hive 基础知识》

ps:非原生安装,如cloudera,大多通过hue进行统一的大数据页面管理:

《Hive 基础知识》

  • 远程服务
    端口: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数据存储

一般默认的Hive数据存储目录为:
hdfs上:/user/hive/warehouse
这一点在非原生的cloudera上也是一样:

《Hive 基础知识》

Hive数据存储基于HDFS,没有单独的数据存储格式。
存储结构主要包括:数据库、文件、表、视图
可以直接加载文本文件(.txt .csv等)
创建表的时候,可以指定Hive的列分隔符,行分隔符等。

表结构包含
  • Table:内部表
    其概念与数据库上的表类似
    每个表在hive上都有一个相应的目录进行存储。
    删除表时,元数据与数据都会被删除。
    操作举例:

《Hive 基础知识》 image.png

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 基础知识》

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 ......

《Hive 基础知识》

  • External Table 外部表
    指向已经在HDFS上存在的数据,可以用于建立partition。
    与内部表在元数据的组织上是相同的,而在实际数据的存储上有差异。
    外部表是一个过程,加载数据和创建表同步完成,并不会移动到数据仓库中,仅仅是一个链接。所以删除外部表不会删除真实数据文件。

《Hive 基础知识》

创建方式如下:

hive> create external table external_test_table
    > (tid int,tname string,age int)
    > location '/input'   --创建表的内容所在目录
    > row format delimited fields terminated by ',' --指定分隔符;
  • Bucket Table 桶表
    桶表对数据进行哈希取值后,放入不同的文件中进行存储。

《Hive 基础知识》

创建方式如下:

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中并不支持。

    原文作者:edwin1993
    原文地址: https://www.jianshu.com/p/d0460113c2e3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞