Hive 基础知识

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

综述:

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

  • 数据仓库
    数据仓库是一个面向主题的、集成的、不可更新的、对时间不变化的数据集合。用于支持企业和组织的决策分析处理。
    面向主题:决策时所关注的方面。以商品推荐系统的数据仓库为例,其主题就是商品信息
    集成的:数据仓库的数据源于不同的数据,可以是关系型数据库、非关系型数据库或者文件等。
    不可更新:主要用于查询,不建议更新。
  • OLTP与OLAP应用
    OLTP连接事务处理:关注事务的处理,如银行的转账。操作的频率会非常高。
    OLAP连接分析处理:基于原来的数据进行分析与查询,如推荐系统。主要进行查询,不进行删除更新等。

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

星型模型
雪花模型-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的元数据包含表名、表属性、表数据所在目录等信息。
  • 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上都有一个相应的目录进行存储。
    删除表时,元数据与数据都会被删除。
    操作举例:
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> 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中并不支持。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容