大数据-hive入门详解

hive概述

什么是hive?
  • 维基百科-hive
  • Apache Hive 中文手册
  • hive是建立在hadoop架构上的数据仓库工具,能够提供数据精炼、查询和分析,能够将结构化的数据文件映射成一张表,并提供类SQL查询功能,底层是将SQL转换成MR程序
HQL转换成MR流程
  • 首先hive通过对SQL进行统计分析,将SQL语言中常用的操作用MapReduce写成很多模板,所有的MapReduce模板都封装在hive中
  • 用户根据业务逻辑编写HQL语句
  • 通过hive框架匹配出响应的MapReduce模板
  • 运行MapReduce程序,生成相应的结果返回给客户端
hive的优缺点
  • 优点
  1. 操作接口采用类SQL语法,提供快速开发能力(简单易上手)
  2. 避免了写MapReduce程序,减少了开发人员的学习成本
  3. hive适合处理大数据
  4. 支持用户自定义函数,用户可以根据自己的需求实现自己的函数
  • 缺点
  1. hive的SQL表达能力有限,迭代式算法无法表达,不擅长数据挖掘
  2. hive的执行延时较高,适合实时性不高的场合,处理小数据没有优势
  3. hive自动生成的MapReduce通常情况下不够智能,调优比较困难,粒度较粗
hive的架构

在这里插入图片描述

  • 用户接口 client
    CLI(hive shell) JDBC WEBUI
  • 元数据 metastore
    元数据包括:表名 ,表所属的数据库,表的拥有者,列/分区字段,表的类型,表的数据所在目录等,默认存放在自带的Derby数据库中,推荐使用MySQL存储metastore
  • hadoop
    使用HDFS进行存储数据,使用MapReduce进行计算
  • 驱动器 Driver
    ① 解析器(SQL parser): 将SQL字符串转换成抽象语法树AST,一般用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在,字段是否存在,SQL语义是否有误
    ② 编译器(Physical Plan): 将AST编译生成逻辑执行计划
    ③ 优化器(Query Optimizer): 对逻辑执行计划进行优化
    ④ 执行器(Execution): 把逻辑执行计划转换成可以运行的物理计划,对于hive来说就是MR
hive和数据库

hive使用了类似SQL的查询语言HQL,因此容易将hive理解为数据库.其实hive和数据库除了有类似的查询语句之外,并没有其他地方类似.

  • hive和数据库语言类似
  • hive是建立在hadoop之上的,所有hive的数据都存储在HDFS中,而数据库则可以将数据保存在块设备或者本地文件系统之中
  • hive是针对数据仓库应用设计的,因此不建议对数据进行改写,所有的数据都是在加载的时候确定好的,而数据库中的数据经常涉及到修改操作
  • hive在访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高,但是由于MapReduce的引入,hive可以并行访问数据,因此没有索引,对于大数据量的访问,hive仍然很有优势.数据库中,通常会针对一个或几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟.
  • hive中大多数查询的执行是通过hadoop提供的MapReduce来实现的,而数据库通常有自己的执行引擎
  • 由于MapReduce框架本身具有较高的延迟,所以在利用MapReduce执行hive查询的时候,也会有较高的延迟.数据库在数据规模较小的时候,执行延迟较低,数据规模大的时候,hive的并行计算是很有优势的
  • hive是建立在hadoop上的,所以hive的可扩展性和hadoop的可扩展性是一致的.数据库由于ACID语义的严格控制,扩展性有限
  • hive支持很大规模的数据,数据库支持的数据规模较小
hive数据类型
  • 基本数据类型
hive数据类型			java数据类型		长度						例子
tinyint				byte			1byte有符号整数			1
smalint				short			2byte有符号整数			2
int					int				4byte有符号整数			3
bigint				long			8byte有符号整数			4
boolean				boolean			布尔类型,truefalse		
float				float			单精度浮点数				2.1
double				double			双精度浮点数				2.2
string				string			字符串					'aaa' "bbb"
timestamp							时间类型		
binary								字节数组

hive的原子数据类型是可以进行隐式转换的,类似于java的类型转换,但是不会反向转换,除非使用cast
  • 集合数据类型
struct类型
	struct{
   value1 string,value2 int}
map类型
	键值对元组集合,键值对是 key1->value1
array类型
	数组是一组具有相同类型和名称的变量集合 [value1, value2]

create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
row format delimited 
fields terminated by ','  [列分隔符]
collection items terminated by '_'  [map struct array 的分隔符]
map keys terminated by ':'  [map中key value的分隔符]
lines terminated by '\n';   [行分隔符]

访问形式:  friends[1]   children['key']   address.city
hive SQL
创建数据库: create database if not exists  db_name;
		  create database db_name location '/db_aname.db';--指定在hdfs上的路径
查询数据库: show databases;
		  show databases like 'order_*';
数据库信息:  desc database db_name;
		   desc database  extended db_name;
切换数据库: use db_name1;
修改数据库部分参数: alter database db_name set dbproperties('key'='value');
<-(*****!!!慎用!!!****)
删除数据库: drop database db_name; drop database if exists db_name;
		 如果数据库不为空,使用cascade: drop database db_name cascade;
(*****!!!慎用!!!****)->	  
建表语句: 
create [external] table [if not exists] table_name
[(col_name data_type [comment col_comment], ...)]
[comment table_comment]
[partitioned by (col_name data_type [comment col_comment], ...)]
[clustered by (col_name, col_name, ...)
[sorted by (col_name [asc|desc], ...)] into num_buckets buckets]
[row format row_format]
[stored as file_format]
[location hdfs_path]
解释:
create table 创建表,使用if not exists 规避表存在异常
external 创建外部表时使用,和内部表的区别在于,删除外部表时只删除元数据,不删除数据,内部表删除的时候元数据和数据一起被删除
comment 做注释说明
partitioned by 创建分区表,后面跟分区字段名称和类型
clustered by  创建分通表
sorted by 桶内排序,指定排序字段

(1)row format delimited 
[fields terminated by char] 
[collection items terminated by char]
[map keys terminated by char] 
[lines terminated by char](2)serde serde_name [with serdeproperties (property_name=property_value, property_name=property_value, ...)]
用户在建表的时候可以自定义serde或者使用自带的serde,如果没有指定(1),将会使用自带的serde.serde是serialize/deserilize 的简称,目的是用于序列化和反序列化.
fields terminated by char : 数据列分隔符
collection items terminated by char: 集合元素分隔符
map keys terminated by char : map分隔符
lines terminated by char: 数据行分隔符

stored as 指定存储文件类型,常用的数据存储文件类型: sequencefile(二进制序列文件),textfile(文本
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值