基本指标对比
SparkSQL | Hive | |
---|---|---|
生态系统 | 是Spark中的一部分,很重要的一部分。所以也可以说是Hadoop的一部分 | 是Hadoop的一部分 |
存储 | Spark支持存储在HDFS或S3 | 使用HDFS |
性能 | Spark计算优先使用内存,将中间结果落内存,计算更快 | 可以说是在MapReduce上封装了一层,底层用的MapReduce,而MapReduce不会将中间结果落内存,所以相对Spark会慢一些 |
查询语言 | 标准的SQL | HiveSQL,有针对Hive的优化和一些函数 |
社区活跃度 | Spark近一年每周50-100个commit | Hive近一年每周5-10个commit |
关键指标对比
操作 | Spark SQL 表 | Hive 表 | 性能差异原因 |
---|---|---|---|
插入(Insert) | 不直接支持,通常通过DataFrame写入或使用 INSERT INTO 语句 | 直接支持,使用 LOAD DATA 或 INSERT INTO 语句 | Hive 提供了直接的表加载和插入机制,而 Spark SQL 通常需要通过 DataFrame API 来完成数据写入。 |
删除(Delete) | 不支持直接的 DELETE 语句,通常需要通过 DataFrame 操作来实现 | 不支持直接的 DELETE 语句,需要通过外部脚本或工具来实现 | 两者都不支持直接的 DELETE 语句,但 Spark SQL 可能提供更灵活的 DataFrame 操作来实现类似的功能。 |
更新(Update) | 不支持直接的 UPDATE 语句,通常需要通过 DataFrame 操作来实现 | 不支持直接的 UPDATE 语句,需要通过外部脚本或工具来实现 | 两者都不支持直接的 UPDATE 语句,但 Spark SQL 可能提供更灵活的 DataFrame 操作来实现类似的功能。 |
查询(Select) | 高效,利用 Spark 的分布式计算能力 | 较慢,依赖 MapReduce 作业执行查询 | Spark SQL 利用 Spark 的内存计算和优化技术,可以更快地执行查询。Hive 使用 MapReduce 作为其执行引擎,这可能会导致更高的延迟。 |
数据格式 | 支持多种格式(Parquet, ORC, Avro, Delta Lake 等) | 主要支持 Parquet 和 ORC | Spark SQL 支持更多的数据格式,包括一些支持 ACID 事务的格式(如 Delta Lake),这有助于提高读写性能。 |
优化 | 利用 Catalyst 优化器进行查询优化 | 使用 Hive 的优化器进行查询优化 | Spark SQL 的 Catalyst 优化器可以提供更高级别的查询优化,包括执行计划的优化。 |
事务支持 | 可以通过 Delta Lake 或 Iceberg 等存储层支持 ACID 事务 | 有限的事务支持,主要通过 Hive ACID 特性 | Spark SQL 可以通过额外的存储层(如 Delta Lake 或 Iceberg)提供完整的 ACID 事务支持,而 Hive 的事务支持相对有限。 |
兼容性
Spark完全兼容Hive,从Hive迁移到Spark成本很低。
备注
Hive既不存储数据,也不进行数据计算。Hive将数据存储在HDFS,计算通过MapReduce。我理解Hive目标降低了MapReduce的使用门槛,其实就是封装了MapReduce,提升了MapReduce的易用性。