一个数据分析人的苦恼

上次,小K 介绍了 MapReduce 框架,大大简化了大数据编程的难度,即使是没有学过分布式技术的开发人员,也能用 MapReduce 开发出大数据分布式计算程序。

于是小K 满怀自信的把这个框架介绍给了公司的数据分析师大虾,然后还顺便给大虾介绍了 MapReduce 编程的五个步骤。

小K 讲的津津有味,唾沫横飞,大虾则听的一头雾水。

大虾忍不住了,很不耐烦的说:“我是个数据分析师,我只关注数据,可对你那套 JAVA 开发环境不感冒,难不成我要统计一个 uv,还得搭建一个 IDEA 环境,现场学个 Java 吗?”

小K 愣在那,沉默了。

大虾补充道:“其实数据分析人员用的最多的就是 SQL 了,有没有大数据工具,可以像 MYSQL 那样,直接执行一个 SQL 就能跑出结果?”

小K 眼里放光,“这就是我等会想分享的神器 Hive ,只用写 SQL,就可以直接跑在大数据平台!

但是呢,Hive 本质上,还是把 SQL 变成 MapReduce 程序,然后提交的,所以在介绍 Hive 之前,还想介绍下 MapReduce 是怎么跑一些简单 SQL 任务的”。

MapReduce 如何实现 SQL

在不远处座位上低头开发的小智,之前开发了不少 MapReduce 程序,比较精通 MapReduce 编程,听到小K 在喊他,立马跑了过去。小K:“小智,你比较精通 MapReduce 程序,不如你来给大虾介绍下 MapReduce 是如何实现一个 group by 的吧?”小智于是飞快的搬来了一块黑板,在上面写了一个 SQL 。
SELECT pageid, age, count(1) 
FROM pv_users GROUP BY pageid, age;
“大虾,这是一条非常常见的 SQL,统计不同年龄段的用户访问不同网页的兴趣偏好,对于产品运营和设计很有价值。”小智接着补充道:大数据快速入门(07):数据仓库神器 Hive_大数据“这个问题大体思路就是,把左边的表相同的行进行求和,就可以得到右边的表了。我们都知道 MapReduce 有两个函数,Map 函数 和 Reduce 函数。首先,看下 map 函数的输入 key 和 value,主要看 value,因为 key 默认是行号。value 就是左边表的每一行数据,比如 <1,28> 。map 函数的输出就是以输入的 value 作为 key,value 统一设置成 1,比如 <<1,28>,1> 这样。map 函数的输出经过 shuffle 以后,相同的 key 及其对应的 value 被放在一起组成一个 <key,value 集合>,作为输入交给 reduce 处理。比如<2,28> 被 map 函数处理了两次,到了 reduce 就是 <<2,28>,<1,1>> 这种,这里 key 是 <2,28> ,值是一个集合 <1,1>。在 reduce 函数内部,value 的值会被累加,这里就是 2 。那么这个 SQL 就被 MapReduce 处理了。”大虾之前是有一点编程基础的,听到这个思路后,他脸上泛起了一丝笑意和惊讶,“好神奇,MapReduce 只用两个函数就能处理这些问题了啊!”。小智意味深长的说:“其实呢,MapReduce 在大数据产生之前就有了,而 hadoop 只是创造性的把 MapReduce 编程思想应用在大数据上,是一个很伟大的创举!”大虾,眼里泛着光。

Hive 架构

小K 接着说,“Hive 呢,就是直接可以把 SQL 变成 MapReduce 程序,跑在大数据集群上”。小智接着说:“快给我们介绍介绍”小K 喝了一口水,接着说道:“为了让大家更高效的使用 MapReduce 和 Spark 等计算引擎,开源社区在计算引擎基础上构建了更高级的 SQL 引擎,其中典型代表就是 Hive 和 SparkSQL。大数据快速入门(07):数据仓库神器 Hive_计算引擎_02目前构建在 hadoop 之上的 SQL 引擎主要分为两类,基于计算引擎和基于 MPP 架构。

基于计算引擎

这些 SQL 引擎是在计算引擎基础上构建的,其基本原理是将 SQL 语句翻译成分布式应用程序,之后运行在集群中。典型的代表有构建在 MapReduce 之上的 Hive 和 构建在 Spark 之上的 SparkSQL。这类 SQL 引擎的特点是具有良好的扩展性和容错性,能够应对海量数据。

基于 MPP 架构

这些 SQL 引擎是基于 MPP 架构构建的,其基本原理是将 SQL 翻译成可分布式执行的程序,采用 Volcano 风格的计算引擎并行处理这些任务,任务之间的数据流动和交换由专门的 Exchange 运算符完成。典型的代表有 Presto 和 Impala 等。这些引擎具有良好的扩展性,但是容错性查。

那么下面重点介绍一下 Hive 引擎

大数据快速入门(07):数据仓库神器 Hive_计算引擎_03如图,Hive 对外提供了三种访问方式,包括 Web UI,CLI 和 Thrift 协议(支持 JDBC/ODBC),而在 Hive 后端,主要由三个服务组成,主要有 Driver,Metastore 和 Hadoop 。其中 Driver 实现了 SQL 解析,生成逻辑计划、物理计划、查询优化与执行等,它的输入是 SQL 语句,输出为一系列分布式执行程序。Metastore。Hive Metastore 负责管理和存储元信息的服务,它保存了数据库的基本信息以及数据表的定义等,为了能够可靠的保存这些信息,Hive Metastore一般将它们持久化到关系型数据库中。Hadoop。Hive依赖于Hadoop,包括分布式文件系统HDFS、分布式资源管理系统YARN以及分布式计算引擎MapReduce, Hive中的数据表对应的数据存放在HDFS上,计算资源由YARN分配,而计算任务则来自MapReduce引擎。

总结

听完了 Hive 的架构,小智若有所思,他说道:“其实 Hive 的架构并没有什么创新嘛,SQL 解析优化相关的技术,以及数据库相关的技术和架构都非常成熟了。但是 把 Hive 和 MapReduce 这两种技术嫁接到一起,却是非常创新的,成就了 Hadoop 大数据仓库 Hive,也大大普及了大数据技术。”

小K 很满意,“是啊,现在很多公司的数据仓库都是基于 Hive 构建的,那么下次我们探讨 HQL 的基础知识,接 着 就可以投入到数据仓库的开发中了!”。