Hive初识

参考文章:https://www.cnblogs.com/qingyunzong/p/8707885.html

一、什么是Hive

1.基于Hadoop的一个数据仓库工具。

2.可将结构化的数据映射为一张数据库表。

3.提供HQL查询功能。

4.底层数据存储在HDFS上。

5.本质是将SQL语句转换为MapReduce任务来运行。

实质:一款基于HDFS的MapReduce计算框架,对存储在HDFS中的数据进行分析和管理。

6.适用于离线的批量数据计算。

二、为什么使用Hive

  • 直接使用MapReduce:

        1、学习成本高;2、项目周期要求短;3、实现复杂查询逻辑的开发难度大。

  • 换而使用Hive的好处:

        1、接口友好,接口采用类SQL语法,可实现快速开发;

        2、降低学习成本,避开了MapReduce的学习编写;

        3、可扩展性强:可自由扩展集群规模而无需重启服务,也支持用户自定义函数(延展性)。

三、优缺点

  • 优点:

        1.可扩展性

        2.延展性

        3.容错性良好(即使节点出错,SQL语句仍可完成执行)

  • 缺点:

        1.不支持记录级别的增删改操作。

        2.查询延时很严重(因为MapReduce job的启动过程消耗很长时间,所以一般不用在交互查询系统中)。

        3.不支持事务(因为没有增删改,所以主要用来做OLAP,而不是OLTP)。

OLAP —— 联机分析处理

OLTP —— 联机事务处理

四、Hive与RDBMS的对比

 

五、执行流程

Hive SQL通过命令行或客户端提交,经过 Compiler 编译器,运用 MetaStore 中的元数据进行类型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过优化处理,产生 一个 MapReduce 任务。

六、Hive的数据组织

1.Hive的存储结构包括数据库、表、视图、分区和表数据等。数据库、表、分区等等都对应HDFS上的一个目录。表数据对应HDFS对应目录下的文件。

2.Hive中的所有数据都存储在HDFS中,没有专门的数据存储格式,因为Hive是读模式,可支持TextFile、SequenceFile、RCFile或者自定义格式等。

3.只需要在建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。

4.Hive包含以下数据模型:

database:${hive.metastore.warehouse.dir}目录下一个文件夹。

table:在 HDFS 中表现所属 database 目录下一个文件夹。

external table:与 table 类似,不过其数据存放位置可以指定任意 HDFS 目录路径。

partition:在 HDFS 中表现为table目录下的子目录。

bucket:在HDFS中表现为同一个表目录或者分区目录下根据某个字段的值进行hash散列之后的多个文件。

view:与传统数据库类似,只读,基于基本表创建。

5.Hive的元数据存储在RDBMS中,除元数据外的其他所有数据都基于HDFS存储。默认情况下,Hive元数据保存在内嵌的Derby数据库中,只能允许一个会话连接,只适合简单的测试。实际生产环境中不适用,为了支持多用户会话,则需要一个独立的元数据库,使用MySQL作为元数据库,Hive内部对MySQL做了很好的支持。

6.Hive中的表分为内部表、外部表、分区和bucket表。

内部表和外部表的区别:

  删除内部表,删除表元数据和数据

  删除外部表,删除元数据,不删除数据

内部表和外部表的使用选择:

  大多情况下,二者区别不明显,如果数据的所有处理都在 Hive 中进行,内部表合适;如果 Hive 和其他工具要针对相同的数据集进行处理,外部表合适。

  使用外部表访问存储在 HDFS 上的初始数据,然后通过 Hive 转换数据并存到内部表中

  使用外部表的场景是针对一个数据集有多个不同的 Schema

  通过外部表和内部表的区别和使用选择的对比可以看出来:hive 其实仅仅只是对存储在 HDFS 上的数据提供了一种新的抽象,而不是管理存储在 HDFS 上的数据。所以不管创建内部表还是外部表,都可以对 hive 表的数据存储目录中的数据进行增删操作。

分区表和分桶表的区别: 

  Hive 数据表可以根据某些字段进行分区操作,细化数据管理,可以让部分查询更快。同 时表和分区也可以进一步被划分为 Buckets,分桶表的原理和 MapReduce 编程中的 HashPartitioner 的原理类似。

  分区和分桶都是细化数据管理,但是分区表是手动添加区由分,于 Hive 是读模式,所 以对添加进分区的数据不做模式校验,分桶表中的数据是按照某些分桶字段进行 hash 散列 形成的多个文件,所以数据的准确性也高很多。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值