Hive基本概念扫盲篇

          Hive基本概念扫盲篇

                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

一.数据仓库概论

1>.什么是数据仓库

  数据仓库,英文名称为Data Warehouse(通常简写为"DW"或者"DWH")。数据仓库是为企业所有级别的决策制定过程,提供所有类型数据支持的资源集合。它出于分析性报告和决策支持目的而创建。

  随着技术的飞速发展,经过多年的数据积累,各互联网公司已保存了海量的原始数据和各种业务数据,所以数据仓库技术是各互联网公司目前需要着重发展的技术领域。

  数据仓库是面向分析的集成化数据环境。通过对数据仓库中的数据进行分析,可以帮助企业改进业务流程,控制成本,提高产品质量等。

  以下几个产品可能你有所耳闻,它们都是商业数据仓库,比如阿里的MaxCompute,腾讯的TDW,百度的Palo等等。
    MaxCompute(原名"ODPS"):
      大数据计算服务(MaxCompute,原名ODPS)是一种快速、完全托管的EB级数据仓库解决方案。
      感兴趣的小伙伴可以阅读:
        https://help.aliyun.com/document_detail/27800.html
    TDW(Tencent Distributed Warehouse):
      腾讯分布式数据仓库,是腾讯公司海量数据处理平台的核心部件,承载着腾讯公司各业务群产品数据(如互联网增值、SNS、网游、电商等)的储存和处理工作。
      目前,TDW支持百PB级数据的离线存储和计算,为业务提供海量、高效、稳定的大数据平台支持和决策支持。
      感兴趣的小伙伴可以阅读:
        https://data.qq.com/openSource
    Palo:
      百度Palo是基于Apache Doris的企业级数据仓库平台,是一个现代化的MPP分析型数据仓库产品。仅需亚秒级响应时间即可获得查询结果,可以有效地支持在线实时数据分析。
      Palo的分布式架构非常简洁,易于运维,并且可以支持PB以上的超大数据集。
      感兴趣的小伙伴可以阅读:
        https://cloud.baidu.com/solution/bdengineering/dw.html

  温馨提示:
    上面介绍的数据仓库都是商业版本的数仓,而我们本篇博客要介绍的并非上述商业数仓,而是开源的Apache Hive。

2>.数据仓库能干什么

  数据仓库系统是一个信息服务和管理平台,它从业务处理系统获得数据,主要以星形模型和雪花模型组织数据,并为用户从数据中获取信息和只是提供各种手段。

  按照功能结构划分,数据仓库系统至少应该包含数据获取(Data Acquisition),数据存储(Data Storage)和数据访问(Data Access)三个关键部分。

  企业数据仓库的建设,是以现有企业业务系统和大量业务数据的积累为基础的。数据仓库不是静态的概念,只有把信息及时交给需要这些信息的使用者,帮助他们做出改善其业务经营的决策,信息才能发挥作用。

  而把信息加以整理归纳和重组,并及时提交给相应管理决策人员,是数据仓库的根本任务。因此,从企业角度来看,数据仓库的建设是一个工程。

