hive详解

一.什么是HIVE:

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
工作流程:HIVE先定义一张表(这张表的结构和字段数据都存储在MYSQL或DERBY数据库中,这张表的信息就是元数据),再从本地或是HDFS上将文件加载到HIVE,通过mapreduce对数据进行计算,最后输出到HDFS上,形成一个或多个文件。最后用户可通过sql语句对HIVE进行查询。

1.什么是数据仓库:(针对大数据)

数据仓库是面向主题的,是对历史数据进行分析的。默认情况下只能读取数据,不能修改删除。侧重于分析,决策。

2.hive的安装模式:(元数据存放数据库,一般选择本地模式,如何安装,请看另一篇博客)

1.内嵌模式:使用derby数据库,为hive自带数据库,只能允许一次会话连接。
2.本地模式:使用mysql数据库
3.远程模式

二.HIVE和MapReduce的对比:

MapReduce缺点:

1.人员学习成本太高
2.项目周期要求太短
3.MapReduce实现复杂查询逻辑开发难度太大

HIVE的优势:

1.可扩展 :Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
2.延展性 :Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
3.容错: 良好的容错性,节点出现问题SQL仍可完成执行。

HIVE基本组成:(了解)

1.用户接口:包括 CLI、JDBC/ODBC、WebGUI。
2.元数据存储:通常是存储在关系数据库如 mysql , derby中。
3.解释器、编译器、优化器、执行器。
4.用户接口主要由三个:CLI、JDBC/ODBC和WebGUI。其中,CLI为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。
5.元数据存储:Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等
6.解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。

工作图:
|在这里插入图片描述
三.HIVE的基本操作:

hive表中字段类型:
1.基本类型:数值类型(int,float,double),boolean,string,时间类型
2.数组类型:array<>,如name array<string>
3.map类型:map<key:value>
4.struct类型:struct<key1:value1,key2:value2>

1.表的创建:(最基本,类似于MYSQL)

CREATE [TEMPORARY] TABLE t_uer(id int,name string,hobby arrary<strring>) ROW FOMAT DELIMITED FIELDS TERMINATED BY "\t" COLLECTION ITEMS TERMINATED BY "," MAP KEYS TERMINATED BY ":"//创建一张名为t_user的表,[]中的可不要

2.分区:(提高数据查询效率)

CREATE [TEMPORARY] TABLE t_uer(id int,name string,hobby arrary<strring>) PARTITIONED BY (gender int) ROW FOMAT DELIMITED FIELDS TERMINATED BY "\t" COLLECTION ITEMS TERMINATED BY "," MAP KEYS TERMINATED BY ":"//以gender作为分区标准,也是一个字段。

3.分桶:

CREATE [TEMPORARY] TABLE t_uer(id int,name string,age int,hobby arrary<strring>) CLUSTERED BY (age) INTO 5 BUCKETS ROW FOMAT DELIMITED FIELDS TERMINATED BY "\t" COLLECTION ITEMS TERMINATED BY "," MAP KEYS TERMINATED BY ":"//以age为分桶,分5个

四.为什么要进行分区分桶:

hive是一个数据仓库,针对的是大数据,但每次进行sql查询的时候,会对表中所有数据进行遍历导致效率相对低,所以通过分区分桶,可将数据进行限定范围的查询。分区的时候,会形成一个类似于文件夹的目录,暂且就称之为目录,一张表会有一个或多个这样的目录,但可能出现数据倾斜度。分桶则直接形成多个文件,由自己分桶时定义,并按类的hash值将数据进行分散存储,可解决数据倾斜度过大。分区后可继续进行分桶。

五.加载数据:
分区:HDFS上加载不需要local,LINUX需要

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

分桶:
1.创建一张临时表t_tmp,将数据load进去

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename

2.用insert插入到分桶的表中,会启动mapreduce

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE t_tmp
set hive.enforce.bucketing=true;//开启分桶支持
insert into tablename select * from t_tmp

六.自定义函数中的UDF,分为3种:

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值