Hive介绍

Hive是什么

  • Hive是建立在Hadoop上的数据仓库的基础架构。它提供了一系列的工具,可以用来进行数据提取转化加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据,同时这个语言也允许熟悉Map Reduce开发者的开发自定义的mapper和reduce来处理内建的mapper和reducer无法完成的复杂的分许工作

  • 什么是数据仓库:数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

  • Hive是SQL解析引擎,他将SQL语句转译成M/R Job然后在Hadoop执行

  • Hive的表其实就是HDFS的目录,按照表名把文件夹分开,如果是分区表,则分区值是子文件夹,可以直接在M/R Job里使用这些数据

  • Hive相当于Hadoop的客户端,部署时不一定放在集群管理节点中,可以放在某个节点上面

Hive与传统数据库的比较

查询语句HiveQLSQL类SQL的查询语句HQL,熟悉SQL开发的开发者可以很方便的使用Hive进行开发
数据存储位置HDFSRaw Device 或者本地所有的Hive的数据都是存储在HDFS中的。而数据库则可以将数据保存在块设备或者本地文件系统中
数据格式用户定义系统决定Hive中没有定义专门的数据格式。而在数据库中,所有的数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时
数据更新不支持(1.x版本以后支持)支持Hive对数据的改写和添加比较弱化,0.14版本之后支持,需要启动配置项。而数据库中的数据通常是需要经常进行修改的
索引新版本有,但是很弱Hive在加载数据的过程中不会对数据进行任何的处理。因此访问延迟比较高。数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了Hive不适合在线数据查询
执行MapReduceExcutorHive中执行是通过MapReduce来实现的而数据库通常有自己的执行引擎
执行延迟
可扩展性
数据规模由于Hive建立在集群上并可以利用MapReduce进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小。

Hive的存储格式

  • Hive的数据存储基于Hadoop HDFS
  • Hive没有专门的数据文件格式,常见的有一下几种
Hive的存储格式格式介绍优缺点
TEXTFILETextFile即正常的文本格式,是Hive默认文件存储格式,应为大多数情况下源数据文件都是以text文件格式保存(便于查看验数和防止乱码)。此种格式的表文件在HDFS上是明文,可用hadoop fs -cat命令查看,从HDFS上get下来后也可以直接读取。这种格式存储文件默认每一行就是一条记录,可以指定任意的分隔符进行字段间的分割。但这个格式无压缩,需要的存储空间很大。虽然可以结合Gzip、Bzip2等使用,但是使用这种方式,Hive不会对数据进行切分,从而无法对数据进行并行操作,所以一般这种防止只有与其他系统由数据交互的接口表采用TEXTFILE格式,其他事实表和维度表都不建议使用
RCFile这个格式是Record Columnar的缩写,是Hadoop中第一个列文件格式,能够很高的压缩和快速的查询性能通常写操作比较慢,比非列形式的文件格式需要更多的内存空间和计算量。RCFile是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block,其次,块数据列式存储,有利于数据压缩和快速的列存取
ORCFileHive从0.11版本开始提供了ORC的文件格式,ORC文件不仅仅是一种列式文件存储格式,最重要的是有着很高的压缩比,并且对于MapReduce来说是课切分的。在Hive中使用ORC作为表的文件存储格式,不经可以很大程度的节省HDFS存储资源,而且对数据的查询和处理性能有着非常大的提升,应为ORC较其他文件格式压缩比高,查询任务的输入数据量减少,使用的Task也就减少了。ORC能很大程度的节省存储和计算资源,但它在读写的时候需要消耗额外的CPU资源来压缩和解压缩,当然这部分的CPU消耗是非常小的
ParquetParquet仅仅是一种存储格式,他是语言、平台无关的,并且不需要和任何一种数据处理框架绑定,这也是parquet相较于orc的仅有的优势:支持嵌套结构Parquet没有太多其他可圈可点的地方,比如他不支持update操作(数据写成后不可修改),不支持ACID等
SEQUENCEFILESequenceFile是HadoopAPI提供的一种二进制文件,他将数据以<key,value>的形式序列化到文件中,这种二进制文件内部使用Hadoop的标准的Writable接口实现序列化和反序列化,它与Hadoop APi中的MapFile是互相兼容的。Hive中的SequenceFile继承自Hadoop API的SequenceFile,不过他的key为空,使用value存放实际的值,这样是为了避免MR在运行map阶段的排序过程。SequenceFile支持三种压缩选择:NONE、RECORD、BLOCK。Recore压缩率低,一般建议使用BLOCK压缩。SequenceFile最重要的优点是Hadoop原生支持较好,有API,但除此之外平平无奇,实际生产中不会使用
AVIOAvro是一种用于支持数据密集型的二进制文件格式他的文件格式更为紧凑,若要读取大量数据时,Avro能够提供更好的序列化和反序列化性能。并且Avro数据文件天生是带Schema定义的,所以他不需要开发者在API级别实现自己的Writable对象,Avro提供的机制是动态语言可以方便的处理Avro数据。最近多个子项目都支持Avro数据格式,如:Pig,Hive,Flume、Sqoop和Hcatalog

Hive的四大常用存储格式存储效率及执行速度对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Hive操作客户端

常用的俩个:CLI,JDBC/ODBC

  • CLI:即执行shell命令行
  • JDBC/ODBC是Hive的Java,与使用传统数据库JDBC的方式类似
  • Hive将元数据存储在数据库中(metastore)目前只支持MySQL、derby。
  • Hive中的元数据包括表的名字、表的列和分区及属性、表的属性(是否为外部表等)、表的数据所在目录等;由解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成,生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行
  • Hive的数据存储在HDFS中。大部分的查询是由MapReduce完成(但是:包含*的查询,比如:select * from table 不会生成MapReduce任务)

Hive的metastore

  • metastore是hive元数据的集中存放池
  • metastore默认使用内嵌的derby数据库作为存储引擎
  • Derby引擎的缺点,一次只能打开一个会话

今日份的分享到此结束,希望大家做个好梦,晚安,世界!!!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被迫内卷的学习记录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值