大数据Hive入门概述

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 大数据Hive入门概述

1 Apache Hive 概述

1.1 什么 什么是 是 Hive

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

d08fd2f24ac1402781dfbf897bb82036.png

1.2 为什么使用 Hive

➢ 使用 Hadoop MapReduce 直接处理数据所面临的问题

人员学习成本太高 需要掌握 java 语言

MapReduce 实现复杂查询逻辑开发难度太大

➢ 使用 Hive 处理数据的好处

操作接口采用类 SQL 语法,提供快速开发的能力(简单、容易上手)

避免直接写 MapReduce,减少开发人员的学习成本

支持自定义函数,功能扩展很方便

背靠 Hadoop,擅长存储分析海量数据集


1.3 Hive 与 Hadoop 的关系

从功能来说,数据仓库软件,至少需要具备下述两种能力:


存储数据的能力

分析数据的能力

Apache Hive 作为一款大数据时代的数据仓库软件,当然也具备上述两种能力。只不过 Hive 并不是自己实现了上述两种能力,而是借助 Hadoop Hive 利用 HDFS 存储数据,利用 MapReduce 查询分析数据 。这样突然发现 Hive 没啥用,不过是套壳 Hadoop 罢了。其实不然,Hive 的最大的魅力在于用户专注于编写 HQL,Hive 帮您转换成为 MapReduce 程序完成对数据的分析。29a54b5c86e546c18f0984da22968ccc.png

2 场景设计 :如何模拟实现 Hive 的功能

2.1 场景需求

在 HDFS 文件系统上有一个文件,路径为/data/china_user.txt,其内容如下:


1,zhangsan,18,beijing
2,lisi,25,shanghai
3,allen,30,shanghai
4,wangwu,15,nanjing
5,james,45,hangzhou
6,tony,26,beijing

需求:统计来自于上海年龄大于 25 岁的用户有多少个?如果让您设计 Hive 这款软件,要求能够实现用户编写 sql 语句,Hive 自动

将 sql 转换 MapReduce 程序,处理位于 HDFS 上的结构化数据。如何实现?


2.2 场景目的

重点理解下面两点:

Hive 能将数据文件映射成为一张表,这个映射是指什么?

Hive 软件本身到底承担了什么功能职责?


2.3 功能实现关键

➢ 映射信息 记录

映射在数学上称之为一种对应关系,比如 y=x+1,对于每一个 x 的值都有与之对应的 y 的值。在 hive 中能够写 sql 处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚。映射信息专业的叫法称之为元数据信息(元数据是指用来描述数据的数据 metadata)。

8da4e3a1b972472d868d5d596d93ae13.png


具体来看,要记录的元数据信息包括:

表对应着哪个文件(位置信息)

表的列对应着文件哪一个字段(顺序信息)

文件字段之间的分隔符是什么

➢ Sql 语法解析、编译

用户写完 sql 之后,hive 需要针对 sql 进行语法校验,并且根据记录的元数据信息解读 sql 背后的含义,制定执行计划。并且把执行计划转换成MapReduce 程序来执行,把执行的结果封装返回给用户。


2.4 最终效果

基于上述分析,最终要想模拟实现的 Hive 的功能,大致需要下图所示组件参与其中,从中可以感受一下 Hive 承担了什么职责。02c97bf50b994ccc8e88b4b497a1d9d4.png

当然,也可以把这个理解为 hive


3 Hive 架构 、组件

3.1 Hive 架构图的架构图

896648826b8e443c89dfb632f5394702.png


3.2 Hive 组件

用户接口:包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command lineinterface)为 shell 命令行;Hive 中的 Thrift 服务器允许外部客户端通过网络与 Hive 进行交互,类似于 JDBC 或 ODBC 协议。WebGUI 是通过浏览器访问 Hive。元数据存储:通常是存储在关系数据库如 mysql/derby 中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。Driver 驱动程序, , 包括 语法解析、 器、 计划 编译器、优化器、执行器:完成 HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行。执行引擎:Hive 本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive 支持 MapReduce、Tez、Spark3 种执行引擎。


4 Hive 数据模型 (Data Model )

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

Table 表

Partition 分区

Bucket 分桶

0530c8843d7a431b84a17d98b44a56d8.png

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 中的表所对应的数据是存储在Hadoop 的文件系统中,而表相关的元数据是存储在 RDBMS 中。

