日期:2014-05-16  浏览次数:20472 次

Hive 和数据库的异同

原文地址:http://www.oschina.net/question/12_7936

?

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

Hive 和数据库的比较

查询语言

HQL

SQL

数据存储位置

HDFS Raw Device 或者 Local FS

数据格式

用户定义 系统决定

数据更新

支持 不支持

索引

执行

MapRedcue Executor

执行延迟

可扩展性

数据规模

  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 修改数据。