Hive初识功能架构

hadoop,spark,kafka交流群:224209501

kafka源码,hbase源码,spark源码请关注浪尖公众号

本节讲述的主要内容为:

1) Hive 能做什么,与MapReduce相比优势在哪里(对于开发者)
2) 为什么说Hive是Hadoop 数据仓库,从【数据存储和分析】方面理解
3) Hive 架构,分为三个部分来理解,最好通过画图理解

1,hive PK mapreduce。

1.1 mapreduce的缺点

(1).MapReduce 格式比较固定。
【八股文】格式编程,三大部分组成
(2).No Schema(数据库中的Schema,为数据库对象的集合,一个用户一般对应一个schema。),缺少查询语言,比如SQL。

  • 数据分析,针对DBA、SQL语句,如何进行数据分析。
  • MapReduce编程成本高。
  • 因此facebook,实现并开源了hive。

1.2 hive的优点

(1).操作接口采用类SQL语法,提供快速开发能力(简单、容易上手);
(2).避免去写mapreduce,减少开发人员的学习成本;
(3).统一的元数据管理,可与implela/spark等共享元数据;
(4).易扩展(HDFS+MapReduce:可以扩展集群规模;支持自定义函数);
(5).数据的离线处理;比如:日志分析,海量结构数据离线分析。
(6).hive执行延迟比较高,因此hive常用于数据分析的,对实时性要求不高的场合;
(7).hive优势在于处理大数据,对于处理小数据没有 优势,因为hive的执行延迟比较高。

2,hive是hadoop的数据仓库

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop中的大规模数据的机制。
(1).hive由FaceBook开源用于解决海量结构化日志的数据统计。
(2).hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并提供类SQL查询功能。
(3).hive是构建在hadoop之上的数据仓库:

  • 使用HQL语句作为查询接口
  • 使用HDFS进行存储
  • 使用mapreduce进行计算。
    (4).hive本质是:将HQL转化成MapReduce程序。
    (5).灵活和扩展性比较好:支持UDF,自定义存储格式。
    (6).适合离线处理。
    (7).查询和管理在分布式存储的大的数据集(数据库:增删改查,hive不支持增删该)。管理主要是对表的管理。

3,hive架构理解

hive在hadoop生态系统中的位置:
Hive初识功能架构_第1张图片
hive框架图:
Hive初识功能架构_第2张图片
hive执行流程:
Hive初识功能架构_第3张图片

3.1 用户接口:client

CLI(hive shell)、JDBC/ODBC(java访问hive),WEBUI(浏览器访问hive)

3,2 元数据:metastore

元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
默认存储在自带的derby数据库中,推荐采用mysql存储metastore;

3,3 hadoop

使用HDFS进行存储,使用mapreduce进行计算

3.4 驱动器:driver

驱动器包含:解析器、编译器、优化器、执行器。
(1).解析器:
强SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误(比如select中被判定为聚合的字段在group by中是否出现).

(2).编译器
将AST编译生成逻辑执行计划。

(3).优化器
对逻辑执行计划进行优化。

(4).执行器。
把逻辑执行计划转换成可以运行的物理计划。对于hive来说,就是MR/TEZ/Spark。

3.5,hive与关系型数据库的区别。

(1).hive和关系数据库存储文件的系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统;
(2).hive使用的计算模型是mapreduce,而关系数据库则是自己设计的计算模型;
(3).关系数据库都是为实时查询的业务进行设计的,而hive则是为海量数据做数据挖掘设计的,实时性很差;实时性的区别导致hive的应用场景和关系数据库有很大的不同;
(4).Hive很容易扩展自己的存储能力和计算能力,这个是继承hadoop的,而关系数据库在这个方面要比数据库差很多。

你可能感兴趣的:(hadoop)