在 Hadoop 中,数据通常驻留在 HDFS 中,尽管它可以驻留在任何 Hadoop 文件系统中,包括本地文件系统或 S3。Hive 有两种类型的表:

⚫ Managed Table 内部表、托管表

⚫ External Table 外部表

创建表时,默是内部表。关于内部表和外部表的区别,我们后续知识点再做展开探讨。Hive 中的表的数据在 HDFS 上的存储路径为:

${hive.metastore.warehouse.dir}/databasename.db/tablename

比如,itcast 的数据库下 t_user 表存储路径为:

/user/hive/warehouse/itcast.db/t_user

ea9bc4974ede448288a6f4a9d0334b3e.png

4.3 Partitions

Partition 分区是 hive 的一种优化手段表。 分区是指根据分区列(例如“日期 day ”)的值将表划分为不同分区。这样可以更快地对指定分区数据进行查询。分区在存储层面上的表现是:table 表目录下以子文件夹形式存在。一个文件夹表示一个分区。子文件命名标准: 分区列= = 分区值Hive 还支持分区下继续创建分区,所谓的多重分区。关于分区表的使用和详细介绍,后面模块会单独展开详细讲解。

1c2e65f4ad9645dbac3355963896c1fa.png

4.4 Buckets

Bucket 分桶表是 hive 的一种优化手段表。 分桶 是指根据段 表中字段 (例如“ 编号 ID ”)的值, , 经过 h hash 计算规则将数据文件划分成指定的若干个小文件。

3d904ba5a9bd4c9babb071bd114575bf.png

分桶规则:hashfunc(ID) % 桶个数,余数相同的分到同一个文件。分桶的好处是可以优化 join 查询和方便抽样查询。Bucket 分桶表在 hdfs

中表现为同一个表目录下数据根据 hash 散列之后变成多个文件。关于桶表以及分桶操作,后面模块会单独展开详细讲解。

8b49d1bef2cc48789861e5023616a9c2.png

5 Hive 是要取代 Mysql 吗?

Hive 虽然具有 RDBMS 数据库的外表,包括数据模型、SQL 语法都十分相似,但应用场景却完全不同。Hive 只适合用来做海量数据的离线分析。Hive 的定位是数据仓库,面向分析的 OLAP 系统。因此时刻告诉自己,Hive 不是大型数据库,也不是要取代 Mysql 承担业务数据处理。更直观的对比请看下面这幅图:

b8320cb7e9e24f2ea788ba3e5405cdd0.png

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
4月前
|
SQL 分布式计算 大数据
大数据新视界 --大数据大厂之Hive与大数据融合:构建强大数据仓库实战指南
本文深入介绍 Hive 与大数据融合构建强大数据仓库的实战指南。涵盖 Hive 简介、优势、安装配置、数据处理、性能优化及安全管理等内容,并通过互联网广告和物流行业案例分析,展示其实际应用。具有专业性、可操作性和参考价值。
大数据新视界 --大数据大厂之Hive与大数据融合:构建强大数据仓库实战指南
|
1月前
|
SQL 分布式计算 大数据
SparkSQL 入门指南:小白也能懂的大数据 SQL 处理神器
在大数据处理的领域,SparkSQL 是一种非常强大的工具,它可以让开发人员以 SQL 的方式处理和查询大规模数据集。SparkSQL 集成了 SQL 查询引擎和 Spark 的分布式计算引擎,使得我们可以在分布式环境下执行 SQL 查询,并能利用 Spark 的强大计算能力进行数据分析。
|
2月前
|
数据采集 分布式计算 大数据
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
78 1
|
11月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
218 2
|
5月前
|
数据采集 数据可视化 大数据
Python入门修炼:开启你在大数据世界的第一个脚本
Python入门修炼:开启你在大数据世界的第一个脚本
127 6
|
11月前
|
存储 分布式计算 API
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
396 0
|
11月前
|
存储 消息中间件 大数据
大数据-68 Kafka 高级特性 物理存储 日志存储概述
大数据-68 Kafka 高级特性 物理存储 日志存储概述
93 1
|
11月前
|
存储 分布式计算 NoSQL
大数据-144 Apache Kudu 基本概述 数据模型 使用场景
大数据-144 Apache Kudu 基本概述 数据模型 使用场景
134 0
|
11月前
|
SQL 存储 OLAP
大数据-133 - ClickHouse 基础概述 全面了解
大数据-133 - ClickHouse 基础概述 全面了解
267 0
|
11月前
|
存储 分布式计算 算法
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
200 0