Hive简介、架构、数据组织
什么是HIVE
- 由Facebook实现并开源的,基于Hadoop的数据仓库工具,适用于离线的批量数据计算;
- 底层数据存储在HDFS上,Hive可以将结构化的数据映射为一张数据库表;
- 提供HQL(Hive SQL)查询功能
- **Hive的本质:**将SQL语句转换为MapReduce任务运行,进而使用户方便的利用HQL处理和计算存储于HDFS上的结构化数据。
HIVE特点
优点:
- 可扩展性,横向扩展
- 延展性:支持自定义函数
- 良好的容错性:保障及时个别节点出现问题,SQL语句仍可完成执行
缺点:
- 不支持记录级别的增删改操作
- 查询延迟较严重
- 不支持事务:主要用于OLAP(联机分析处理)
,而非OLTP(联机事务处理)
Hive VS RDBMS
Hive架构
- 用户接口:shell/CLI, jdbc/odbc, Web UI
- shell终端/CLI(Command Line Interface):交互形式使用Hive命令行对Hive进行交互
- jdbc/odbc:Hive基于JDBC操作提供的客户端,开发及运维人员用此链接Hive Server服务器
- Web UI:浏览器访问Hive
- 跨语言服务: Thrift server是Facebook开发的软件框架,用于可扩展且跨语言的服务开发,提供了让用户使用多种语言操纵Hive的能力
- Driver:驱动器Driver,编译器Compiler,优化器Optimizer,执行器Executor 该部分完成HQL查询语句从语法分析、编译、优化、生成逻辑执行计划的部分。生成的逻辑执行计划存储在HDFS中,随后由MapReduce调用执行。
- 驱动器Driver:将HQL语句转换为抽象语法树(AST)
- 编译器Compiler:将抽象语法树(AST)编译为逻辑执行计划
- 优化器Optimizer:对逻辑执行计划进行优化
- 执行器Executor:调用底层运行框架(MapReduce)运行逻辑执行计划
- 元数据存储系统:RDBMS MySQL
元数据:表名、列、分区及其属性、表的属性(内部表&外部表)、表数据所在目录 等。
因Hive中的元数据默认存储在自带的Derby数据库中,不适合多用户操作,且存储目录不固定,不方便管理,因此常将元数据存储在位于本地货远程的MySQL库中,MySQL库和Hive通过MetaStrore服务进行交互。
Hive的数据组织
数据存储格式
TextFile、SequenceFile、ParquetFile\RCFile
解析时,仅需在创建表时数据中的列分隔符和行分隔符
数据模型
- 数据库Database:在HDFS中表现为 ${hive.metastore.warehouse.dir}目录下的一个文件夹
- 表 Table:在HDFS中表现为上述数据库文件夹目录下的一个文件夹
2.1 外部表 External Table:存储位置可以在任意指定HDFS目录路径
2.2 表分为:内部表、外部表、分区表、Bucket表 - 视图 View:只读,基于基本表创建
- 分区 Partition:在HDFS中表现为表文件夹目录下的子目录
- 分桶 Bucket:在HDFS中表现为同一个表目录下,根据哈希值(Hash)散列后的多个文件
内表 VS 外表
分区表 VS 分桶表
本文内容来源自“扎心了,老铁”的博文,并进行部分整理。