Hive学习笔记(1)初识Hive

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架构

image.png

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级大数据实时查询分析引擎。

你可能感兴趣的:(Hive学习笔记(1)初识Hive)