数据仓库hive----基础知识

使用hive的版本
在这里插入图片描述
什么是数据仓库?
**<百度百科>**数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。
什么是hive?
•Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
•本质是将HQL转换为MapReduce程序 (可以看做对MapReduce的封装)
理解hive的体系结构
在这里插入图片描述
Hive 的结构可以分为以下几部分
user interface:包括 CLI, Client, HWI
元数据存储:通常是存储在关系数据库如 mysql, derby(内置的数据库) 中
HiveServer2:跨语言的接口调用,并支持多客户端的并发和认证
Driver:核心驱动器接口类,衔接内核和UI的解析、优化、执行器的桥梁
Hadoop:用 HDFS进行存储,利用MapReduce 、Tez、Spark进行计算

为什么存储元数据信息用mysql而不用内置的Derby
Hive 将元数据存储在 RDBMS 中,一般常用 MySQL 和 Derby。
默认情况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能允许一个会话连接,只适合简单的测试。实际生产环境中不适用, 为了支持多用户会话,则需要一个独立的元数据库,使用 MySQL 作为元数据库**,Hive 内部对 MySQL 提供了很好的支持**。

内置的derby主要问题是并发性能很差,可以理解为单线程操作。

Derby还有一个特性。更换目录执行操作,会找不到相关表
比如在/usr下执行创建表,在/usr下可以找到这个表。在/etc下执行查找这个表,就会找不到 。

Hive在Hadoop生态圈的地位
在这里插入图片描述
Hive的执行引擎
1、配置mapreduce计算引擎
set hive.execution.engine=mr;
2、配置spark计算引擎
set hive.execution.engine=spark;
3、配置tez 计算引擎
set hive.execution.engine=tez;
MapReduce:是一种离线计算框架,将一个算法抽象成Map和Reduce两个阶段进行处理,非常适合数据密集型计算。

Spark:Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。

Tez: 是基于Hadoop Yarn之上的DAG(有向无环图,Directed Acyclic Graph)计算框架。它把Map/Reduce过程拆分成若干个子过程,同时可以把多个Map/Reduce任务组合成一个较大的DAG任务,减少了Map/Reduce之间的文件存储。同时合理组合其子过程,也可以减少任务的运行时间
Tez可以将多个有依赖的作业转换为一个作业(这样只需写一次HDFS,且中间节点较少),从而大大提升DAG作业的性能
企业的数据处理大致分为两类:
一类是操作型处理,也称为联机事务处理OLTP,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。(数据库)
另一类是分析型处理OLAP,一般针对某些主题的历史数据进行分析,支持管理决策。(数据仓库)
为什么使用hive
•操作接口采用类SQL语法,提供快速开发的能力
•避免了去写MapReduce,减少开发人员的学习成本
Hadoop Streaming解决了非Java语言开发人员使用Hadoop的问题。Hive则解决了非开发人员(尤其是那些习惯使用SQL的数据分析师,他们的编程能力相对较弱)使用Hadoop的问题
hive 特点
•可扩展
Hive可以自由的扩展集群的规模,一般情况下不需要重启服务
•延展性
Hive支持用户自定义函数udf,用户可以根据自己的需求来实现自己的函数
•容错
良好的容错性,节点出现问题SQL仍可完成执行
为什么数据仓库比数据库的时延高
数据量远远大于数据
map阶段会将中间结果写入本地大量数据进行io
流式处理 内存处理吗 spark待续----
Hive应用场景
Hive非常适合数据仓库中,对时延要求不那么敏感的场景。它的查询速度并非像RDBMS(如MySQL)那样可以达到毫秒级,如果业务要求低时延那么我们就不能使用Hive,而应该采用其它技术方案(如HBase)
Hive功能
Hive主要应用于查询,它不支持行级别的UPDATE和DELETE,但是支持insert into table或者insert overwrite table(Hadoop的hdfs一次写入多次读取)
为什么一次写入多次读取
数据是存储在hdfs
写入后不能修改了.只能删除后再次写入?(为了性能放弃)
互斥锁影响性能.
可以试想一下…多个i/o同时写…那么就要互斥锁…而锁会大幅度降低性能…所以为了简单.就不能修改了.暴力而且有效.
还有另外一个原因.大文件修改,这个意义不大,你要怎么在文件中定位位置呢?

