Hive那些事儿 - Blog1

今天也要加油鸭!

前言

Hive是基于Hadoop的数据仓库构架,最大的特点是提供了类SQL的语法,封装了底层MapReduce过程。它可以将结构化的数据文件映射为数据库表,并提供SQL查询功能(类查询语言,HQL),并将SQL语句转换为MapReduce任务运行;可以进行数据提取转化加载(ETL),这是一种存储、查询和分析在Hadoop中的大规模数据的机制。

  • 那么:Hive的本质就是大数据离线分析工具,用SQL+MapReduce即可实现啦~

Hive与关系数据库的区别

  1. 数据存储不同:hive基于hadoop的HDFS,关系数据库则基于本地文件系统
  2. 计算模型不同:hive基于hadoop的mapreduce,关系数据库则基于索引的内存计算模型
  3. 应用场景不同:hive是OLAP数据仓库系统提供海量数据查询的,实时性很差;关系数据库是OLTP事务系统,为实时查询业务服务
  4. 扩展性不同:hive基于hadoop很容易通过分布式增加存储能力和计算能力,关系数据库水平扩展很难,要不断增加单机的性能

体系结构

在这里插入图片描述
主要分为以下几个部分:

  • 用户接口,包括 命令行CLI,Client,Web界面WUI,JDBC/ODBC接口等
  • 中间件:包括thrift接口和JDBC/ODBC的服务端,用于整合Hive和其他程序。
  • 元数据metadata存储,通常是存储在关系数据库如 mysql, derby 中的系统参数
  • 底层驱动:包括HiveQL解释器、编译器、优化器、执行器(引擎)。
  • Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算。
  1. 用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是 CLI,Cli 启动的时候,会同时启动一个 Hive 副本。Client 是 Hive 的客户端,用户连接至 Hive Server。在启动 Client 模式的时候,需要指出 Hive Server 所在节点,并且在该节点启动 Hive Server。 WUI 是通过浏览器访问 Hive。
  2. Hive 将元数据存储在数据库中,如 mysql、derby。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
  3. 解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
  4. Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from tbl 不会生成 MapRedcue 任务)。

适用场景

  • 大数据集的离线批处理作业,比如网络日志分析
    由于Hive构建在静态(也就是离线)批处理的Hadoop之上,Hadoop通常有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,Hive并不能够在大规模数据集上实现低延迟快速查询,故不适用需要低延迟的应用,Hive并不提供实时查询和基于航迹的数据更新操作。

执行流程流程

1、通过客户端提交一条hql语句
2、通过complier(编译组件)对hql进行词法分析、语法分析。编译器需知道执行哪张表
3、去元数据库找表信息
4、得到信息
5、complier编译器提交hql语句分析方案
6、执行流程
  a.executor 执行器收到方案后,执行方案(DDL过程)。注意,执行器在执行方案时,会进行判断:如果当前方案不涉及到MR组件,比如为表添加分区信息、比如字符串操作等,比如简单的查询操作等,此时就会直接和元数据库交互,然后去HDFS上去找具体数据;如果方案需要转换成MR job,则会将job 提交给Hadoop的JobTracker
  b.MR job完成,并且将运行结果写入到HDFS上
  c.执行器和HDFS交互,获取结果文件信息
7.如果客户端提交Hql语句是带有查询结果性的,则会发生:7-8-9步,完成结果的查询

数据存储

首先,Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据

其次,Hive 中所有的数据都存储在 HDFS 中,Hive 中包含以下数据模型:Table,External Table,Partition,Bucket。

1)表table:一个表就是hdfs中的一个目录
2)区Partition:表内的一个区就是表的目录下的一个子目录
3)桶Bucket:如果有分区,那么桶就是区下的一个单位,如果表内没有区,那么桶直接就是表下的单位,桶一般是文件的形式。

基本概念

1、数据单元

按照数据的粒度大小,hive数据可以被组织成:
1)databases: 避免不同表产生命名冲突的一种命名空间
2)tables:具有相同scema的同质数据的集合
3)partitions:一个表可以有一个或多个决定数据如何存储的partition key
4)buckets(或clusters):在同一个partition中的数据可以根据某个列的hash值分为多个bucket。partition和bucket并非必要,但是它们能大大加快数据的查询速度。

2、数据类型

(1)简单类型

  TINYINT - 1 byte integer
  SMALLINT - 2 byte integer
  INT - 4 byte integer
  BIGINT - 8 byte 
  BOOLEAN - TRUE/ FALSE
  FLOAT - 单精度
  DOUBLE - 双精度
  STRING - 字符串集合

(2)复杂类型

   Structs: structs内部的数据可以通过DOT(.)来存取,例如,表中一列c的类型为STRUCT{a INT; b INT},我们可以通过c.a来访问域a。
   Maps(Key-Value对):访问指定域可以通过['element name']进行,例如,一个Map M包含了一个group->gid的k-v对,gid的值可以通过M['group']来获取。
   Arrays:array中的数据为相同类型,例如,假如array A中元素['a','b','c'],则A[1]的值为'b'。

3、内建运算符和函数

  包括关系运算符(A=B, A!=B, A<B等)
  算术运算符(A+B, A*B, A&B, A|B等)
  逻辑运算符(A&&B, A|B等)
  复杂类型上的运算符(A[n], M[key], S.x)
  各种内建函数:round,floor,substr

4、语言能力

hive查询语言提供基本的类sql操作,这些操作基于table和partition,包括:
1. 使用where语句过滤制定行
2. 使用select查找指定列
3. join两张table
4. group by
5. 一个表的查询结果存入另一张表
6. 将一个表的内容存入本地目录
7. 将查询结果存储到hdfs上
8. 管理table和partition(creat、drop、alert)
9. 在查询中嵌入map-reduce程序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值