有Mysql数据库的情况下为什么要用Hive数据库?

2023-11-11

有Mysql数据库的情况下为什么要用Hive?

最近接到公司的一个需求,要求使用Hive做数据查询。当时第一反应就是What?Hive是什么鬼?一脸懵逼状。(请原谅一个刚开始实习的Java实习生见识短浅)然后发现了hive的一些问题。下面简单介绍一下Hive。


网上对于hive与mysql的区别的文章也不是很多。so只能问问公司大牛们,看看他们是怎样理解的。

由于 Hive 采用了 SQL 的查询语言 HQL,因此很容易将 Hive 理解为数据库。其实 从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。 
数据库可以用在 Online 的应用中,但是 Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。

一、Hive是一个基于Hadoop的数据仓库平台。通过hive,我们可以方便地进行ETL的工作。hive定义了一个类似于SQL的查询语言:HQL,能 够将用户编写的QL转化为相应的Mapreduce程序基于Hadoop执行。

Hive是Facebook 2008年8月刚开源的一个数据仓库框架,其系统目标与 Pig 有相似之处,但它有一些Pig目前还不支持的机制,比如:更丰富的类型系统、更类似SQL的查询语言、Table/Partition元数据的持久化等。 
Hive 可以看成是从SQL到Map-Reduce的 映射器 
这里写图片描述 
Hive的数据放在哪儿?

数据在HDFS的warehouse目录下,一个表对应一个子目录。

本地的/tmp目录存放日志和执行计划

hive的表分为两种,内表和外表。 
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。 
在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

使用Mysql作为Hive metaStore的存储数据库

其中主要涉及到的表如下: 
这里写图片描述

但是对于一个菜鸟来说,看完这些还是有点云里雾里。

下面来看他们的异同。 
这里写图片描述

  1. 查询语言。由于 SQL 被广泛的应用在数据仓库中,因此,专门针对 Hive 的特性设计了类 SQL 的查询语言 HQL。熟悉 SQL 开发的开发者可以很方便的使用 Hive 进行开发。

  2. 数据存储位置。Hive 是建立在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中的。而数据库 则可以将数据保存在本地文件系统中。

  3. 数据格式。Hive 中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三 个属性:列分隔符(通常为空格、”\t”、”\x001″)、行分隔符(”\n”)以及读取文件数据的方法(Hive 中默认有三个文件格式 TextFile,SequenceFile 以及 RCFile)。由于在加载数据的过程中,不需要从用户数据格式到 Hive 定义的数据格式的转换,因此,Hive 在加载的过程中不会对数据本身进行任何修改,而只是将数据内容复制或者移动到相应的 HDFS 目录中。而在数据库中,不同的数据库有不同的存储引擎,定义了自己的数据格式。所有数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时。

  4. 数据更新。由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive 中不 支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO … VALUES 添加数据,使用 UPDATE … SET 修改数据。

  5. 索引。之前已经说过,Hive 在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描, 因此也没有对数据中的某些 Key 建立索引。Hive 要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于 MapReduce 的引入, Hive 可以并行访问数据,因此即使没有索引,对于大数据量的访问,Hive 仍然可以体现出优势。数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了 Hive 不适合在线数据查询。

  6. 执行。Hive 中大多数查询的执行是通过 Hadoop 提供的 MapReduce 来实现的(类似 select * from tbl 的查询不需要 MapReduce)。而数据库通常有自己的执行引擎。

  7. 执行延迟。之前提到,Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外 一个导致 Hive 执行延迟高的因素是 MapReduce 框架。由于 MapReduce 本身具有较高的延迟,因此在利用 MapReduce 执行 Hive 查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive 的并行计算显然能体现出优势。

  8. 可扩展性。由于 Hive 是建立在 Hadoop 之上的,因此 Hive 的可扩展性是和 Hadoop 的可扩展性是 一致的(世界上最大的 Hadoop 集群在 Yahoo!,2009年的规模在 4000 台节点左右)。而数据库由于 ACID 语义的严格限制,扩展行非常有限。目前最先进的并行数据库 Oracle 在理论上的扩展能力也只有 100 台左右。

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

看了这些,我说为什么hive查询数据怎么这么慢呢。

最后再来一下数据库和数据仓储的区别。


> 数据库是面向事务的设计,数据仓库是面向主题设计的。 数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。
> 数据库设计是尽量避免冗余,一般采用符合范式的规则来设计,数据仓库在设计是有意引入冗余,采用反范式的方式来设计。
> 数据库是为捕获数据而设计,数据仓库是为分析数据而设计,它的两个基本的元素是维表和事实表。(维是看问题的角度,比如时间,部门,维表放的就是这些东西的定义,事实表里放着要查询的数据,同时有维的ID)
  • 1
  • 2
  • 3
  • 4
  • 5



http://blog.csdn.net/nxw_tsp/article/details/54314886



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有Mysql数据库的情况下为什么要用Hive数据库? 的相关文章