早期的Hive只能利用insert into语句,以增加文件的方式向表中批量增加行。而在0.14.0版本之后,Hive允许使用Insert
into table …
value语句,这代表着可以按行加数据,不过不能大量添加。另外update和delete操作也被允许执行了。

HDFS只能允许文件的覆盖,不允许文件的更新。所以update、delete和insert
into操作引起的变化会存在一个很小的增量文件中。然后metastore在后台的MapReduce程序会将他们合并到“基表”中。这些操作就需要事务的支持,这样才能保证表的一致性。

读时模式vs写时模式(hive是读时模式)
Hive这种类型的数据处理模式对数据的验证并在不加载数据时进行,而在查询时进行。这称为“读时模式”(schema on read)
在传统数据库里,表的模式是在数据加载时强制确定的。如果在加载时发现数据不符合模式,则被拒绝加载数据。因为数据是在写入数据库是对照模式进行检查,因此这一设计有时被称为“写时模式”(schema on write)。
Hive处理的数据是大数据,在保存表数据时不对数据进行校验,而是在读数据时校验,不符合格式的数据设置为NULL;
读时模式的优点是,加载数据库快。(分析处理)
写时模式的优点是读取速度快(传统的数据库要求低时延查询速度快)
更新、事务和索引
Hive在执行HQL语句的时候,后台其实还是使用MapReduce程序来完成任务的,而普通数据库则是借助自己的引擎。
MapReduce是基于HDFS系统的,通常而言Hive处理数据都是度多写少。Hive的表更新是采用覆盖的方式,而这种情况下处理数据绝大部分都会访问整个表。这对在大规模数据集上运行的数据仓库非常见效。
早期的Hive只能利用insert into语句,以增加文件的方式向表中批量增加行。而在0.14.0版本之后,Hive允许使用Insert into table … value语句,这代表着可以按行加数据,不过不能大量添加。另外update和delete操作也被允许执行了。
HDFS只能允许文件的覆盖,不允许文件的更新。所以update、delete和insert into操作引起的变化会存在一个很小的增量文件中。然后metastore在后台的MapReduce程序会将他们合并到“基表”中。这些操作就需要事务的支持,这样才能保证表的一致性。
其实对于更新、事务和索引,并非Hive不支持,而是影响性能,不符合最初数据仓库的设计理念。但是随着时间的发展,Hive在很多方面也做出了妥协,这也导致了Hive和传统数据库的区别越来越小。
hive支持子查询有限
Hive对子查询的支持很有限。它只允许子查询出现在SELECT语句的FROM子句中。如果发现Hive不支持你写的子查询,可以看看能不能把它写成连接操作。例如,一个IN子查询可以写成一个半连接或连接。
但是,既然该子查询在虚拟机跑的通的话,那就说明hive肯定是支持in内的查询的,但是为什么用web界面的探查去跑会报错呢。于是查询了hive官网。在hive的官网,找到问题所在。原来hive在0.13版本以后开始支持更多的子查询,如in ,not in的子查询。如果我们用的hive不支持如in,exists,not in等子查询,很可能是0.13版本之前的旧版本。
hive内部表vs外部表
外部表——>创建表的时候指定external,外部表在删除之后,仅会删除hive外部表中元数据,不会删除数据和指定路径
内部表——>删除内部表会将数据和默认路径都删除,因此可能会误删数据,谨慎操作

内部表数据由Hive自身管理,外部表数据由HDFS管理;
元数据都存储hive的metastore(Mysql、Derby)
所以删除内部表的时候是全删除,删除外部表的时候只是删除元数据信息并不删除真实数据的信息;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值