有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的存储数据库
其中主要涉及到的表如下:
但是对于一个菜鸟来说,看完这些还是有点云里雾里。
下面来看他们的异同。
查询语言。由于 SQL 被广泛的应用在数据仓库中,因此,专门针对 Hive 的特性设计了类 SQL 的查询语言 HQL。熟悉 SQL 开发的开发者可以很方便的使用 Hive 进行开发。
数据存储位置。Hive 是建立在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中的。而数据库 则可以将数据保存在本地文件系统中。
数据格式。Hive 中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三 个属性:列分隔符(通常为空格、”\t”、”\x001″)、行分隔符(”\n”)以及读取文件数据的方法(Hive 中默认有三个文件格式 TextFile,SequenceFile 以及 RCFile)。由于在加载数据的过程中,不需要从用户数据格式到 Hive 定义的数据格式的转换,因此,Hive 在加载的过程中不会对数据本身进行任何修改,而只是将数据内容复制或者移动到相应的 HDFS 目录中。而在数据库中,不同的数据库有不同的存储引擎,定义了自己的数据格式。所有数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时。
数据更新。由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive 中不 支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO … VALUES 添加数据,使用 UPDATE … SET 修改数据。
索引。之前已经说过,Hive 在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描, 因此也没有对数据中的某些 Key 建立索引。Hive 要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于 MapReduce 的引入, Hive 可以并行访问数据,因此即使没有索引,对于大数据量的访问,Hive 仍然可以体现出优势。数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了 Hive 不适合在线数据查询。
执行。Hive 中大多数查询的执行是通过 Hadoop 提供的 MapReduce 来实现的(类似 select * from tbl 的查询不需要 MapReduce)。而数据库通常有自己的执行引擎。
执行延迟。之前提到,Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外 一个导致 Hive 执行延迟高的因素是 MapReduce 框架。由于 MapReduce 本身具有较高的延迟,因此在利用 MapReduce 执行 Hive 查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive 的并行计算显然能体现出优势。
可扩展性。由于 Hive 是建立在 Hadoop 之上的,因此 Hive 的可扩展性是和 Hadoop 的可扩展性是 一致的(世界上最大的 Hadoop 集群在 Yahoo!,2009年的规模在 4000 台节点左右)。而数据库由于 ACID 语义的严格限制,扩展行非常有限。目前最先进的并行数据库 Oracle 在理论上的扩展能力也只有 100 台左右。
数据规模。由于 Hive 建立在集群上并可以利用 MapReduce 进行并行计算,因此可以支持很大规模的 数据;对应的,数据库可以支持的数据规模较小。
看了这些,我说为什么hive查询数据怎么这么慢呢。
最后再来一下数据库和数据仓储的区别。
> 数据库是面向事务的设计,数据仓库是面向主题设计的。 数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。
> 数据库设计是尽量避免冗余,一般采用符合范式的规则来设计,数据仓库在设计是有意引入冗余,采用反范式的方式来设计。
> 数据库是为捕获数据而设计,数据仓库是为分析数据而设计,它的两个基本的元素是维表和事实表。(维是看问题的角度,比如时间,部门,维表放的就是这些东西的定义,事实表里放着要查询的数据,同时有维的ID)
以上文章部分内容来自与网络。
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
本教程将详细介绍如何安装Hive,并配置使用MySQL作为其元数据库。 首先,我们来理解元数据库的作用。元数据库存储了关于Hive表、分区、列等对象的元数据,这些元数据是执行Hive查询的关键。通常,Hive默认使用Derby...
接着,创建一个名为`hive`的用户,设定其默认表空间为`hive_meta`,并赋予适当的权限,如预定义的角色`RESOURCE`,允许用户操作已有数据库对象。 配置Hive-site.xml是连接Hive metastore到达梦数据库的关键步骤。你...
在Cloudera Manager中配置Hive使用MySQL数据库涉及多个步骤,从卸载CentOS默认MySQL到配置完毕,下面详细说明每一步的知识点。 首先,确保在添加Hive数据库前,系统中不存在先前安装的MySQL版本。使用命令rpm -qa |...
上述内容涉及到的Hadoop生态系统中的Hive组件与MySQL数据库的结合使用,是大数据领域中常见的一种实践。在Hadoop生态中,Hive允许用户不必深入学习Java MapReduce编程即可操作存储在HDFS中的大规模数据集。通过上述...
默认情况下,Hive使用 Derby 或 MySQL 作为其元数据存储,管理表、分区、列等信息。这里使用MySQL作为元数据存储,因为MySQL具有更好的并发性和可扩展性。 3. **准备环境**: - 安装并配置好Hadoop集群,确保Hive...
docker下构建Hadoop集群,Hive数据库和Mysql数据库查询对比_Hadoop-Hive
假设我们要为Hive创建一个名为`hive_metadata`的元数据库,并授予用户`hive`对该数据库的所有权限,可以按照以下步骤操作: ```sql CREATE DATABASE IF NOT EXISTS hive_metadata; GRANT ALL PRIVILEGES ON hive_...
这里提到的"hive3.1.2+mysql驱动.zip"文件,显然是一个包含了Hive 3.1.2版本及其与MySQL数据库交互所需的驱动程序的压缩包。下面我们将深入探讨Hive 3.1.2以及它与MySQL的关系。 Hive是Apache软件基金会开发的一个...
**Hive元数据库详解** Hive是Apache Hadoop生态系统中的一个数据仓库工具,它允许用户使用SQL-like查询语言(HQL)对存储在Hadoop分布式文件系统(HDFS)上的大规模数据进行分析。Hive的核心组件之一是元数据库,它...
默认情况下,Hive使用Derby数据库存储元数据,但也可以配置使用更强大的数据库如MySQL,以支持多用户环境和高可用性。 - **MySQL JDBC驱动**:Java Database Connectivity (JDBC) 是Java访问数据库的标准API。MySQL...
2.将Hive中的数据迁移到指定Mysql数据库中 注意点: 1.数据迁移的过程中,由于hive的Null值存储为"\N",Mysql存储为NULL值,二者转换时需要注意,再数据迁移json模板中,"nullFormat": "\\N", 该配置信息就是解决了...
Hive 是一个基于 Hadoop 的数据仓库工具,可将结构化的数据文件映射为一张数据库表,并提供 SQL 类似的查询语言(HQL)进行数据查询和分析。MySQL 是一个开源的关系型数据库管理系统,常用于存储和管理业务数据。 ...
1. **连接MySQL**:使用Java或Python等编程语言,通过JDBC或其他库连接到MySQL数据库,获取表信息。 2. **解析表结构**:查询MySQL的元数据信息,如字段名、字段类型、字段长度、是否为主键等。 3. **映射数据类型...
在本场景中,我们将探讨如何使用NiFi来实时监控MySQL数据库的binlog(二进制日志),并将其中的变更事件同步到Hive数据仓库。由于Hive的插入操作效率较低,这种方案通常不用于直接的实时写入,但可以作为数据流处理...
5. 链接Hive与MySQL,例如,可以设置Hive的metastore服务使用MySQL存储元数据。 6. 测试所有服务的正确运行,如启动Hadoop集群,执行Hive查询等。 以上就是这个压缩包中各组件的主要功能和它们在大数据处理环境中的...
根据提供的文件信息,以下是对Hive数据库安装及基本使用的知识点总结。 ### Hive数据库的安装及基本使用 #### 一、CentOS7安装MySQL 5.7 1. **安装wget** 使用yum工具安装wget,这是用于从网络上下载文件的工具...
### Ubuntu下安装Hive数据库知识点总结 #### 一、前言 Hive 是一个基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,使得 Hadoop 更好的发挥处理大数据的能力。...
【标题】"springboot+mybatisplus+druid+hive+mysql.zip" 是一个整合了多种技术的项目压缩包,其中包含Spring Boot、MyBatisPlus、Druid、Hive和MySQL等关键组件。这些技术在现代软件开发,尤其是大数据处理和Web...
Spark 提供了高效的数据处理能力,而 Hive 则是基于 Hadoop 的数据仓库工具,MySQL 是一种广泛使用的开源关系型数据库。本篇文章将深入探讨如何使用 Spark 与 Hive 和 MySQL 进行数据交互。 首先,`SparkToHive....
在`mysql_hive_jar`中,可能包含了MySQL的JDBC驱动 jar 文件,例如`mysql-connector-java.jar`,这是连接MySQL数据库所必需的。 3. **配置步骤**: 集成MySQL和Hive通常涉及以下步骤: - 将`mysql-connector-java...