Hive是一个数据仓库基础工具,在Hadoop中用来处理结构化的数据。它架构在Hadoop之上,hive底层数据存储是hdfs文件,文件中是结构化的数据,hive提供了sql化的方案,将sql语句转化为MapReduce任务运行在hadoop之上,从而降低了大数据开发者对MapReduce的技术门槛。
什么是Hive?
Hive由Facebook开发,后经Apache基金会孵化并开源。Hive是基于Hadoop分布式文件系统HDFS的一个数据仓库工具,用于处理结构化数据,底层数据存储在HDFS上。Hive将结构化的HDFS文件映射为一张数据库表,并提供了Hive SQL语言实现查询功能。Hive的原理是将SQL语句翻译为Hadoop识别的MapReduce任务并提交给Hadoop运行,解决了原始数据开发人员编写复杂晦涩难懂的MapReduce任务所面临的困难。Hive目前主要用于数仓建设中的离线数据存储和批任务的加工分析。
为什么是Hive?
假如没有Hive会怎样?
Hadoop的问世完美地解决了大数据的存储和计算问题,在没有Hive时,数据开发工程师通过开发MapReduce任务来进行离线数据分析计算。但MapReduce通常需要工程师将加工逻辑拆分为map和reduce两个阶段,要实现复杂的逻辑时,开发难度可想而知,并且数据开发人员往往都是从事SQL编写,而MR的开发则增加了开发语言等学习成本,这往往让初期通过MR进行数据分析的开发人员和公司很痛苦。我们猜测应该是Facebook更容易接受SQL的工程师们推动了Hive的问世。
好了,总结一下:
Hive是基于HDFS的离线大数据存储和加工分析的数仓工具,提供了十分友好的交互接口,支持Hive SQL语法(而Hive SQL很大程度上继承了传统SQL语法),一个十分熟悉SQL开发的数据工程师能够在很短的时间内上手Hive开发,极大地降低了学习成本,并且有很好的扩展性,可以方便地扩展集群,用户也可以自定义函数。
Hive有什么特点?
任意一个产品都有它的优缺点,Hive也不例外。
优点
- 良好的扩展性。Hive可以自由地横向扩展集群,且无需重启服务,从而扩大集群规模。也可以通过提高服务器cpu和内存的方式进行纵向扩展,从而降低集群规模。
- 延展性。Hive支持用户自定义函数,这极大地给用户提供了更开放的开发空间。
- 容错性。即使有节点出现问题,SQL语句依然可以完成执行。
缺点
- Hive不支持记录级别的删改操作。低版本的Hive。
- Hive查询延时,不使用于低延时的场景。
- Hive没有事务的概念。
Hive是不是关系型数据库?
Hive不是关系型数据库。
Hive有事务吗?
Hive有事务,不过hive的事务是表级和分区级的事务,Hive数据都是离线数据,不能用于联机的事务处理。
Hive是否可以用于实时系统架构?
Hive的定位是离线海量数据的存储和加工处理的数仓工具,所以不能用户实时系统架构组件来使用,也不能用于行级数据的更新操作。
Hive架构
Hive架构主要由四个模块组成:
接口层:提供了hive用户界面,Web UI,shell交互窗口,对外API等。
CLI(Command Line Interface)是hive的终端命令行接口,通常我们初学和调试生成等场景下最常用的工具。
JDBC/ODBC是Hive基于JDBC操作的客户端,用户通过这个连接到Hive Server。
Web UI是通过浏览器来访问Hive。、
Thrift Server让用户可以通过多种不同的语言来操作Hive。Thrift是Facebook开发的一款软件框架,用来进行可扩展的跨语言的服务开发。查询引擎:hive引擎主要由编译器(Compiler),优化器(Optimizer)和执行器(Executor)组成。编译器负责SQL的解析,语义分析等;优化器负责优化执行任务,执行器负责构建MapReduce任务并提交给Hadoop集群执行。
元数据:hive将结构化的HDFS文件映射为数据库表,其中反映这种映射关系的元数据存储在关系型数据中。元数据存储由第三方提供支持,通常为mysql数据库。Hive通过MetaStore服务和RDBMS进行交互。
Hadoop:hive构建于Hadoop的分布式文件系统HDFS之上,是Hive存储和计算的载体。
Hive的核心查询引擎(Query Engine/Driver)
hive的核心查询引擎分三个模块:
- Complier:编译器。包括HQL的解析,语义分析等。
- Runtime:运行时。包括QueryPlan需要的驱动,算子等。
- Aux Utils:其他辅助工具。包括日志,配置管理等。
Hive的执行流程
接口层接收客户端的提交
——>编译器根据元数据等信息进行编译和语义分析,构建执行计划
——>优化器优化执行方案,构建MR任务并执行
Hive的数据模型(Data Model)
Hive数据模型包括数据库,内表,外表,视图,分区,桶,数据。其中数据库,表,分区,视图在HDFS中对应的是一个目录,其中内表由hive管理,外表的数据由用户管理;桶和数据在HDFS中对应的是文件,其中桶是根据某个字段的值进行hash散列之后的多个文件。
Hive表都有哪些类型?
Hive表分为内部表,外部表,分区表和分桶表。
Hive内部表和外部表的区别是什么?
内部表的数据由Hive进行管理,外部表的数据由用户管理;最大的区别就是在删除表的时候,内部表会删除元数据和数据文件(数据不可恢复);外部表只会删除元数据,数据文件并不会删除。
如何选择内部表和外部表?
如果模型结构稳定(不会经常发生修改模型结构的情况),且数据加工都是基于Hive完成,则推荐用内部表;如果是数仓建设初期,业务逻辑还不太稳定,表模型存在经常改动的阶段,或数据来源于其他工具(如Flume等),或多种工具对数据文件进行加工处理,则选择外部表。
Hive分区表和分桶表的区别是什么?
Hive分区表根据某些字段进行分区(如时间字段),表现为不同的分区目录;而分桶表是表和分区在文件层面的更进一步的细化,将数据文件根据某个字段的hash散列为多个分桶文件。分区和分桶都是对数据的精细化管理,分桶比分区更精细化,查询准确性和速度会更高。
一句话描述Hive
Hive是支持SQL开发的,处理基于Hadoop分布式文件系统HDFS存储的结构化数据的离线海量数据的统计分析工具,用于构建数据仓库。Hive有内部表,外部表,分区表,分桶表,视图等,支持HQL类SQL查询语法。
再谈Hive的设计架构
Impala知识体系:https://www.cnblogs.com/zlslch/category/993482.html
Impala是使用CDH的首选PB级大数据实时查询分析引擎。