3>.数据仓库的特点

  数据仓库中的数据是面向主题的:
    与传统数据库面向应用进行数据组织的特点相对应,数据仓库中的数据是面向主题进行数据组织的。
    什么是主题呢?首先,主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合,归类并进行分析利用的抽象。在逻辑意义上,它对应企业中某一宏观分析领域所涉及的分析对象。
    面向主题的数据组织方式,就是在较高层次上对分析对象的数据的一个完整,一致的描述,能完整,统一刻画个分析对象所涉及的各项数据,以及数据之间的联系。
    所谓较高层次是相对于面向应用的数据组织方式而言的,是指按照主题进行数据组织的方式具有更高的数据抽象级别。   数据仓库中的数据是集成的:     数据仓库中的数据是从原有的,分散的数据库中抽取来的,抽取的数据可分为操作型数据和分析性数据两大类,两者之间的差别甚大。主要区别如下所示:
      (1)数据仓库的每一个主题所对应的元数据在原有的各分散数据库中有很多重复不一致的地方,且来源于不同联机系统的数据都和不同的应用逻辑捆绑在一起;
      (2)数据仓库中的数据不是从原有的数据系统中直接得到的;
    综上所述,数据在进入数据仓库之前,需要经过统一和总和,这一步是数据仓库建设中最关键,最复杂的一部,所要完成的工作如下:
      (1)要统一元数据中的所有矛盾之处,如字段的同名异义,异名同义,单位不统一,字长不一致等等;
      (2)进行数据综合和计算,数据仓库中的数据综合工作可以在从原有数据库中抽取数据时完成,但大多数是在数据仓库内部完成的,即进入数据仓库以后进行数据综合。   数据仓库中的数据是不可更新的:     数据仓库中的数据主要供企业管理者决策分析使用,所涉及的数据操作主要是数据查询,一般情况下并不进行修改操作。
    数据仓库中的数据反映的是相当长的一段时间内历史数据的内容,是不同时间的数据库快照的集合,以及基于这些快照进行统计,综合和重组的导出数据,而不是联机处理的数据。
    数据仓库中进行联机处理的数据经过集成输入数据仓库中,一旦数据仓库存放大数据已经超过数据仓库的数据存储极限,这些数据会被删除。
    因为数据仓库只能进行数据查询操作,所以数据仓库管理系统相比数据库管理系统而言要简单得多。数据库管理系统中的许多技术难点,如完整性保护,并发控制等,在数据仓库管理系统中几乎可以忽略。
    但是在数据仓库中要查询的数据量往往很大,所以就对数据查询提出来了更高的要求,它要求采用各种复杂的索引技术,同时由于数据仓库面向的是商业企业的高层管理者,他们会对数据查询界面的友好型和数据表示提出更高的要求。
  数据仓库中的数据是随时间不断变化的:
    数据仓库中的数据不可更新是针对应用来说的,换句话说,数据仓库的用户在进行数据分析和处理时是不进行数据更新操作的。但并不是说,在从数据集成输入数据仓库开始到最终被删除的整个数据生命周期中,数据仓库中的数据都是永远不变的。
    数据仓库中的数据是随时间不短变化的,这一点表现在以下几个方面:
      (1)数据仓库随着时间的变化不短增加新的是数据内容:
        数据仓库系统必须不短捕捉OLTP数据库中变化的数据,并追加到数据仓库中,也就是要不短地生成OLDP数据库的快照,经过统一集成后增加到数据仓库中;
        但对于确实不再变化的数据库快照,如果捕捉到新的变化数据,则只生成一个新的数据库快照增加进去,而不会对原有的数据库快照进行修改。
      (2)数据仓库随时间的变化不断删除旧的数据内容:
        数据仓库中的数据也有存储期限,一旦超过这一期限,就要被删除。只是数据仓库中的数据时限要远远长于操作性环境中的数据时限。
        在操作性环境中一般只保存2~3个月(即60~90天)的数据,而在数据仓库中则需要保存较长时限的数据(如5~10年),以满足DSS进行趋势分析的要求。
      (3)数据仓库中包含了大量的综合数据:
        其中很多数据与实践密切相关,如数据经常按照实践进行综合,或隔一定的时间进行抽样等。这些数据要随着时间的变化不断进行重新综合。因此,数据仓库的数据特征都包含时间项,以标明数据的历史时期。

 

二.什么是Hive

  Hive是由Facebook开源用于解决海量结构化日志的数据统计。

  Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。本质上是将HQL转换为MapReduce程序。

  Hive非常依赖于Hadoop环境,因为Hive的主要用到Hadoop以下功能:
    (1)Hive处理的数据存储在HDFS;jjjjjj
    (2)Hive分析数据底层的默认实现是MapReduce;
    (3)执行程序运行在YARN上;

  官方地址:
    http://hive.apache.org/

 

三.Hive的优缺点

  优点:
    (1)操作接口采用类SQL语法,提供快速开发的能力。换句话说,就是简单,容易上手。
    (2)避免了去写MapReduce,减少开发人员的学习成本;
    (3)Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场所,如果对实时性要求较高可以考虑使用Impala或者presto;
    (4)Hive的优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高;
    (5)Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

  缺点:
    Hive的HQL表达能力有限:
      (1)迭代式算法无法表达(因为Hive底层默认用的是MR,可以考虑使用Tez);
      (2)数据挖掘方面不擅长;
    Hive的效率比较低:
      (1)Hive自动生成的MapReduce作业,通常情况下不够智能化;
      (2)Hive调优比较困难,粒度较粗;

 

四.Hive的架构原理

  Client(用户接口):
    CLI(hive shell),JDBC/ODBC(java访问hive),WEBUI(浏览器访问hive)。

  Meta store(元数据存储):     元数据包括:表名,所属的数据库(默认是default),表的拥有者,列/分区字段,表的类型(是否是外部表),表的数据所在目录等。     需要注意的是,偶人存储在自带的derby数据库中,但在生产环境中出于考虑该数据库的高可用性,维护性等,推荐使用主流的MySQL存储Metastore。


  驱动器(Driver)     SQL Parser(解析器):       将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在,字段是否存在,SQL语义是否有误。         Physical Plan(编译器):       将AST编译生成逻辑执行计划。     Query Optimizer(优化器):       对逻辑执行计划进行优化。     Execution(执行器):
      把逻辑执行计划转换成可以运行的物理计划,一般情况下,对于Hive来说,就是MR,Tez,Spark,Fink等。

 

