乐趣区

关于hive:大数据必知必会-Hive架构设计和原理

Hive

    咱们在上一节讲到,MapReduce 尽管只有 map 和 reduce 这两个函数,但简直能够满足任何大数据分析和机器学习的场景。不过,简单的计算可能须要应用多个 job 能力实现,这些 job 之间还须要依据其先后依赖关系进行作业的编排,开发比较复杂。在 Hadoop 呈现之前,大部分的数据分析人员根本都用 SQL 语句剖析数据库中的数据,如果让这些数据分析人员重新学习一下 Hadoop 反对的开发语言,将会消耗微小的人力老本和学习老本。所以,就有聪慧的小伙伴想到,如果能依据 SQL 主动生成 MapReduce,就能够极大升高大数据技术在数据分析畛域的利用门槛。基于这样的一个需要场景,Hive 横空出世。

Hive 的架构

    首先让咱们来看下 Hive 的架构。

Hive 能够通过 CLI,JDBC 和 ODBC 等客户端进行拜访。除此之外,Hive 还反对 WUI 拜访
Hive 外部执行流程:解析器(解析 SQL 语句)、编译器(把 SQL 语句编译成 MapReduce 程序)、优化器(优化 MapReduce 程序)、执行器(将 MapReduce 程序运行的后果提交到 HDFS)
Hive 的元数据保留在数据库中,如保留在 MySQL,SQLServer,PostgreSQL,Oracle 及 Derby 等数据库中。Hive 中的元数据信息蕴含表名,列名,分区及其属性,表的属性(包含是否为内部表),表数据所在目录等。
Hive 将大部分 HiveSQL 语句转化为 MapReduce 作业提交到 Hadoop 上执行;多数 HiveSQL 语句不会转化为 MapReduce 作业,间接从 DataNode 上获取数据后依照程序输入。

    通晓了 [大数据培训](http://www.atguigu.com) 中 Hive 架构,咱们接下来通过一条常见的 SQL 语句,来看看 Hive 是如何将其转换成 MapReduce 来计算的。

MapReduce 实现 SQL 的原理
SELECT pageid, age, count(1) FROM pv_users GROUP BY pageid, age;
1.

    就像所展现的一样,这是一条很常见的 SQL 统计分析语句,用于统计不同年龄的用户拜访不同网页的趣味偏好,具体数据输出和执行的后果示例如图所示:看这个示例咱们就会发现,这个计算场景和 WordCount 很像。事实上也的确如此,咱们能够用 MapReduce 实现这条 SQL 的解决。这样一条很有实用价值的 SQL 就被很简略的 MapReduce 计算过程解决好了。map 函数输入的 key 是表的行记录,value 是 1,reduce 函数对雷同的行进行记录,也就是针对具备雷同 key 的 value 汇合进行求和计算,最终失去 SQL 的输入后果。Hive 要做的就是将 SQL 翻译成 MapReduce 程序代码。实际上,Hive 内置了很多 Operator,每个 Operator 实现一个特定的计算过程,Hive 将这些 Operator 结构成一个有向无环图 DAG,而后依据这些 Operator 之间是否存在 shuffle 将其封装到 map 或者 reduce 函数中,之后就能够提交给 MapReduce 执行了。Operator 组成的 DAG 如下图 所示,这是一个蕴含 where 查问条件的 SQL,where 查问条件对应一个 FilterOperator。值得注意的是,有些 HiveQL 语句不会被 Hive 转化成 MapReduce 作业,Hive 只会从 DataNode 将数据获取到了之后,依照程序顺次输入。

select * from user;
1.
Hive 如何实现 join 操作

    除了下面这些简略的聚合(group by)、过滤(where)操作,Hive 还能执行连贯(join on)操作。比方当初来了一个需要。有 2 张表,一张 是 page_view 页面浏览记录表,一张是 user 用户表

    如果我想收集到每个页面浏览用户的 age 信息,该如何获取。很显著,这两张表都有一个雷同的字段 userid,依据这个字段能够将两张表连接起来,生成咱们最终想要的后果表 pv_users,SQL 命令是

SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.userid = u.userid);
1.

    同样,这个 SQL 命令也能够转化为 MapReduce 计算,连贯的过程如下图所示。从图上看,join 的 MapReduce 计算过程和后面的 group by 稍有不同,因为 join 波及两张表,来自两个文件(夹),所以须要在 map 输入的时候进行标记,比方来自第一张表的输入 Value 就记录为 <1, X>,这里的 1 示意数据来自第一张表。这样通过 shuffle 当前,雷同的 Key 被输出到同一个 reduce 函数,就能够依据表的标记对 Value 数据求笛卡尔积,用第一张表的每条记录和第二张表的每条记录连贯,输入就是 join 的后果。所以咱们如果关上 Hive 的源代码,看 join 相干的代码,会看到一个两层 for 循环,对来自两张表的记录进行连贯操作。

