Hive从入门到放弃——Hive背景和基础架构介绍(一)

Hive背景

  Hadoop家族虽然MapReduce提供了抽象类或者 编程接口框架,使得开发人员能够按照模板式的开发代码就能完成大数据的离线计算,但是对于技能点只加到了sql语句的分析师,数据开发工程师了来说,需要Java或者Python编码就显得不那么友好了,于是Hive就来了,Hive是由FaceBook开发并贡献给Hadoop社区的,目前也深受国内各大BAT的喜爱,也说是很有前景的,图1是2017年各大开源SQL引擎排名热度情况,这几年impala和spark-sql地位有所提高,三者应用场景其实略有不同的,但是也说明Hive的流行度。
Hive从入门到放弃——Hive背景和基础架构介绍(一)

图1 2017年各大开源sql引擎热度排名参考
  特别提醒,在吹嘘Hive在BAT的受欢迎来提高Hive的地位的同时,有一点是需要注意的,本人有幸看到了几页Hive在BAT的metadata 库E-R图,Hive在BAT其实是经过了很大改良的,基本上是彻底改头换面,连常用 的元数据表名字都改了,加了各种权限控制等等,举个不恰当的比喻吧,拿CPU来说,我们去官网下载的Hive版本,其实就类似是最早的8086版本的8核基础源版,但是在BAT已经是inter i7处理了,虽然都是HIve,但是别人已经玩的和我们见到的不是一个量级了,但是有兴趣去专研源码,你也可以的,加油!

Hive概念

  Hive的神秘面纱下,究竟是什么呢?官网给的定义是:
  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.
  大概意思就是,Hive是一个能用SQL便捷管理分布式存储大量数据集数据仓库,也可以直接解析存储的数据,并且提供了一个命令行工具和JDBC驱动程序来供用户连接使用。
  其实我个人更喜欢说Hive是个解析器,一个自带优化和执行的解析器,就是将hdfs上序列化的数据的sql逻辑解析成mapreduce,因为Hive自动会去解析,选择相对较优的方式转成mapreduce去执行,使得用户只要考虑sql的逻辑就能简单操控hdfs数据的一个工具(其实单纯懂hive-sql是不够的,还必须知道mapreduce原理,我在后面hive-sql调优案例中会详述)。

Hive基本架构

  Hive的基础架构如图2所示,Hive-SQL提供交互式接口,实际数据存储在hdfs,真正执行计算的组件 也是mapreduce,具体基础架构如图2:

Hive从入门到放弃——Hive背景和基础架构介绍(一)

图2 Hive的 基础架构

  主要包含的组件有UI组件(Hue)最火,Driver,Metadata(元数据库)库,CLI(Command Line Interface 命令行接口),JDBC/ODBC接口,Thrift Server和HWI(Hive Web Interface)接口等。

  • Driver组件:Hive的核心,Hive被称为解析器的根本所在,包含编译器(Complier),优化器(Optimizer)和执行器(Executor),主要负责对Hive SQL语句进行解析,编译优化,生成相应的执行计划,然后交给底层的mapreduce框架完成计算输出结果。
  • CLI:命令行接口,在Hive所在的节点上,直接输入Hive的shell命令调出该接口,在Hive-shell内直接输入 SQL与Hive交互。
  • Thrift Server和JDBC/ODBC:开发者和正常人类使用的福音 ,因为 Thrift Server提供了JDBC和ODBC连接,原则只要满足JDBC和ODBC的接口规范的各类语言和IDE界面有驱动,都可以对Hive进行为所欲为的扩展开发,而不是面对反人类设计的CLI黑框开发。
  • HWI(Hive Web Interface) 提供了一种通过网页http协议访问和管理Hive的 服务接口。
  • metadata(元数据库):元数据存储Hive的元数据,即描述数据的数据,就是Hive有哪些表,表内有什么字段,在什么DB,对应什么文件等等,默认的元数据库是Derby库,只能允许一个会话连接,即单用户模式,基本不实用,为了支持多用户,基本需要将元数据库改配成MySQL或者Oracle,SQL Server不适用,MySQL不要钱的开源思路很配Hadoop的开源,MySQL居多。