Apache Hive 概述

1. 什么是Hive

  • Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。
  • Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执行
  • Hive由Facebook实现并开源。

1.1 为什么使用Hive

  • Hadoop MapReduce直接处理数据所面临的问题:人员学习成本高,MapReduce实现复杂查询逻辑开发难度太大。
  • 使用Hive处理数据的好处:操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手),避免直接写MapReduce,减少开发人员的学习成本,支持自定义函数,功能扩展很反方便,背靠Hadoop,擅长存储分析海量数据集。

1.2 Hive和Hadoop关系

  • 从功能来说,数据仓库软至少需要具备两种能力:存储数据的能力,分析数据的能力
  • Apache Hive作为一款大数据时代的数据仓库软件,并不是自己实现了上述两种能力,而是借助Hadoop,Hive利用HDFS存储数据,利用MapReduce查询分析数据。
  • Hive最大的魅力在于用户专注于写HQL,Hive帮助转换为MapReduce程序完成对数据的分析。

2. 重点理解

  1. Hive能将数据文件映射成为一张表,这个映射是指什么?
    答:文件和表之间的对应关系
  2. Hive软件本身到底承担了什么功能职责?
    答:SQL语法解析编译成为MapReduce
  3. 什么是元数据Metadata?
    答:Hive Metadata即Hive的元数据,包含用Hive创建的database、table、表的位置、类型、属性、字段顺序类型等元信息。元数据存储在关系型数据库中,如hive内置的Derby、第三方如MySQL等。
  4. 什么是元数据服务Metastore?
    答:Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由datastore再去连接MySQL数据库来存取元数据。通过metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore服务即可,某种程度上也保证了hive元数据的安全。
  • 映射在数学上称之为一种对应关系,比如y=x+1,对于每一个X的值都有与之对应的Y值
  • 在hive中能够写SQL处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚。映射信息专业的叫法称之为:元数据信息(描述数据的数据:metadata)。
  • 用户写完SQL之后,hive需要针对sql进行语法校验,并根据记录的元数据信息解读SQL背后的含义,制定执行计划,并且把执行计划转换成MapReudce程序来执行,把执行的结果封装返回给用户。
    在这里插入图片描述

3. Hive架构图

在这里插入图片描述

3.1 用户接口组件

包括CLI、JDBC/ODBC、webGUI。其中,CLI(command line interface)为shell命令行,Hive中的Thrift服务器允许外部客户端通过网络与Hive交互,类似于JDBC或ODBC协议,WebUI是通过浏览器访问Hive。

3.2 元数据存储组件

通常是存储在关系数据库中,Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在的目录等。

3.3 Driver驱动程序

包括语法解析器、计划编译器、优化器、执行器。完成HQL查询语句从词法分析、语法分析、编译、优化及查询计划的生成。生成的查询计划存储在HDFS中,并在随后又执行引擎调用执行。

3.4 执行引擎

Hive本身并不直接处理数据文件,而是通过执行引擎处理。当下Hive支持MapReduce、Tez、Spark三种执行引擎。

4. Hive数据模型

4.0 Data Model概念

  • 数据模型:用来描述数据、组织数据、和对数据进行操作,是对现实世界数据特征的描述。
  • Hive的数据模型类似于RDMBS库表架构,此外还有自己特有的模型。
  • Hive中的数据可以在粒度级别上分为三类:table表、Partition分区、Bucket桶

4.1 Databases数据库

  • Hive作为一个数据仓库,在结构上积极向传统数据库看齐,也分数据库(Schema),每个数据库下面有各自的表组成。默认数据库default。
  • Hive的数据都是存在HDFS上的,默认有一个根目录,在hive-site.xml中,由参数hive.metastore.warehouse.dir指定。默认值为/user/hive/warehouse
  • 因此Hive中的数据库在HDFS上的存储路径为:${hive.metastore.warehouse.dir}/databasename.db
  • 比如名为itcast的数据库存储路径为:/user/hive/warehouse/itcast.db

4.2 Tables表

  • Hive表与关系数据库中的表相同。Hive中的表所对应的数据通常是存储在HDFS中,而表相关的元数据是存储在RDBM中。
  • Hive中的表的数据在HDFS上的存储路径为: ${hive.metastore.warehouse.dir}/databasename.db/tablename
  • 比如,itcast的数据库下t_user表存储路径为:/user/hive/warehouse/itcast.db/t_user

4.3 Partitions分区

  • Partition分区是hive的一种优化手段表。分区市值根据分区列(例如“日期day”)的值将表划分为不同分区。这样可以更快地对指定分区数据进行查询。
  • 分区在存储层面上的表现是:table表目录下以子文件夹形式存在。
  • 一个文件夹标识一个分区。子文件命名标准:分区列=分区值
  • Hive还支持分区下继续创建分区。

4.4 Buckets分桶

  • 分桶的好处是可以优化join查询和方便抽样查询。
  • Bucket分桶表在HDFS中表现为同一个表目录下数据根据hash散列之后变成多个文件。

5. Hive和MySQL对比

  • Hive虽然具有RDBMS数据库的外表,包括数据模型、SQL语法都十分相似,但是应用场景完全不同
  • Hive只适合用来做海量数据的离线分析,Hive的定位是数据仓库,面向OLAP系统
  • Hive不是大型数据库,也不是要取代MySQL承担业务数据处理。
    在这里插入图片描述
  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Hive是一个基于Hadoop的数据仓库基础设施,它提供了一个类似于SQL的查询语言(HQL)来查询和分析大规模的数据集。Hive的体系结构主要包括用户接口、元数据存储和解释器、编译器、优化器、执行器等几个部分。用户接口包括CLI、Client和WUI,用于用户与Hive进行交互。元数据存储使用数据库(如MySQL、Derby)来存储Hive的元数据信息,包括表的结构、属性和数据所在目录等。解释器、编译器、优化器、执行器负责将HQL查询语句进行词法分析、语法分析、编译、优化和生成查询计划,查询计划存储在HDFS中,并由MapReduce调用执行。Hive的数据存储在HDFS中,大部分查询由MapReduce完成。\[1\] 需要注意的是,Hive并不会自动创建数据库,而是通过配置文件hive-site.xml来指定数据库的连接URL。在配置文件中,可以设置连接URL为MySQL的地址和端口,并指定是否在数据库不存在时创建数据库。\[2\] 总结来说,Apache Hive是一个基于Hadoop的数据仓库基础设施,它提供了SQL类似的查询语言,通过用户接口、元数据存储和解释器、编译器、优化器、执行器等组件来实现数据查询和分析。 #### 引用[.reference_title] - *1* *2* [Apache Hive详解](https://blog.csdn.net/wudidahuanggua/article/details/126928083)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Apache Hive 概述](https://blog.csdn.net/weixin_53570636/article/details/126856108)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值