Hive
在 Hadoop 集群上所有数据的访问都是通过 Java 编写的 MapReduce 作业来完成的,这些让 Java 程序员来完成没有问题。
但是对 SQL 程序员来说,写 MapReduce 则非常困难。Hive 的目的就是允许 SQL 能够访问 HDFS 中的数据。
Hive 定义了一个简单的类 SQL查询语言,叫做 HQL。这种语言让用户能用熟悉的 SQL来查询数据,
用 HQL 编写的查询语句通过 Hive 转化成 MapReduce 代码并且通过 Hadoop 来执行。但 HQL 并非完全标准的 SQL。体现在下面几个方面
- Hive 不支持连接条件
- 不支持 update 和 delete 语句
- 不支持事务
Spark SQL
spark sql 本身就是跑在 spark 上,其性能表现比 Hive 要好。 spark SQL 有一个内存计算模型,可以比 MapReduce 进行
磁盘访问的方式快许多。
尽管 Spark SQL 用一种 Hive 查询语言 HQL 来表达,但也有一些在 Hive 上没有的额外功能。
如在整个用户会话期间缓存表数据的能力,相当于一些数据库中的临时表,这些表在内存中,访问速度要快许多。
以上内容节选自《hadoop 生态系统》