Hive 命令阐明

    在 Hive 提供的所有连贯形式中,命令行界面是最常见的一种。用户能够应用 Hive 的命令行对 Hive 中的数据库,数据表和数据进行各种的操作。

Hive 函数应用

    Hive 外部反对大量的函数,能够通过 ​​SHOW FUNCTIONS​​ 查看 Hive 的内置函数。灵便地使用 Hive 提供的函数可能极大地节俭数据分析老本。Hive 函数次要蕴含数学函数,汇合函数,类型转换函数,日期函数,条件函数,字符串函数,聚合函数 和 表生成函数等。因为内容过多,篇幅无限,我就展现局部内容。

微信关注 大数据梦想家 公众号

Hive 调优

    调优向来都十分重要,无论是面试温习,还是理论工作,都少不了和它打交道。例如,从建表设计层面,咱们能够思考到利用分区表 / 分桶表优化,抉择抉择适合的压缩格局。从 HQL 语法和运行参数层面,咱们能够采纳 查看 Hive 执行打算,列剪裁,谓词下推,分区剪裁,合并小文件 等形式 …

    从 Hive 架构层面,咱们能够采纳 启用本地抓取,本地执行优化,JVM 重用,并行执行 等形式 …

    因为这部分内容如果开展来写的确十分多,不利于浏览,正好我本人收集了一本《Hive 性能调优实战》,外面的内容十分干货,从环境搭建,到深刻 MapReduce 引擎剖析 … 最初一章,还介绍了 Hive 常识体系

  

    最初,附赠一张马中华老师亲绘的 Hive 的 SQL 编译源码详解。

伟人的肩膀
「1」《从零开始学大数据》
「2」《大数据平台架构与实现》
「3」《架构师的自我修炼》

    在实践中,工程师其实并不需要常常编写 MapReduce 程序,因为网站最次要的大数据处理就是 SQL 剖析,也因而 Hive 在大数据利用中的作用十分重要。前面随着 Hive 的遍及,咱们对于在 Hadoop 上执行 SQL 的需要越加强烈,对大数据 SQL 的利用场景也多样化起来,于是又开发了各种大数据 SQL 引擎。例如 Cloudera 也开发了 Impala,这是一种运行在 HDFS 上的 MPP 架构的 SQL 引擎。和 MapReduce 启动 Map 和 Reduce 两种执行过程,将计算过程分成两个阶段进行计算不同,Impala 在所有 DataNode 服务器上部署雷同的 Impalad 过程,多个 Impalad 过程相互协作,共同完成 SQL 计算。在一些统计场景中,Impala 能够做到毫秒级的计算速度。还有前面我会为大家介绍的 SparkSQL,此外,大家还心愿在 NoSQL 的数据库上执行 SQL,毕竟 SQL 倒退了几十年,积攒了宏大的用户群体,很多人习惯了用 SQL 解决问题。于是 Saleforce 推出了 Phoenix,一个执行在 HBase 上的 SQL 引擎 …

    Hive 自身的技术架构其实并没有什么翻新,数据库相干的技术和架构曾经十分成熟,只有将这些技术架构利用到 MapReduce 上就失去了 Hadoop 大数据仓库 Hive。然而想到将两种技术嫁接到一起,却是极具创新性的,通过嫁接产生出的 Hive 能够极大升高大数据的利用门槛,也使 Hadoop 大数据技术失去大规模遍及。
退出移动版