五.Hive和数据库比较

  由于Hive采用了类似于SQL的查询语言Hive Query Language(简称"HQL"),因此很容易将Hive理解为数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言,再无类似之处。

  接下来我们一起来从多个维度来了解Hive和数据库的差异,数据库可以用在Online的应用中,但是Hive是为数据仓库而设计的,清除这一点,有助于应用角度理解Hive的特性。

1>.查询语言

  由于SQL被广泛的应用在数据库中,因此专门针对Hive的特性设计了类SQL的查询语言HQL。

  熟悉HQL开发的开发者可以很方便的使用Hive进行开发。

2>.数据存储位置

  Hive是建立在Hadoop之上的,所有Hive的数据都是存储在HDFS中的,而数据库则可以将数据保存在块设备或者本地文件系统中。

3>.数据更新

  由于Hive是针对数据仓库应用设计的,而数据仓库的内容是读多写少。因此,Hive中不建议对数据进行改写,所有的数据都是加载的时候确定好的。

  而数据库中的数据通常是警察进行修改的,因此可以使用类似"INSERT INTO ... VALUES"添加数据,使用类似"UPDATE ... SET"修改数据。

4>.索引

  Hive在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没用对数据中的某些KEY建立索引。

  Hive要访问数据满足条件的特定值是,需要暴力扫描整个数据,因此访问延迟较高。由于MapReduce的引入,Hive可以并行访问数据,因此即使没有索引,对于大数据量的访问,Hive让然可以体现出优势。

  数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了Hive不适合在线数据查询。

5>.执行

  Hive中大多数查询的执行是通过Hadoop提供的MapReduce来实现的。而数据库通常有自己的执行引擎。

6>.执行延迟

  Hive在查询的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致Hive执行延迟高的因素是MapReduce框架。由于MapReduce本身具有较高的延迟,因此在利用MapReduce执行Hive查询是,也会有较高的延迟。

  而相对于数据来所说,数据库的执行延迟较低,当然,这个低是有条件的,即数据规模较小,当数据规模超过数据库的处理能力的时候,Hive的秉性计算显然能体现出优势。

7>.可扩展性

  由于Hive是建立在Hadoop之上的,因此Hive的可扩展性是Hadoop的可扩展性是一致的(世界上最大的Hadoop集群在Yahoo!,2009年的规模在4000台节点左右)。

  而数据库由于ACID语义的严格限制,扩展行非常有限。目前最先进的并行数据库Oracle在理论上的扩展能力也只有100台左右。

8>.数据规模

  由于Hive建立在集群上并可以利用MapReduce进行秉性计算,因此可以支持很大规模的数据,对应的,数据库可以支持的数据规模较小。

 

六.SQL的分类

  数据库的SQL语言大致分为DDL,DML,DCL,DQL,TCL五类,它们共同组成数据库的完整语言。
    DQL:
      数据库查询语言。
      关键字:SELECT ... FROM ... WHERE。
    DDL :
      数据库模式定义语言。
      关键字:CREATE,DROP,ALTER。
    DML:
      数据操纵语言。
      关键字:INSERT、UPDATE、DELETE。
    DCL:
      数据控制语言 。
      关键字:GRANT、REVOKE。
    TCL:
      事务控制语言。
      关键字:COMMIT、ROLLBACK、SAVEPOINT。

  博主推荐阅读:
    Hive环境部署实战篇:
      https://www.cnblogs.com/yinzhengjie2020/p/13912307.html

    Hive常用的属性配置及调优参数概述:
      https://www.cnblogs.com/yinzhengjie2020/p/13939518.html

    Hive的JDBC环境部署:
      https://www.cnblogs.com/yinzhengjie2020/p/13961702.html

    Hive常用的数据类型概述:
      https://www.cnblogs.com/yinzhengjie2020/p/13975314.html

    Hive常用的DDL(Data Definition Language)数据操作:
      https://www.cnblogs.com/yinzhengjie2020/p/13983292.html

    Hive常用的DML(Data Manipulation Language)数据操作:
      https://www.cnblogs.com/yinzhengjie2020/p/13991817.html

    Hive常用的DQL(Data Query Language)数据操作:
      https://www.cnblogs.com/yinzhengjie2020/p/13997428.html

    Hive常用的DCL(Data Control Language)数据操作:
      https://www.cnblogs.com/yinzhengjie2020/p/14002480.html

 

posted @ 2020-10-09 23:35  JasonYin2020  阅读(670)  评论(0编辑  收藏  举报