数据仓库工具之hive介绍

Hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。本质是将SQL转换为MapReduce程序。

hive的主要用途:用来做离线数据分析,比直接用MapReduce程序开发效率更高。

直接使用MapReduce所面临的问题:

人员学习成本太高:使用mr直接分析数据的前提是需要开发复杂的mapreduce程序,这对于数据仓库的受众群体来说,学习成本太高,因为其受众群体大部分是数据分析人员,而非专业的开发人员。

项目周期要求太短:正如上面所说,作为数据仓库角色出现的mapreduce面临的应用场景通常是即时性的数据分析,当然这里所说的即时并不是指既席查询这种立刻出结果的场景。对于这么短的项目周期,我们开发mapreduce程序的时间却需要一大半,这对于实际的应用来说是不可容忍的。

实现复杂逻辑难度较大:使用mapreduce计算的前提是实现相应模式的计算模型开发,无论什么样的场景,我们都需要将问题分解为map reduce模式然后实现编码,在反复的测试后才能完成,这是很困难的一件事情,尤其是面对复杂逻辑的时候。

为什么使用hive: 

Hive 依赖于 HDFS 存储数据,Hive 将 HQL 转换成 MapReduce 执行,所以说 Hive 是基于 Hadoop 的一个数据仓库工具,实质就是一款基于 HDFS 的 MapReduce 计算框架,对存储在 HDFS 中的数据进行分析和管理

hive其实就是hadoop上的一个工具,它提供了将sql转化为mapreduce程序进而在hadoop集群上分析hdfs存储数据的功能。

看到这里想必大家已经明白为什么使用hive 了,mapreduce写起来太麻烦了,关键是还不会写,现在hive帮你搞定这一切,你只需要写sql就行了。所以在hadoop之上暴露给数据分析人员一个hive,这样你只需要关心你的sql,至于下面的集群你完全不需要在乎。

操作接口采用类 SQL 语法,提供快速开发的能力。

避免了去写 MapReduce,减少开发人员的学习成本。

功能扩展很方便:在hive可支持的sql范围上不能满足你的需求时,我们可以通过编写UDF来轻松的扩展功能,并且支持python语言,这就又进一步的扩展和简化了hive的使用。

	为什么hive可以如此轻松的编写UDF来扩展功能,底层执行是在hadoop集群上,简单的说反正底层都是灵活的代码实现,再扔上去一个代码也是很简单的事情

hive的架构图

数据仓库工具之hive介绍

Hive基本组成

用户接口:包括 CLI、JDBC/ODBC、WebGUI,这是暴露给用户的层面,我们只需要在这个层面之上实现自己的sql逻辑即可。

用户接口主要由三个:CLI、JDBC/ODBC 和 WebGUI。其中,CLI(command lineinterface)为 shell 命令行;JDBC/ODBC 是 Hive 的 JAVA 实现,与传统数据库 JDBC 类似;WebGUI 是通过浏览器访问 Hive。

元数据存储:通常是存储在关系数据库如 mysql , derby 中。元数据就是一些表结构的信息,以及表和数据的映射关系等。

Thrift服务:用来进行可扩展且跨语言的服务的开发, Hive 集成了该服务,能让不同的编程语言调用 Hive 的接口。举个例子你想用python语言来连接hive,这就是他的使用场景。

hive Driver(这是hive的核心引擎)

解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)

编译器:编译器是将语法树编译为逻辑执行计划

优化器:优化器是对逻辑执行计划进行优化

执行器:执行器是调用底层的运行框架执行逻辑执行计划

解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有MapReduce 调用执行。

Hive 与 Hadoop 的关系

同样我们看上边那张图,Hive 利用 HDFS存储数据,利用 MapReduce 查询分析数据 。

Hive与传统数据库对比

hive 用于海量数据的离线数据分析。hive 具有 sql 数据库的外表,但应用场景完全不同,hive 只适合用来做批量数据统计分析。作为企业级的数据仓库更适合不过,hive的适用性和方便性甚至让很多数据分析人员误以为hive是和oracle一样的数据库存在,实际上它只是hadoop之上的一个sql转化工具。

猜你喜欢

转载自blog.csdn.net/qaning1472/article/details/85918517