当前位置: 首页 > news >正文

Apache Hive:基于Hadoop的分布式数据仓库

Apache Hive 是一个基于 Apache Hadoop 构建的开源分布式数据仓库系统,支持使用 SQL 执行 PB 级大规模数据分析与查询。

在这里插入图片描述

主要功能

Apache Hive 提供的主要功能如下。

HiveServer2

HiveServer2 服务用于支持接收客户端连接和查询请求。

HiveServer2 支持多客户端并发和身份验证,基于 Thrift RPC 实现,允许客户端使用 JDBC、ODBC 等连接方式。以下是一个使用 Beeline 客户端工具连接 Apache Hive 的示例:

beeline -u "jdbc:hive2://host:10001/default"
Connected to: Apache Hive

jdbc:hive2://host:10001/>select count(*) from test_t1;

HiveServer2 服务同时还包含了一个基于 Jetty 的网站服务,用于提供 Web 浏览器访问方式。

Hive Metastore

Hive Metastore(HMS)提供了一个管理元数据的集中式资料库,并且通过 API 服务提供客户端查询。

在这里插入图片描述

Hive Metastore 已经成为了构建数据湖的核心基础模块,这些数据湖充分融合了包括 Apache Spark 和 Presto 在内的多样化开源生态系统。

ACID

对于 Apache ORC 格式的数据表,Apache Hive 提供了完整的 ACID 事务支持;对其他所有数据格式,仅支持追加(Insert-Only)操作。

数据压缩

Apache Hive 的数据压缩(Data Compaction)是针对支持 ACID 事务的表(通常是 ORC 格式表)的优化机制,用于提高查询性能并减少存储开销。例如:

jdbc:hive2://> alter table test_t1 compact "MAJOR";
Done!

jdbc:hive2://> alter table test_t1 compact "MINOR";
Done!

jdbc:hive2://> show compactions;

Iceberg集成

Apache Hive 提供了 Apache Iceberg 数据表的原生支持,用户可以直接通过 Hive 的 SQL 接口创建、管理和查询 Iceberg 表,而无需依赖外部工具或复杂配置。

低延迟分析处理

Apache Hive 通过低延迟分析处理(LLAP,Low Latency Analytical Processing)实现交互式与亚秒级 SQL 查询。
在这里插入图片描述

Apache Hive LLAP 通过持久化服务与智能缓存填补了传统 Hive 在实时分析场景的短板,使其能够兼顾高吞吐批处理与低延迟交互查询。

查询优化

Apache Hive 利用 Apache Calcite 框架提供的基于成本优化(CBO)方式实现 SQL 查询的性能优化。

在这里插入图片描述

以下是一个使用 EXPLAIN 命令获取执行计划的示例:

jdbc:hive2://> explain cbo select ss.ss_net_profit, sr.sr_net_loss from store_sales ss join store_returns sr on (ss.ss_item_sk=sr.sr_item_sk) limit 5 ;
+---------------------------------------------+
 Explain
+---------------------------------------------+
 CBO PLAN:
 HiveSortLimit(fetch=[5])
 HiveProject(ss_net_profit=[$1], sr_net_loss=[$3])
   HiveJoin(condition=[=($0, $2)], joinType=[inner])
     HiveProject(ss_item_sk=[$2], ss_net_profit=[$22])
     HiveFilter(condition=[IS NOT NULL($2)])
       HiveTableScan(table=[[tpcds_text_10, store_sales]], table:alias=[ss])
     HiveProject(sr_item_sk=[$2], sr_net_loss=[$19])
     HiveFilter(condition=[IS NOT NULL($2)])
       HiveTableScan(table=[[tpcds_text_10, store_returns]], table:alias=[sr])
+---------------------------------------------+

数据复制

Apache Hive 的引导式复制(Bootstrap Replication)和增量复制(Incremental Replication)实现了高效数据备份与恢复。

jdbc:hive2://> repl dump src with (
. . .> 'hive.repl.dump.version'= '2',
. . .> 'hive.repl.rootdir'= 'hdfs://<host>:<port>/user/replDir/d1'
. . .> );
Done!

jdbc:hive2://> repl load src into tgt with (
. . .> 'hive.repl.rootdir'= 'hdfs://<host>:<port>/user/replDir/d1'
. . .> );
Done!

快速试用

接下来我们使用 Docker 快速体验 Apache Hive。

首先,获取最新的镜像:

docker pull apache/hive:4.0.1

然后设置版本变量:

export HIVE_VERSION=4.0.1

启动 HiveServer2 服务,使用嵌入式 Derby 数据库作为元数据存储:

docker run -d -p 10000:10000 -p 10002:10002 --env SERVICE_NAME=hiveserver2 --name hive4 apache/hive:${HIVE_VERSION}

注意,这种方式在服务关闭时会丢弃所有的数据;如果想要持久存储数据表,可以使用外部数据库和存储。

接下来利用 Beeline 客户端连接数据库:

docker exec -it hive4 beeline -u 'jdbc:hive2://localhost:10000/'

或者也可以通过浏览器进行访问:http://localhost:10002/

在 Beeline 客户端中执行以下 SQL 语句:

show tables;
create table hive_example(a string, b int) partitioned by(c int);
alter table hive_example add partition(c=1);
insert into hive_example partition(c=1) values('a', 1), ('a', 2),('b',3);
select count(distinct a) from hive_example;
select sum(b) from hive_example;

相关文章:

  • 拥抱人工智能大模型时代:大模型会改变我们的生活吗?
  • linux之qt打包 linuxdeployqt
  • android 去掉状态栏的方法汇总
  • JAVA小项目:拼图游戏(简单易懂可上手)
  • fastapi 实践(三)Swagger Docs
  • 前端知识-CSS(二)
  • LeetCode hot 100 每日一题(14)——54.螺旋矩阵
  • 部署高可用PostgreSQL14集群
  • C# 中实现一个线程持续读取,另一个线程负责写入,且写入时读取线程暂停
  • 闲聊IT - 面向服务架构(SOA)的发展历史
  • Powershell 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
  • 【简单学习】Prompt Engineering 提示词工程
  • redis7.4.2单机配置
  • 安全上网沙箱:多方面解决政企私的上网问题
  • [AI速读]混合验证方案:如何高效解决RISC-V向量扩展的验证难题
  • 前端实现截图功能
  • 帕金森病致生活艰难,如何缓解心理负担?
  • 什么是ClickHouse
  • TDengine又新增一可视化工具 Perspective
  • SpringMVC配置和基本原理
  • 跟着京剧电影游运河,京杭大运河沿线六城举行京剧电影展映
  • 昆明破获一起算命破灾诈骗案,民警:大师算不到自己的未来
  • 走访中广核风电基地:701台风机如何乘风化电,点亮3000万人绿色生活
  • 扎克伯格怕“错过风口”?Meta AI数字伴侣被允许与未成年人讨论不当话题
  • 人社部:就业政策储备充足,将会根据形势变化及时推出
  • “富卫保险冠军赛马日”创双纪录,打造赛马旅游盛宴,印证香港联通国际优势