hive基础原理和架构体系

hive的体系结构

       hive是一个批处理框架,适合大批量离线计算,延时很大。hive的出现,解决了传统关系数据库,在处理大数据的瓶颈。同时懂SQL的人也可以做mapreduce数据计算统计分析,这个本来只能是java工程师才能做的工作,现在懂SQL的人也可以做这个事。所以可以说hive就是 : SQL解析引擎,将SQL语句转化为相应的MapReduce程序。

如图,hive体系结构有4部分:

1、用户接口:shell、命令、Jdbc/Odbc等接口。

2、解析器,就是driver这部分。将sql语句转译成mapreduce 模板。

driver:hive查询的sql都会先提交到driver这里。而driver又由compiler、optimizer、Executor组成。compiler将类sql查询语句进行解析、并且从元数据库取元数据解析优化,成mr job,提交到hadoop集群执行。driver里面有个优化器optimizer。

   它的作用是:

        1、去掉不必要的列和分区,优化查询。

        2、将多 multiple join 合并为一个 multi-way join;

        3、对join、group-by 和自定义的 map-reduce 操作重新进行划分;

 

3、元数据库(metaStore):derby,或mysql。这些元数据信息包括,表名,列名,分区信息,表数据所在目录等。hive解析器driver在运行时候,会读取元数据库信息。

4、hadoop存储和计算。hdfs帮hive存储数据,yarn执行mr job。

Hive特点

1、将结构化的数据存储到hdfs,并映射成一张表。可以通过SQL方式做查询分析。解决了传统数据库,数据量存不下,而且查询慢的问题。hive底层用了hdfs,可以海量的存,而且非常安全。另外查询分析作业可以实现。传统数据库,大量数据查询分析统计,需要非常长的时间。

2、hive本身是不做存储和计算,完全依赖hdfs和yarn mapreduce。hive可以理解为一个工具,将sql语句转译为mapreduce job,提交给yarn去执行。

3、应用场景,适合大数据量离线处理。比如ETL,数据提取查询转化

 

内部表和外部表的区别

1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的,而内部表则不一样;

2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!

hive执行HQL过程

1、用户提交hql语句给driver。

2、driver把这个hql发给compiler,让compiler返回一个执行计划plan。

3、compiler通过查询metaStorre获取元数据,回来解析成执行计划,发给driver。

4、dirver把执行计划,发给excuter,让它向hadoop提交mr job作业。提交job,就涉及yarn资源分配,和job执行监控和结果获取了。

hive支持的数据类型

int 、double、boolean、string、timestamp、byte[]。

hive文件格式:

默认存储的是textFile。共四种如下:

1、TEXTFILE

2、SEQUENCEFILE

3、RCFILE

4、ORCFILE(0.11以后出现)

QUENCEFILE,RCFILE,ORCFILE格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中, 然后再从表中用insert导入SequenceFile,RCFile,ORCFile表中。

hive查询标准聚合函数有:count,max,min,sum,还有可以去重的 collect_set函数。

hive查询优化

1、jion连接查询,比如A表有100万行数据,B表有30万行的数据。那么进行jion查询计算时候就应该是B jion A。因为jion操作,是先查询完左边,再查右边。很明显遍历完行数较少的B表更省时间,然后拿这个结果集,去和大表遍历查询,速度回更快,只需要遍历20万次。假如反过来,就需要拿100万条数据,去执行100万次遍历,和B表的20万的数据比对,求结果。

2、数据按分区存储,找几个关键列,作为分区键,比如时间,地区,重点是查询where条件后的列,这个和关系数据库里加索引类似,可以加速查询。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值