[大数据]hive数据仓库工具(介绍2)

3 阅读4分钟

问题:我们在hive平台上写代码进行操作, 底层的计算引擎其实是mapreduce, 或者spark是吗, 一般来说,我们是可以选择底层的计算引擎的, 对吗,我这么理解对吗

我们通常说的Hive是一个数据仓库工具,它提供了SQL-like的查询语言(HiveQL)来查询和管理存储在Hadoop分布式文件系统(HDFS)中的大数据集。
Hive在执行查询时,确实需要一个底层的计算引擎来处理这些查询。最初,Hive是建立在Hadoop的MapReduce引擎上的,这意味着Hive会将HiveQL查询转换为MapReduce作业。
但是,随着技术的发展,Hive也支持其他计算引擎,比如Tez和Spark。特别是从Hive 2.0开始,Hive on Spark成为了一个重要的方向。

所以,你的理解是正确的:在Hive平台上写代码(HiveQL)进行操作时,底层的计算引擎可以是MapReduce,也可以是Spark,或者是Tez等。
而且,一般来说,我们可以选择底层的计算引擎。不过,这需要正确的配置和环境的支持。

具体来说,Hive的执行引擎可以通过设置hive.execution.engine属性来配置,常见的值有:'mr'(MapReduce)、'tez'、'spark'。

例如,在Hive会话中,你可以通过以下命令来设置执行引擎为Spark:
SET hive.execution.engine=spark; # hive的执行引擎

但是,需要注意的是,使用不同的引擎可能需要不同的配置和依赖。例如,如果你想使用Spark作为执行引擎,你需要确保Hive和Spark的集成已经正确配置,并且Spark集群可用。

此外,不同的执行引擎在性能上会有差异。例如,Tez和Spark通常比MapReduce更快,因为它们支持更复杂的数据流图,并且可以避免中间结果写入磁盘,从而减少I/O开销。

总结:你的理解是正确的。Hive支持多种计算引擎,我们可以根据实际情况选择合适的引擎。

你的理解完全正确! 让我详细解释一下:

Hive 与计算引擎的关系

1. Hive 的架构

Hive CLI/Beeline(SQL接口)
        ↓
Hive Server(查询解析、优化)
        ↓
执行引擎(MR/Tez/Spark)
        ↓
存储层(HDFS/HBase等)

2. 可用的计算引擎

引擎特点适用场景
MapReduce (MR)Hive 默认引擎,稳定但较慢传统批处理,兼容性好
Apache TezDAG执行引擎,优化MR缺陷交互式查询,ETL处理
Apache Spark内存计算,速度更快迭代计算,机器学习,实时分析
LLAP (Live Long and Process)守护进程,实时查询交互式BI查询

3. 如何选择/切换引擎

方式一:配置文件设置

# hive-site.xml
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>  <!-- 可选: mr, tez, spark -->
</property>

方式二:会话级别设置

-- 在Hive会话中动态切换
SET hive.execution.engine=spark;
SET hive.execution.engine=mr;

方式三:按查询指定(某些版本支持)

-- 在查询前指定
SET hive.execution.engine=tez;
SELECT * FROM users WHERE age > 25;

4. 实际使用示例

-- 查看当前引擎
SET hive.execution.engine;

-- 切换到Spark引擎
SET hive.execution.engine=spark;

-- 执行查询(将使用Spark执行)
SELECT department, AVG(salary) 
FROM employees 
GROUP BY department;

-- 切换回MapReduce
SET hive.execution.engine=mr;

5. 重要注意事项

  1. 依赖配置:使用不同引擎需要相应配置

    • Spark引擎:需要 Spark 集群和 hive-spark 集成
    • Tez引擎:需要安装配置 Tez
  2. 性能差异

    -- 相同SQL在不同引擎的性能对比:
    -- MapReduce: 最慢,适合一次性批量处理
    -- Tez: 中等,优化了MR的中间结果落地
    -- Spark: 最快,适合迭代计算和内存充足场景
    
  3. 资源管理器配合

    • 通常与 YARN 一起使用
    • 不同引擎的资源分配策略不同

6. 现代趋势

  • 生产环境:Tez 和 Spark 是主流选择
  • 云平台:Hive on Spark 更常见
  • 传统系统:可能仍在使用 MapReduce

总结:你的理解完全正确!Hive 确实是一个 SQL-on-Hadoop 的查询引擎,它的执行层是可插拔的,可以根据需要选择 MapReduce、Tez 或 Spark 作为底层计算引擎。这种设计让 Hive 既保持了 SQL 的易用性,又能利用不同计算引擎的优势。