【大数据】离线数仓核心组件:Hive 架构解析与进阶操作指南
Hive 是基于 Hadoop 的数据仓库工具主要用于解决海量结构化日志的数据统计问题。它提供了一套类 SQL 的查询语言 HiveQL通过将 SQL 语句转换为运行在 Hadoop 集群上的 MapReduce 或 Spark 任务大幅降低了大数据分析的工程门槛。目录一、 Hive 核心架构与运行机制二、 数据检索机制与并行计算效能三、 数据表管理内部表与外部表设计四、 分区机制与查询效能优化五、 分布式扩展性与集群规模底座一、 Hive 核心架构与运行机制Hive 的整体架构由四大核心模块构成。在数据处理的完整生命周期中这四大模块紧密衔接共同完成底层计算任务的调度与执行。1用户接口层Client包含命令行交互界面CLI、提供 Java 访问支持的 JDBC/ODBC 接口、WebUI 以及 Thrift 服务器负责接收外部的查询分析指令。2驱动器Driver是解析与优化指令的中枢。当接收到查询请求时解析器将 SQL 字符串转化为抽象语法树AST并进行表和字段的语义校验编译器随后将语法树编译为逻辑执行计划优化器对逻辑计划进行精简与重排最终由执行器将逻辑计划转化为可在 Hadoop 上运行的物理计算任务。3元数据层MetaStore负责存储描述数据属性的信息涵盖表的创建时间、字段结构和行数等。生产环境中通常将其配置存储在 MySQL 等关系型数据库中。4存储与计算层主要依赖 HDFS 进行分布式文件存储并调用底层的 MapReduce 等计算引擎执行具体的数据分析任务。二、 数据检索机制与并行计算效能在数据检索机制方面Hive 在加载数据时直接将文件移动到指定目录在这一过程中不对数据内容进行扫描无须对特定的键值建立索引结构。当访问满足特定条件的数据时系统会通过暴力扫描全表数据的方式来完成检索造成较高的单次访问延迟。引入分布式计算引擎后Hive 能够以大规模并行的方式处理海量数据。在面对超大规模数据集时这种并行计算所带来的吞吐量优势远大于缺乏索引而产生的查询延迟。受限于先天的延迟瓶颈Hive 被严格定位为离线数据分析工具适用于大规模批处理任务无法承担要求毫秒级响应的在线实时数据查询场景。三、 数据表管理内部表与外部表设计在表管理方面Hive 的数据表划分为内部表与外部表两类二者在数据生命周期控制权上存在显著的底层差异。表类型核心定义与数据控制权删除表时的执行逻辑适用业务场景内部表 (Managed Table)Hive 全权接管数据的生命周期数据统一存放在配置项定义的仓库目录下。系统会同步抹除元数据库中的描述信息以及 HDFS 上的真实物理数据文件。适合作为中间计算结果的临时表或独占型数据源。外部表 (External Table)Hive仅在元数据库中记录路径映射不对原始物理数据做任何移动或干预。系统仅清除元数据库中的描述信息原始数据文件依旧完好无损地保留在原路径下。适合跨部门、跨组件的数据共享数据安全性极高。在创建外部表时需通过EXTERNAL关键字声明并使用LOCATION参数直接指向实际数据文件所在的 HDFS 路径。同时为保证数据读写的高效性与压缩比通常使用STORED AS ORC指令将表数据以 ORC 列式存储格式进行保存。CREATE EXTERNAL TABLE IF NOT EXISTS user_action_log ( user_id STRING COMMENT 用户唯一标识, action_type STRING COMMENT 行为类型, action_time STRING COMMENT 行为发生时间 ) COMMENT 用户行为日志外部表 PARTITIONED BY (dt STRING COMMENT 按日期进行分区) STORED AS ORC LOCATION /data/warehouse/user_action_log;四、 分区机制与查询效能优化分区的概念是 Hive 中优化查询性能的核心手段。从文件系统的微观视角来看在 HDFS 中创建一张表等同于建立了一个主文件夹。分区的实质是在该主文件夹下依据特定的业务字段建立更细粒度的子文件夹。系统会将归属于同一分区特征的数据单独存放在对应的子目录下。当查询语句指定了具体的分区条件时Hive 的执行引擎会直接定位并只扫描该特定子文件夹内的数据文件规避了极度消耗资源的全表扫描过程大幅提升数据检索的精准度与效率。-- 增加单个分区 ALTER TABLE user_action_log ADD PARTITION(dt20200630); -- 同时增加多个分区 ALTER TABLE user_action_log ADD PARTITION(dt20200630) PARTITION(dt20200701); -- 删除单个分区 ALTER TABLE user_action_log DROP PARTITION(dt20200630); -- 同时删除多个分区注意语法中的逗号分隔 ALTER TABLE user_action_log DROP PARTITION(dt20200630), PARTITION(dt20200701);五、 分布式扩展性与集群规模底座在集群扩展性方面分布式架构展现出了极高的算力上限。业界顶尖的 Hadoop 集群规模早已达到数千台物理节点的量级大型企业部署上万台节点的超级集群也已成为常态。受制于 ACID 事务语义的严格一致性限制关系型数据库在分布式扩展上存在物理瓶颈顶级并行数据库的理论扩展上限通常仅维持在百台节点左右。在大数据离线处理领域高度可扩展的 Hadoop 底层架构依然是支撑企业级数仓建设的最核心基石。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2476889.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!