什么是hive?

第一章 hive是什么

一 数据仓库工具Hive
背景

hadoop生态系统就是为处理大数据集而产生的一个合乎成本效益的解决方案。hadoop的MapReduce可以将计算任务分割成多个处理单元然后分散到家用的或服务器级别的硬件上,降低成本并提供水平伸缩性。
问题 : 用户如何从一个现有的数据基础架构转移到hadoop上,而这个基础架构是基于传统关系型数据库和SQL的?

介绍

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。Hive官方网址

特点

hive提供了HiveQL方言来查询存储在hadoop集群中的数据。hive可以将大多数的查询转换为MapReduce作业。 eg : select * from tb_user

hive最适合于数据仓库,使用数据仓库进行相关静态数据分析,而不需要快速响应出结果,而且数据本身不会频繁变化。
hive不是一个完整的数据库。其中最大的限制就是hive不支持记录级别的更新、插入或者删除操作。 但是可以将查询生成新表或者将查询结果导入到文件中。
hive查询延时比较严重。
hive不支持事务。
HiveQL并不符合ANSI SQL标准,和Oracle、MySQL、SQL Server支持的常规SQL方言在很多方面存在差异,不过HiveQL和MySQL提供的SQL方言最接近。
Apache Hive™数据仓库软件有助于读取,编写和管理驻留在分布式存储中的大型数据集,并使用SQL语法进行查询。
Hive构建于Apache Hadoop™之上,提供以下功能:

通过SQL轻松访问数据的工具,从而实现数据仓库任务,如提取/转换/加载(ETL),报告和数据分析。
一种在各种数据格式上强加结构的机制
访问直接存储在Apache HDFS™或其他数据存储系统(如Apache HBase™)中的文件 hdfs dfs -ls /
通过Apache Tez™,Apache Spark™或MapReduce执行查询
使用HPL-SQL的过程语言
通过Hive LLAP,Apache YARN和Apache Slider进行亚秒级查询检索。
注意:

Hive不适用于联机事务处理(OLTP)工作负载。它最适用于传统的数据仓库任务。
Hive旨在最大限度地提高可伸缩性(通过动态添加到Hadoop集群中的更多计算机扩展),性能,可扩展性,容错性以及与其输入格式的松耦合。
Hive的SQL也可以通过用户定义的函数(UDF),用户定义的聚合(UDAF)和用户定义的表函数(UDTF)使用用户代码进行扩展。
二 hive架构
用户接口主要有三个:CLI,Client 和 WebUI(hwi)。

CLI: 最常用,Cli启动的时候,会同时启动一个Hive副本。
Client : Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。
WebUI是可以通过浏览器访问Hive的图形化界面。
在Hadoop 1.x中Hive的架构图

架构解释

Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tb不会生成MapRedcue任务)
注意
① 编译器将一个Hive SQL转换操作符
② 操作符是Hive的最小的处理单元
③ 每个操作符代表HDFS的一个操作或者一个MapReduce作业
在Hadoop 2.x中Hive的架构图

Hive的架构简图

在这里可以回顾一下Hadoop的相关知识:
1.x job tracker 既管资源调度又管任务分配
2.x 分为ResourceManager(资源分配)和DataManager(任务分配)
牢记Hadoop 1.x与2.x架构图

三 Hive执行流程

UI调用驱动程序的执行接口(图1中的步骤1)。
驱动程序为查询创建会话句柄,并将查询发送到编译器以生成执行计划(步骤2)。
编译器从Metastore获取必要的元数据(步骤3和4)。此元数据用于检查查询树中的表达式以及基于查询谓词的修剪分区。
由编译器生成的计划(步骤5)是阶段的DAG(有向无环图),其中每个阶段是mapreduce作业或者元数据操作或者对HDFS的操作。对于map/reduce阶段,计划包含map运算符树(在mapper上执行的运算符树)和reduce运算符树(用于需要reducer的操作)。
执行引擎将这些阶段提交给适当的组件(步骤6,6.1,6.2和6.3)。在每个任务(Mapper/Reducer)中,与表或中间输出相关联的反序列化器用于从HDFS文件中读取行,这些行通过关联的运算符树传递。生成输出后,它将通过序列化程序写入临时HDFS文件(如果操作不需要reducer,则会在mapper中发生)。临时文件用于向计划的后续mapreduce阶段提供数据。对于DML操作,最终临时文件将移动到表的位置。此方案用于确保不读取脏数据(文件重命名是HDFS中的原子操作)。
对于查询,执行引擎直接从HDFS读取临时文件的内容,作为来自驱动程序的查询的一部分(步骤7,8和9)。
antlr词法语法分析工具解析hql

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值