hive 数据仓库

目录(hive)本质(是什么)作用(干什么)架构(有什么)优缺点优点缺点流程(怎么运作)常用(必会)常见问题(必知)1、数据库和数据仓库有什么区别?异议本质(是什么)本质:将HQL、SQL转换成MapReduce程序hive处理的数据 存储在HDFS上hive分析数据的底层原理是mapReducehive执行程勋运行在yarn上作用(干什么)可以将海量结构化的数据文件映射为一张表,并...
摘要由CSDN通过智能技术生成

本质(是什么)

本质:将HQL、SQL转换成MapReduce程序
hive处理的数据 存储在HDFS上
hive分析数据的底层原理是mapReduce
hive执行程勋运行在yarn上

作用(干什么)

可以将海量结构化的数据文件映射为一张表,并提供类sql查询功能
常用于数据分析

架构(有什么)

在这里插入图片描述
或者看图:
在这里插入图片描述
如图:hive的角色:client、driver、metastore三部分

1、client用户接口
CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)(弃用
2、driver驱动器
a、SQL parser 解析器:将sql字符串转换成抽象语法书树ast
b、physical plan 将ast编译成逻辑执行计划
c、query optimizer 优化器对逻辑执行计划进行优化
d、execution执行器:把逻辑执行计划装换成可以运行的物理计划。(对hive来讲就是:mr/spark)
3、metastore元数据
包括:表名、表所属的数据库、表的拥有者、列/分区字段、表的类型(内部、外部表)、表的数据所在目录等。

优缺点

优点

  1. 开发容易、快:采用类sql语法;
  2. 开发成本低:避免了写MapReduce
  3. 适合处理大数据:适合应用在延迟性比较大的、时效性低的场景,
  4. 比较灵活:支持自定义函数,用户可以可以根据自己的需求实现自己的函数

缺点

  1. HQL表达能力有限:迭代式算法无法实现、数据挖掘方面不擅长
  2. 效率低:生成MapReduce作业(比较慢)、调优比较难(颗粒粗)

流程(怎么运作)

hive的知识比较散,底层运行的MapReduce作业。流程不讲述。。。
知识大致分类为:DML(操作数据)、DDL(操作元数据、表。。。。)

DML

1、增(4种方式)

  • load data local inpath overwrite/into table tablename (partition)
  • from …insert overwrite/into table tablename select …
  • insert into table values()
  • insert into local directory dic… select-statement
    2、删改(需要配置事务)
    配置事务有限制:
    rollback、commit不支持
    必须是orc的文件格式
    表必须被分桶
    默认事务是不开启的

DDL

DDL内容主要分为:创建数据库、创建表(内部、外部表)、分区、分桶、视图、索引、函数,共7部分梳理

创建数据库

create database 数据库名称

创建表

1、表的数据类型

b

2、建表语句

1、create table tablename(col dateType…) row format dilimited fields terminated by"," collection items terminated by ‘’ map keys terminated by ‘’| serde(正则)
2、create table tablename as select_statement(表结构和数据)
3、create table tablename like tablename(只有表结构)

hive的分区

作用:方便提高检索效率
展现形式:在hdfs目录上展示多级目录
分区的分类:静态(认为指定)、动态分区(由记录的某一列决定,默认使用动态分区true,需要使用insert statement)
分区的操作

创建分区
	create table dept_partition(deptno  int , dname string,loc string)
	partitioned by (month string)//分区
	row format delimited fields terminated  by '\t';
添加分区(静态分区)
	alter table tablename add parition(col=val)只适用于静态分区
删除分区
	alter table tablename add parition(col = val)只适用于静态分区
修复分区
	分区是作为元数据存储在MySQL中的,当hdfs路径中包含多级目录,同时存在分区列的是,
	可以创建外部表使用,但是分区的元数据没有在MySQL中存储,查不到数据
	msck repair table tablename

hive的分桶

应用场景
	1、数据抽样
	2、事务支持
分桶原则
	取其中某一列的值,将值取hash值,再将hash值 % 桶的个数  =>取模
使用
	设置允许分桶的参数
实现方式
	创建表的时候指定 clustered by tablename(col) into number buckets
	注意:分桶表在执行的时候,reduce task的个数跟桶的个数保持一致
抽样查询
	tablesample(bucket x out of y)
		x:从哪个桶开始抽取数据
		y:桶的个数的倍数或者因子,一般是使用因子

hive的索引

目的:提高检索效率
创建
create index index_name on tablename(col) as ‘索引器’ in table tablename(存储索引数据)
注意:

	1、hive不会自动创建索引
	2、创建索引时,执行 ALTER INDEX index_name ON table_name [PARTITION partition_spec] REBUILD;
	3、每次新增数据之后都需要重新创建索引

hive函数

hive本身自带了很多内嵌函数

	字符函数
	数值函数
	日期函数
	复杂类型函数
	条件函数

函数的分类

	udf  一进一出
	udaf  多进一出
	udtf  一进多出

自定义函数

	1、编写Java代码继承UDF类
	2、实现evaluate方法,所有实现的核心逻辑写到此方法中
	3、将写好的代码打成jar包
	4、将jar包上传到本地linux或者hdfs
	5、如果是本地linux,在hive客户端执行add jar path;
		create temporary function func_name as 'package+class' 
	6如果是hdfs,直接创建函数
		create function func_name as 'package+class' using 'jar在hdfs上的路径'

常用(必会)

1、hive的基本操作

启动hive: bin/hive
查看数据库: show databases
打开默认数据库: use defsult
显示数据库的表: show tables
创建一张表:create table student (id int , name string)
显示tablename的描述结构:desc tablename
插入数据: insert into student (1001,’小明‘)
查询表中数据: select * from table
退出hive : quit

常见问题(必知)

1、数据库和数据仓库有什么区别?

  • 数据库用于支撑业务系统的交互查询;hive用于离线业务插叙
  • 数据库的数据是维持更新;hive会把历史数据全部保留下来,形成一个时间拉链数据
  • 数据库存储的是单一系统的数据;hive是将多种数据源的数据规整到一起

2、hive数据的存储位置

因为hive是建立在Hadoop之上的,数据是存在hdfs上的

3、内部表和外部表的区别

创建
	内部表不需要指定数据存储的路径,直接将数据存储在默认的目录中
	外部表需要使用external关键字指定,需要使用location指定存储数据的位置
删除
	内部表的数据和元数据都是由hive来管理的,删除的时候全部删除
	外部表的数据由hdfs管理,元数据由hive管理,删除的时候只删除元数据,数据不会删除

4、hive优化策略(本质:当做MR优化)

1、可以查看sql的执行计划
2、抓取策略
3、本地模式
4、并行模式
5、严格模式(strict nonstrict)
	使用严格模式后会禁止一些查询
6、map端聚合
7、join
	1、当多表连接的时候尽可能多的使用相同的连接键
	2、将小表尽量放在左边
	3、map端join(将小表的数据加载到内存中)
		手动
			/*+ mapjoin(smalltable)*/
		自动
			默认将坐标的表当作小表
				根据文件大小来判断大表还是小表
8、排序
	order by
		会将所有的数据加载到一个reduce中
	sort by	
		保证每个reduce数据有序
	distributed by
		保证分区有序
	clustered by	
		等同于sort by + distributed by,但是不能指定排序策略
	注意:
		推荐使用sort by + distributed by结合使用
9、map和reduce个数的设置
	map task的个数是由切片决定的
	reduce是设置的
		1、数据量
		2、数据字段可能产生的key的个数
10、重用jvm
	适用场景
		小文件过多
		task过多
	使用
		预先s申请一部分task的资源,当任务开始执行的时候,占用资源,不用去频繁申请销毁资源
	注意
		当整个job执行完成之后,才会释放所有资源,所以task的资源个数需要进行测试

异议

有差错或者需要补充的地方,还望大家评论指出,并详细论证,相互学习,共同进步哈!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值