Hive、Hive 基本概念

91 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情

第 一 章 Hive 基本概念

1.1 Hive

1.1.1 Hive 的产生背景

在那一年的大数据开源社区,我们有了HDFS来存储海量数据、MapReduce来对海量数据进行分布式并行计算、Yarn来实现资源管理和作业调度。但是面对海量数据和负责的业务逻辑,开发人员要编写MR来对数据进行统计分析难度极大、效率较低,并且对开发者的Java功底也有要求。所以Facebook公司在处理自己的海量数据时开发了hive这个数仓工具。Hive可以帮助开发人员来做完成这些苦活(将SQL语句转化为MapReduce在yarn上跑),如此开发人员就可以更加专注于业务需求了。

1.1.2 hive简介

Hive:由Facebook开源用于解决海量结构化日志的数据统计工具。 Hive是基于Hadoop的一个数据仓库工具,将结构化的数据文件映射为一张表,并提供类SQL(HQL)查询功能。

1.1.3 Hive本质:将HQL(hiveSQL)转化成MapReduce程序

Hive本质:将HQl转换为MapReduce程序 HDFS Person.txt 1001,lisi,23,10,salesman 1002,wangwu,24,20,manager 1003,zhaoli,25,20,manager 1004,tianqi,26,10,salesman …… …/warehouse/person S Q l: 需 求: MR的实现: 统计每个部门的总人数 Select deptId,count(1) from person group by deptId; 1 是如何将结构化数据文件映射为一张表的? Wordcount案例 personId name age deptId work 1001 lisi 23 10 salesman 1002 Langwu 24 20 manager 1003 zhaoli 25 20 manager 1004 Tianqi 26 10 salesman

在这里插入图片描述(1)Hive处理的数据存储在HDFS (2)Hive分析数据底层的实现是MapReduce (3)执行程序运行在Yarn上 (4)结构化文件如何映射成一张表的?借助存储在元数据数据库中的元数据来解析结构化文件

1.2 Hive架构原理

MateStore Client CLI JDBC Driver SQL Parser 解析器 Physical Plan 编译器 Query Optimizer 优化器 Execution 执行器 MapReduce HDFS 在这里插入图片描述

1.2.1 Hive 架构介绍

1)用户接口:ClientCLI(command-line interface)、JDBC/ODBC(jdbc访问hive)、
2)元数据:Metastore元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
3)Hadoop使用HDFS进行存储,使用MapReduce进行计算。
4)驱动器:Driver·解析器(SQL P arser): 将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。编译器(Physical Plan): 将AST编译生成逻辑执行计划。优化器(Query Optimizer): 对逻辑执行计划进行优化。执行器(Execution): 把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。

1.2.2 Hive的运行机制

Hive的运行机制 用户创建table create table … 用户针对数据表 进行数据分析: select …from table where … 用户只需要创建表,将 表与数据建立映射关系, 编写SQL分析语句 Hive中的 元数据库 MetaStore Metastore中记录 着表对应文件的 path Hive中的解析器 将SQL语言解析成对应的 MapReduce程序,并生成 相应的jar包 result MapReduce 体系架构 Hadoop jar xxx.jar /path 数据仓库 数据文件 通过映射 关系向表 中导数据 hdfs 在这里插入图片描述hive通过给用户提供的一系列交互接口,接收到的用户的指令(SQl),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口中。

1.3 Hive和 数据库比较

Hivemysql
语言类sqlsql
数据规模大数据pb及以上数据量小一般百万左右到达单表极限
数据插入能增加insert,不能update,delete能insert,update,delete
数据存储Hdfs拥有自己的存储空间
计算引擎Mapreduce/spark/tez自己的引擎innodb

综上所述,Hive压根就不是数据库,hive除了语言类似意外,存储和计算都是使用Hadoop来完成的。而Mysql则是使用自己的,拥有自己的体系。

1.4 Hive的优缺点

优点缺点
1. 提供了类SQl语法操作接口,具备快速开发的能力(简单、易上手)1. Hive的HQL表达能力有限 1)Hive自动生成MapReduce作业,通常情况下不够智能化
2. 避免了去写MapReduce,减少开发者的学习成本2)数据挖掘方面不擅长(多个子查询),由于MapReduce数据处理流程的限制,效率更高的算法却无法实现
3. Hive优势在于处理大数据,在处理小数据时没有优势,因为Hive的执行延迟较高。2. Hive的效率比较低 1)Hive的执行延迟比较高,因为Hive常用于数据分析,对实时性要求不高的场合2)Hive调优比较困难,粒度较粗
4. Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数3. Hive不支持实时查询和行级别更新 hive分析的数据是存储在HDFS上的,而HDFS仅支持追加写,所以在hive中不能update和delete,只能select和insert。