zoukankan      html  css  js  c++  java
  • hive 数据仓库中 mysql,hive,hdfs,mapreduce 之间的关系

      交流中发现很多hive转行的开发者都不是特别清楚,hive既然是数据仓库,那为什么还需要mysql数据库,还需要hdfs呢,熟悉三者之间的关系是作为一个合格的hive数据仓库开发者必须掌握的技能

    通俗理解:mysql 是 资源库的角色。hive不也是属于数据仓库嘛,他的数据文件是放在HDFS上,但是他的配置信息是放在资源库上,也就是mysql。比如说表结构等等。相当于'后宫',我是这么理解的。hive统称配置信息为 元数据

     一.什么是Hive与其特点
           官网介绍:The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL 。 也就是说:hive数据仓库软件使用sql读取、写入和管理驻留在分布式存储中的大型数据集。说明Hive的开发语言是SQL,而实际我们常见的分布式计算框架也就spark,MapReduce,Storm等,那么Hive如何使用SQL语言去进行分布式计算呢?

    1.1Hive可以看做是MapReduce的客户端

             因为Hive的底层运算是MapReduce计算框架,Hive只是将可读性强,容易编程的SQL语句通过Hive软件转换成MR程序在集群上执行。hive可以看做mapreduce客户端,能用mapreduce程序完成的任务基本都可以对应的替换成hql(Hive SQL)编写的hive任务。所以因为hadoop和hdfs的本身设计的特点,也限制了hive所能胜任的工作特性。Hive最大的限制特点就是不支持基于行记录的更新,删除,增加。但是用户可以通过查询生成新表,或者将查询结果导入文件中来“实现”hive基于行记录的操作。

    1.2.Hive是批处理系统

        因为mapreduce是批处理系统,所以hive也是基于海量数据的批处理的。同样因为mapreduce具有高延迟(1.启动时间长2.中间结果放在本地而非内存中),造成hive执行也耗时过长。

    1.3.hive不支持事物

       所以不支持OLTP(连接事物处理),更适用与OLAP(联机分析处理),同样Hive还有不支持很多SQL的用法 ,后面会说。

     二.hive和hdfs,mysql,mapreduce之间的关系
       1.举例说明hive,mysql和hdfs之间的关系
              下面是一个完成的流程,从hive中创建表,到往表里导入数据,1-9说明了hive,mysql,hdfs之间的流程。

       2.要点总结
      1.Hive不存储数据,Hive需要分析计算的数据,以及计算结果后的数据实际存储在分布式系统上,如HDFS上。

      2.Hive某种程度来说也不进行数据计算,只是个解释器,只是将用户需要对数据处理的逻辑,通过SQL编程提交后解释成MapReduce程序,然后将这个MR程序提交给Yarn进行调度执行。所以实际进行分布式运算的是MapReduce程序

      3.因为Hive为了能操作HDFS上的数据集,那么他需要知道数据的切分格式,如行列分隔符,存储类型,是否压缩,数据的存储地址等信息。为了方便以后操作所以他需要将这些信息通过一张表存储起来,然后将这张表(元数据)存储到mysql中。为了啥存储到mysql里(实际是远程mysql),因为hive本身就是一个解释器,所以他不存储数据 ,为啥存到远程mysql里,后面会说。

    mysql中的hive数据库是自己手动创建的,然后执行下面语句:

    schematool -dbType mysql -initSchema 

    该语句的作用是在mysql的hive数据库下建立一大堆的表格.

    ------------下面是hive操作-------------
    
    hive> show databases;
    OK
    default
    hive
    Time taken: 0.018 seconds, Fetched: 2 row(s)
    
    ------------下面是mysql操作-------------
    
    mysql> use hive
    Database changed
    mysql> select * from DBS;
    +-------+-----------------------+-----------------------------------+---------+------------+------------+-----------+
    | DB_ID | DESC                  | DB_LOCATION_URI                   | NAME    | OWNER_NAME | OWNER_TYPE | CTLG_NAME |
    +-------+-----------------------+-----------------------------------+---------+------------+------------+-----------+
    |     1 | Default Hive database | file:/user/hive/warehouse         | default | public     | ROLE       | hive      |
    |    11 | NULL                  | file:/user/hive/warehouse/hive.db | hive    | appleyuchi | USER       | hive      |
    +-------+-----------------------+-----------------------------------+---------+------------+------------+-----------+
    2 rows in set (0.00 sec)
    关注公众号 海量干货等你
  • 相关阅读:
    HTML DOM 06 节点关系
    HTML DOM 05 事件(三)
    HTML DOM 05 事件(二)
    HTML DOM 05 事件(一)
    html DOM 04 样式
    html DOM 03 节点的属性
    html DOM 02 获取节点
    html DOM 01 节点概念
    JavaScript 29 计时器
    JavaScript 28 弹出框
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734257.html
Copyright © 2011-2022 走看看