Hive是建立在Hadoop上的数据仓库基础架构。它提供了一系列的工具,可以用来进行数据提取、转化和加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了一种简单的类SQL查询语言,称为HQL(Hive Query Language),它允许熟悉SQL的用户查询数据。Hive的数据计算依赖于MapReduce、Spark和Tez。
使用新的执行引擎Tez代替原先的MapReduce,性能有了显著提升。Tez可以将多个有依赖的作业转换为一个作业(这样只需写一次HDFS,且中间节点较少),从而大大提升DAG(有向无环图)作业的性能。
Hive主要特点如下:
- 海量结构化数据分析汇总:Hive能够处理和分析存储在Hadoop中的大规模结构化数据。
- 将复杂的MapReduce编写任务简化为SQL语句:用户可以使用类似SQL的HQL来编写查询,而不需要编写复杂的MapReduce代码。
- 灵活的数据存储格式:Hive支持多种数据存储格式,包括JSON、CSV、TEXTFILE、RCFILE、SEQUENCEFILE和ORC(Optimized Row Columnar)。
Hive体系结构:
- 用户接口:
- Beeline:Beeline是Hive的推荐CLI工具,基于JDBC,提供了更好的用户体验和更强的功能。它可以连接到HiveServer2,支持多用户并发访问。
- CLI(Command Line Interface):传统的CLI工具,直接与Hive交互,但在最新版本中,Beeline逐渐取代了CLI。
- Client:Hive的客户端,用户通过Client连接至HiveServer2。在启动Client模式时,需要指定HiveServer2所在节点,并在该节点启动HiveServer2。
- WebUI:通过浏览器访问Hive的用户接口。
- JDBC/ODBC:通过JDBC或ODBC驱动程序,用户可以使用各种BI工具和应用程序连接到Hive。
- 元数据存储:Hive将元数据存储在关系型数据库中,如MySQL、PostgreSQL等。元数据包括表的模式、分区信息、列的数据类型、表和列的统计信息等。元数据存储是Hive架构的关键部分,它使得Hive能够快速访问和管理数据。
- 执行引擎:Hive的执行引擎负责将HQL查询转换为底层的MapReduce、Tez或Spark作业,并在Hadoop集群上执行这些作业。执行引擎优化查询计划,选择最佳的执行路径,以提高查询性能。
- 编译器:Hive编译器将HQL查询解析为抽象语法树(AST),然后将AST转换为逻辑计划。逻辑计划经过优化后,生成物理计划,最终转换为可执行的MapReduce、Tez或Spark作业。
- 优化器:Hive优化器对逻辑计划进行优化,包括谓词下推、列裁剪、分区修剪等优化技术,以提高查询性能。
- 存储和计算:Hive依赖Hadoop的分布式存储和计算能力。数据存储在HDFS(Hadoop Distributed File System)中,计算任务由MapReduce、Tez或Spark执行。
Hive主要组件:
Hive作为一个基于HDFS和MapReduce架构的数据仓库,其主要能力是通过对HQL(Hive Query Language)编译和解析,生成并执行相应的MapReduce任务或者HDFS操作。随着Hive的发展,最新版本引入了更多的执行引擎(如Tez和Spark)和改进的用户接口(如Beeline),进一步提升了性能和用户体验。
- Metastore:Metastore负责对表、列和分区等的元数据进行读写及更新操作。元数据存储在关系型数据库中,如MySQL、PostgreSQL等。Metastore是Hive架构的关键部分,使得Hive能够快速访问和管理数据。
- Driver:Driver管理HQL执行的生命周期,并贯穿Hive任务的整个执行期间。它负责接收用户的查询请求,协调各个组件的工作,最终返回查询结果。
- Compiler:Compiler负责将HQL编译并转化为一系列相互依赖的MapReduce、Tez或Spark任务。编译过程包括语法解析、语义分析、逻辑计划生成和物理计划生成。
- Optimizer:Optimizer是优化器,分为逻辑优化器和物理优化器。逻辑优化器对HQL生成的执行计划进行优化,如谓词下推、列裁剪、分区修剪等。物理优化器对生成的MapReduce、Tez或Spark任务进行优化,以提高执行效率。
- Executor:Executor按照任务的依赖关系分别执行MapReduce、Tez或Spark任务。它负责调度和监控任务的执行,确保任务按计划完成。
- ThriftServer:ThriftServer提供Thrift接口,作为JDBC和ODBC的服务端,并将Hive与其他应用程序集成起来。它支持多用户并发访问,提供了高效的查询服务。
- Clients:Beeline:Beeline是Hive推荐的CLI工具,基于JDBC,提供了更好的用户体验和更强的功能。它可以连接到HiveServer2,支持多用户并发访问。WebUI:通过浏览器访问Hive的用户接口,提供了图形化的查询和管理功能。JDBC/ODBC:通过JDBC或ODBC驱动程序,用户可以使用各种BI工具和应用程序连接到Hive。