Hive

为什么会出现Hive(Why?)

  话是这么说的: “懒人推动科技的发展”. Hive的出现都是因为人懒了, 回顾MapReduce开发应用程序时, 需要写大量的代码. 然后就有人不想写这复杂的代码, Hive就被开发出来了. 通过编写SQL语句让Hive自动解析SQL, 然后经过一系列操作之后转换成MapReduce应用, 从而实现需求. 也就是说, Hive的出现目的就是把复杂的MapReduce代码转化为简单的SQL语句.

  其实Hive本身并没有多少东西, Hive只是一个工具, 一个用来构建数据仓库的工具. Hive底层还是基于HDFS和MapReduce来实现功能的.

什么是Hive(What?)

  Hive官网: http://hive.apache.org/index.html

官网的定义:
The Apache Hive data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.
翻译过来大意是:
Apache Hive数据仓库通过使用SQL来读取,编写和管理存放在分布式存储中的大型数据集。 可以将结构映射到已存储的数据中。 并提供命令行工具和JDBC驱动程序来让用户连接到Hive。

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

  Hive中有解释器, 编译器, 优化器, 选择器等, 正是这些部件的存在使得Hive能够解析,优化SQL以及选择策略, 从而满足数据处理的需求.

Hive数据处理流程(How)

  谈到数据仓库, 其中不乏表的概念, 例如MySQL, Oracle. 我们知道表中的源数据实际还是存储在磁盘中, 但如果我们想查看表中的内容, 只有源数据还不行, 还需要一份元数据(描述数据的数据).

  之前也提到过, Hive是基于Hadoop的:
  在存储上, Hive需要基于HDFS; 除此之外, 还需要传统数据库(如Derby, MySQl)的支持. 在Hive中, 源数据存储在HDFS上, 而元数据存在关系型数据库中, 默认是Derby, 但常用的是MySQL. 这些元数据中会存储行和字段的分隔符, 字段类型以及字段名称等信息.

  在计算处理上, Hive需要基于MapReduce. 谈到表, 我们就会想到写SQL语句进行查询等操作, Hive也是支持SQL语句来对其中的表进行增删改查. 但Hive在处理SQL语句时, 会先将SQL语句翻译成MR应用, 然后再来处理数据.

  Hive数据处理流程图:
Hive数据处理流程图

Hive架构

Hive架构图

  Hive的用户接口主要有三个: CLI, Client 和 WebUI. 其中最常用的是CLI, CLI启动的时候, 会同时启动一个Hive副本; Client是Hive的客户端, 用户通过连接Hive Server (Thrift Server)连接至Hive, 在启动Client模式时, 需要指出Hive Server所在节点,并且在该节点启动Hive Server; WUI是通过浏览器访问Hive.

  Hive将元数据存储在数据库中, 如mysql、derby. Hive中的元数据包括表的名字, 表的列和分区及其属性, 表的属性(是否为外部表等), 表的数据所在目录等.

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

  Hive的数据存储在HDFS中, 大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。

Hive解析SQL的过程

  在Hive中写的SQL语句, 也称HQL语句.
在这里插入图片描述

posted on 2018-12-19 19:54  七宝嘤嘤怪  阅读(405)  评论(0编辑  收藏  举报