随机推荐

  • GPU渲染管线之旅

    在这一部分中 我们来谈谈像素处理的前半部分 dispatch和实际的像素着色 事实上 这部分是大多数图形开发者在谈到PS stage时所关心的内容 有关alpha blend和Late Z的内容则会下一篇文章中去探讨 后面我们会看到 在硬件
  • Oauth2.0实现token刷新功能

    扣扣技术分享交流群 1125844267 1 Oauth3 0简介 Oauth2 0是一个授权协议 提供了一种解决用户资源共享问题的思路 它不是一种实现 对于java来说 我们可以利用Spring Security OAuth2来实现 Oa
  • 使用Anaconda 创建指定cuda 版本的虚拟环境

    目的 解决多cuda版本共存问题 首先是安装anaconda 从官网或者是清华源下载安装包 以下用 Anaconda3 2019 10 Linux x86 64 sh 举例 wget https mirrors tuna tsinghua
  • Pycharm 报错 “Could not find conda environment: torch“ 解决办法:通过Anaconda 配置 pytorch 环境

    问题 在 Pycharm 中运行 gt gt gt import torch 报错 Could not find conda environment torch 解决方法 在 pytorch 环境下安装 PyTorch 第一步 以管理员身份
  • 服务器2008装系统教程视频教程,2008服务器系统安装教程视频

    2008服务器系统安装教程视频 2021 02 13 22 34 39 简介 php去除nbsp的方法 首先创建一个PHP代码示例文件 然后通过 preg replace s nbsp xc2 xa0 strip tags val 方法去除
  • WPF 将TextBox更改为PasswordBox样式(文字显示方式为密码格式)

    样式代码
  • 移动应用开发之约束布局

    重点在于找死角区 约束布局在所有布局之中是功能最全 最便捷的布局 可以通过拖拽的方式来实现 由于我总是通过拖拽的方式 导致我看布局文件代码的时候 一脸懵逼 便将约束布局的各个属性整理了下来 父约束 一般值为parent 也可以是id 加id
  • 洛谷P1182-数列分段(详解)

    题目 给定一个长度为n的数列A 要求将它分为m段 要求每段连续 且每段和的最大值最小 N lt 10e5 m lt n Ai之和不超过10e9 这题一看就知道我不会 所以很老实的去看了看题解 题解也真是避重就轻 重要的地方就说 这个要自己思
  • kibana 报错 server is not ready yet

    docker logs kibana打印日志 报错 type log timestamp 2020 06 04T08 25 57Z tags warning elasticsearch admin pid 6 message Unable
  • 蓝桥杯 历届试题 有理数类

    标题 有理数类 有理数就是可以表示为两个整数的比值的数字 一般情况下 我们用近似的小数表示 但有些时候 不允许出现误差 必须用两个整数来表示一个有理数 这时 我们可以建立一个 有理数类 下面的代码初步实现了这个目标 为了简明 它只提供了加法
  • 计算机组成原理课程设计:在复杂模型机上编写机器指令与微程序计算海伦公式

    文章目录 一 实验内容 1 实验目的 2 实验目标 3 实验设备 二 实验原理 1 数据格式 2 指令设计 3 指令格式 4 指令系统 三 总体设计 四 实验步骤 1 按图6连接实验线路 仔细检查连线后打开实验箱电源 2 写入实验程序 并进
  • 解决python中解决No module named XXXX 问题

    百度的时候大部分时间是推荐安装Anaconda3 Anaconda3 强大归强大 但是需要下载并且需要进行配置环境才可以用 如果觉得麻烦 不妨用下面的方式解决 1 首先查看一下module是不是thread 如果你运行的是python3的话
  • Python中绘制离散型colorbar

    可以按照以下步骤进行 1 导入必要的库 matplotlib pyplot 和 matplotlib colors import matplotlib pyplot as plt import matplotlib colors as mc
  • python随机生成英文字母_在Python中生成随机字母

    有没有一种方法可以在Python中生成随机字母 如random randint 但用于字母 random randint的范围功能会很好 但是拥有仅输出随机字母的生成器总比没有好 简单 gt gt gt import string gt g
  • 【办公】word中实现三线表(跨页,续表)

    文章目录 前言 三线表 生成一张表格 设置标题和交叉引用 设置三线表 选中表格的全部 设置边框与底纹 设置跨页 分割成两个表 设置标题行重复 设置续表标识 巧妙用文本框 END 前言 在办公中 一些场景需要将普遍表格设设置为三线表 如 论文
  • HTTP状态 500 - 内部服务器错误之java.lang.ClassNotFoundException: org.apache.jsp.index_jsp

    该错误是由于 jar 包冲突引起 在 Tomcat 中 servlet 和 jsp 的 jar 包和使用 maven 导入的 jar 包产生了冲突 解决方法 将pom xml中以下代码删除 即不使用 maven 中的 jar 包
  • JavaScript图像处理(5) - 曲线操作(Curve Manipulation)

    直方图均衡作为一个自动的方法虽然可以在大多数情况下获得不错的效果 但是很多时候也受限于其单一的功能而无法满足多样化的图像处理需求 尤其是在图像的艺术处理方面 直方图均衡往往并不能达到期望的效果 有时候我们需要增强图像中的高光或者是明亮的背景
  • 使用Map集合作为封装SQL查询结果的场景和注意事项

    一 使用Map集合作为封装SQL查询结果的场景 返回给前端的参数可以看做一个集合里面封装了多个对象 并且返回的字段较少 没有合适的类可以接收 这种时候可以使用Map集合进行接收参数 在XML配置文件中返回值类型可以用Map集合 使用Map集
  • AR地图微信小程序:数字化时代下地图应用的新突破

    随着数字化时代的到来 地图应用成为人们日常生活中不可或缺的工具 而随着增强现实 AR 技术的快速发展 AR地图微信小程序应运而生 为用户提供了一种全新的地图导航体验 本文将深入探讨AR地图微信小程序的专业性和思考深度 并分析其在地图应用领域
  • 有Mysql数据库的情况下为什么要用Hive数据库?

    有Mysql数据库的情况下为什么要用Hive 最近接到公司的一个需求 要求使用Hive做数据查询 当时第一反应就是What Hive是什么鬼 一脸懵逼状 请原谅一个刚开始实习的Java实习生见识短浅 然后发现了hive的一些问题 下面简单介