• 数据仓库Hive


    数据仓库

    什么时候需要用到数据仓库?

    一个公司里面不同项目可能用到不同的数据源,有的存在MySQL里面,又的存在MongoDB里面,甚至还有些要做第三方数据。

    但是现在又想把数据整合起来,进行数据分析。此时数据仓库(Data Warehouse,DW)就派上用场了。它可以对多种业务数据进行筛选和整合,可以用于数据分析、数据挖掘、数据报表。

    image.png

    数据仓库的特点

    • 主题性:数据仓库是针对某个主题来进行组织,比如滴滴出行,司机行为分析就是一个主题,所以可以将多种不同的数据源进行整合。而传统的数据库主要针对某个项目而言,数据相对分散和孤立。
    • 集成性:
      数据仓库需要将多个数据源的数据存到一起,但是这些数据以前的存储方式不同,所以需要经过抽取、清洗、转换的过程
    • 稳定性:保存的数据是一系列历史快照,不允许修改,只能分析。
    • 时变性:会定期接收到新的数据,反应出最新的数据变化。

    总的来说,数据仓库是将多个数据源的数据按照一定的主题集成起来,因为之前的数据各不相同,所以需要抽取、清洗、转换

    整合以后的数据不允许随便修改,只能分析,还需要定期更新。

    ETL

    上面我们说过,数据仓库接收的数据源是不同的,要做集成的话,需要抽取、清洗、转换三个步骤,这就是ETL(Extract-Transform-Load)

    • Extract:数据抽取,就是把数据从数据源读出来
    • Transform:数据转换,就是把数据转换为特定的格式
    • Load:数据加载,把处理后的数据加载到目标处。
      image.png

    主流的数据仓库

    国内最常用的是一款基于Hadoop的开源数据仓库,名为Hive,它可以对存储在HDFS的文件数据进行查询、分析

    Hive对外可以提供HiveQL,这是类似于SQL语言的一种查询语言。在查询时可以将HiveQL语句转换为MapReduce任务,在Hadoop层进行执行。

    Hive的最大优势在于免费,那其他知名的商业数据仓库有那些呢?比如Oracle,DB2,其中业界老大是Teradata

    Teradata数据仓库支持大规模并行处理平台(MPP),可以高速处理海量实际上,性能远远高于Hive。对企业来说,只需要专注于业务,节省管理技术方面的精力,实现ROI(投资回报率)最大化。

    image.png

    Hive

    上面提到了Hive是最著名的开源数据仓库,它是Hadoop生态中一个重要的组件。

    Hadoop的生态中,HDFS解决了分布式存储的问题,MapReduce解决了分布式计算的问题,而HBASE则提供了一种NoSQL的存储方法。

    但是如果需要的HDFS上的文件或者HBASE的表进行查询,需要自定义MapReduce方法。那么Hive其实就是在HDFS上面的一个中间层,它可以让业务人员直接使用SQL进行查询。

    所以Hive是用进行数据提取转换加载的,而且它可以把SQL转换为MapReduce任务,而Hive的表就是HDFS的目录或者文件。

    Hive的体系架构

    image.png

    上图为Hive的体系结构

    • 首先是接入Hive的客户端,可以通过CLI命令行方式,也可以是Hive的Client直接连接到Hive Server中。还可以是Web浏览器直接访问

    • 之前我们提到过Hive的表就是HDFS中的一个文件,所以Hive还会将表的相关属性单独列出来,为了方便检索,可以存放在MySQL、derby等数据库里面。

      这些数据就是元数据信息,比如表是否为外部表,数据存放在哪个目录等等。

      Hive和MySQL既可以在同一台服务器上,又可以在不同的机器上。

    • 另外Hive还需要对SQL语句进行解析,所以和数据库一样,它也有解释器、编译器、优化器等等,而且还会生成查询计划,存储在HDFS中,然后由MapReduce进行调用。

    image.png

    Hive的数据模型

    Hive主要包含以下几种数据模型:

    • Hive数据库:类似于传统数据库

    • 内部表,与传统数据库的Table一样,每个Table都在Hive中有一个目录进行对应。删除表时,元数据和保存的实际数据都会删除掉

    • 外部表:

      外部表就类似于一个快捷方式或者说一个指针,指向HDFS已经存在的数据。

    • Partition:也就是对列进行密集索引

    • 桶:

      Hive的桶是对表的每一列进行Hash,然后根据Hash值切分数据,这样每一个Bucket对应一个文件。

    • 视图:与传统数据库类似,是一个逻辑的表。

    image.png

    参考

    本文为什么是数据仓库?的笔记

  • 相关阅读:
    JavaScript对iframe的DOM操作
    如何处理JSON中的特殊字符
    JavaScript引擎是单线程的
    JSONP跨域的原理解析
    四道JavaScript面试题检测你的js基本功
    让IE6也支持position:fixed
    Keras Layer 的 call(x) 和 input_shape
    C++文件读写 fwrite 和 fread
    Windows Ubuntu 子系统修改默认登陆用户·
    Python新建文件夹(如果不存在)
  • 原文地址:https://www.cnblogs.com/dy2903/p/8541139.html
Copyright © 2020-2023  润新知