Hive基础

目录

一:Hive是什么

二:什么是hive?

三:Hive与传统数据库比较

四:Hive的存储格式

五:Hive操作客户端


一:Hive是什么

Hive 是建立在 Hadoop 上的数据仓库(数据来源很多,数据量大)。它提供了一系列的工具,可以用来进行数据提取(提取想要的数据)转化(转换数据成为自己想要的)加载(更改位置从别的地方加载数据 来源很多)(ETL ),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL(sql+mapreduce) ,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

hive数据来源:公司,数据库,网站,基站,埋点 通过加载将数据加载到hdfs

hive只是像数据仓库 是构建数据仓库的工具

数据库 数据仓库概念的东西

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

二:什么是hive?

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

Hive的表其实就是HDFS的目录,按表名把文件夹分开。如果是分区表,则分区值(将数据按照条件分)是子文件夹,可以直接在M/R Job里使用这些数据。(存储在hdfs中,运行简单的命令时直接读取,复杂的会转为mapreduce任务)

/user/hive/warehouse/shujia.db/ 默认表目录所在位置 shujia.db是库名 数据在表名目录下的位置

hive中表的信息以元数据信息保存在MySQL中然后进行查找

hive中的sql语句最好不要在hiva中大打 因为可能识别不了 可以在widos中打然后复制粘贴

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

三:Hive与传统数据库比较

查询语言

HiveQL

SQL

数据存储位置

HDFS

Raw Device or 本地FS

数据格式

用户定义

系统决定

数据更新

不支持(1.x以后版本支持)忽略支持,不做更新操作

支持

索引

新版本有,但弱(查数据走的是mapreduce 读数据从上到下一行一行的读)

有(提高查询效率)

执行

MapReduce(简单的操作 select *先当与cat不走mapreduce)

Executor

执行延迟

高(吞吐量大)

低((吞吐量小)

可扩展性

数据规模

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

 

四:Hive的存储格式

Hive的数据存储基于Hadoop HDFS。

Hive没有专门的数据文件格式,常见的有以下几种。

TEXTFILE

SEQUENCEFILE

AVRO

RCFILE

ORCFILE

PARQUET

TextFile:行文件

TEXTFILE 即正常的文本格式,是Hive默认文件存储格式,因为大多数情况下源数据文件都是以text文件格式保存(便于查看验数和防止乱码)。此种格式的表文件在HDFS上是明文(可以查看详细数据),可用hadoop fs -cat命令查看,从HDFS上get下来后也可以直接读取。

txt 可以是csv

TEXTFILE 存储文件默认每一行就是一条记录,可以指定任意的分隔符进行字段间的分割。但这个格式无压缩,需要的存储空间很大。虽然可结合Gzip、Bzip2、Snappy等使用,使用这种方式,Hive不会对数据进行切分,从而无法对数据进行并行操作。

一般只有与其他系统由数据交互的接口表采用TEXTFILE 格式,其他事实表和维度表都不建议使用。

RCFile:列文件

Record Columnar的缩写。是Hadoop中第一个列文件格式。能够很好的压缩和快速的查询性能。通常写操作比较慢,比非列形式的文件格式需要更多的内存空间和计算量。 RCFile是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。

ORCFile:

Hive从0.11版本开始提供了ORC的文件格式,ORC文件不仅仅是一种列式文件存储格式,最重要的是有着很高的压缩比,并且对于MapReduce来说是可切分(Split)的。因此,在Hive中使用ORC作为表的文件存储格式,不仅可以很大程度的节省HDFS存储资源,而且对数据的查询和处理性能有着非常大的提升,因为ORC较其他文件格式压缩比高,查询任务的输入数据量减少,使用的Task也就减少了。ORC能很大程度的节省存储和计算资源,但它在读写时候需要消耗额外的CPU资源来压缩和解压缩,当然这部分的CPU消耗是非常少的。

Parquet:

通常我们使用关系数据库存储结构化数据(有结构 key value结构),而关系数据库中使用数据模型都是扁平式的,遇到诸如List、Map和自定义Struct的时候就需要用户在应用层解析。但是在大数据环境下,通常数据的来源是服务端的埋点数据,很可能需要把程序中的某些对象内容作为输出的一部分,而每一个对象都可能是嵌套的,所以如果能够原生的支持这种数据,这样在查询的时候就不需要额外的解析便能获得想要的结果。 Parquet的灵感来自于2010年Google发表的Dremel论文,文中介绍了一种支持嵌套结构的存储格式,并且使用了列式存储的方式提升查询性能。Parquet仅仅是一种存储格式,它是语言、平台无关的,并且不需要和任何一种数据处理框架绑定。这也是parquet相较于orc的仅有优势:支持嵌套结构。Parquet 没有太多其他可圈可点的地方,比如他不支持update操作(数据写成后不可修改),不支持ACID等.

SEQUENCEFILE:

SequenceFile是Hadoop API 提供的一种二进制文件(可以存储所有类型数据),它将数据以的形式序列化到文件中。这种二进制文件内部使用Hadoop 的标准的Writable 接口实现序列化和反序列化。它与Hadoop API中的MapFile 是互相兼容的。Hive 中的SequenceFile 继承自Hadoop API 的SequenceFile,不过它的key为空,使用value 存放实际的值, 这样是为了避免MR 在运行map 阶段的排序过程。

SequenceFile支持三种压缩选择:NONE, RECORD, BLOCK。 Record压缩率低,一般建议使用BLOCK压缩。 SequenceFile最重要的优点就是Hadoop原生支持较好,有API,但除此之外平平无奇,实际生产中不会使用。

AVRO:

Avro是一种用于支持数据密集型的二进制文件格式。它的文件格式更为紧凑,若要读取大量数据时,Avro能够提供更好的序列化和反序列化性能。并且Avro数据文件天生是带Schema定义的,所以它不需要开发者在API 级别实现自己的Writable对象。Avro提供的机制使动态语言可以方便地处理Avro数据。最近多个Hadoop 子项目都支持Avro 数据格式,如Pig 、Hive、Flume、Sqoop和Hcatalog。

建议:

查看元数据 textfile

追求压缩 极致的速度 rc或者orc

 

 

 

 

 

五:Hive操作客户端

常用的2个: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 不会生成 MapRedcue 任务)

Hive的metastore

metastore是hive元数据的集中存放地。

metastore默认使用内嵌的derby数据库作为存储引擎

Derby引擎的缺点:一次只能打开一个会话

使用MySQL作为外置存储引擎,多用户同时访问

元数据库详解见:查看mysql SDS表和TBLS表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值