Hive 系列(一)—— Hive 简介及核心概念

hive核心基本概念 基于 Hadoop 的一个数据仓库工具: hive本身不提供数据存储功能,使用HDFS做数据存储, hive也不分布式计算框架,hive的核心工作就是把sql语句翻译成MR程序 hive也不提供资源调度系统,也是默认由Hadoop当中YARN集群来调度 可以将结构化的数据映射为一张数据库表,并提供 HQL(Hive SQL)查询功能 阅读详情

一、简介

Hive 是一个构建在 Hadoop 之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类 SQL 查询功能,用于查询的 SQL 语句会被转化为 MapReduce 作业,然后提交到 Hadoop 上运行。

特点:

  1. 简单、容易上手 (提供了类似 sql 的查询语言 hql),使得精通 sql 但是不了解 Java 编程的人也能很好地进行大数据分析;
  2. 灵活性高,可以自定义用户函数 (UDF) 和存储格式;
  3. 为超大的数据集设计的计算和存储能力,集群扩展容易;
  4. 统一的元数据管理,可与 presto/impala/sparksql 等共享数据;
  5. 执行延迟高,不适合做数据的实时处理,但适合做海量数据的离线处理。

二、Hive的体系架构

https://raw.githubusercontent.com/heibaiying/BigData-Notes/master/pictures/hive%E4%BD%93%E7%B3%BB%E6%9E%B6%E6%9E%84.png

2.1 command-line shell & thrift/jdbc

可以用 command-line shell 和 thrift/jdbc 两种方式来操作数据:

  • command-line shell:通过 hive 命令行的的方式来操作数据;
  • thrift/jdbc:通过 thrift 协议按照标准的 JDBC 的方式操作数据。

2.2 Metastore

在 Hive 中,表名、表结构、字段名、字段类型、表的分隔符等统一被称为元数据。所有的元数据默认存储在 Hive 内置的 derby 数据库中,但由于 derby 只能有一个实例,也就是说不能有多个命令行客户端同时访问,所以在实际生产环境中,通常使用 MySQL 代替 derby。

Hive 进行的是统一的元数据管理,就是说你在 Hive 上创建了一张表,然后在 presto/impala/sparksql 中都是可以直接使用的,它们会从 Metastore 中获取统一的元数据信息,同样的你在 presto/impala/sparksql 中创建一张表,在 Hive 中也可以直接使用。

2.3 HQL的执行流程

Hive 在执行一条 HQL 的时候,会经过以下步骤:

  1. 语法解析:Antlr 定义 SQL 的语法规则,完成 SQL 词法,语法解析,将 SQL 转化为抽象 语法树 AST Tree;
  2. 语义解析:遍历 AST Tree,抽象出查询的基本组成单元 QueryBlock;
  3. 生成逻辑执行计划:遍历 QueryBlock,翻译为执行操作树 OperatorTree;
  4. 优化逻辑执行计划:逻辑层优化器进行 OperatorTree 变换,合并不必要的 ReduceSinkOperator,减少 shuffle 数据量;
  5. 生成物理执行计划:遍历 OperatorTree,翻译为 MapReduce 任务;
  6. 优化物理执行计划:物理层优化器进行 MapReduce 任务的变换,生成最终的执行计划。

关于 Hive SQL 的详细执行流程可以参考美团技术团队的文章:Hive SQL 的编译过程

三、数据类型

3.1 基本数据类型

Hive 表中的列支持以下基本数据类型:

大类类型
Integers(整型)TINYINT—1 字节的有符号整数
SMALLINT—2 字节的有符号整数
INT—4 字节的有符号整数
BIGINT—8 字节的有符号整数
Boolean(布尔型)BOOLEAN—TRUE/FALSE
Floating point numbers(浮点型)FLOAT— 单精度浮点型
DOUBLE—双精度浮点型
Fixed point numbers(定点数)DECIMAL—用户自定义精度定点数,比如 DECIMAL(7,2)
String types(字符串)STRING—指定字符集的字符序列
VARCHAR—具有最大长度限制的字符序列
CHAR—固定长度的字符序列
Date and time types(日期时间类型)TIMESTAMP — 时间戳
TIMESTAMP WITH LOCAL TIME ZONE — 时间戳,纳秒精度
DATE—日期类型
Binary types(二进制类型)BINARY—字节序列

TIMESTAMP 和 TIMESTAMP WITH LOCAL TIME ZONE 的区别如下:

  • TIMESTAMP WITH LOCAL TIME ZONE:用户提交时间给数据库时,会被转换成数据库所在的时区来保存。查询时则按照查询客户端的不同,转换为查询客户端所在时区的时间。
  • TIMESTAMP :提交什么时间就保存什么时间,查询时也不做任何转换。

3.2 隐式转换

Hive 中基本数据类型遵循以下的层次结构,按照这个层次结构,子类型到祖先类型允许隐式转换。例如 INT 类型的数据允许隐式转换为 BIGINT 类型。额外注意的是:按照类型层次结构允许将 STRING 类型隐式转换为 DOUBLE 类型。

3.3 复杂类型

类型描述示例
STRUCT类似于对象,是字段的集合,字段的类型可以不同,可以使用 名称.字段名 方式进行访问STRUCT ('xiaoming', 12 , '2018-12-12')
MAP键值对的集合,可以使用 名称[key] 的方式访问对应的值map('a', 1, 'b', 2)
ARRAY数组是一组具有相同类型和名称的变量的集合,可以使用 名称[index] 访问对应的值ARRAY('a', 'b', 'c', 'd')

3.4 示例

如下给出一个基本数据类型和复杂数据类型的使用示例:

CREATE TABLE students(
  name      STRING,   -- 姓名
  age       INT,      -- 年龄
  subject   ARRAY<STRING>,   --学科
  score     MAP<STRING,FLOAT>,  --各个学科考试成绩
  address   STRUCT<houseNumber:int, street:STRING, city:STRING, province:STRING>  --家庭居住地址
) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
复制代码

四、内容格式

当数据存储在文本文件中,必须按照一定格式区别行和列,如使用逗号作为分隔符的 CSV 文件 (Comma-Separated Values) 或者使用制表符作为分隔值的 TSV 文件 (Tab-Separated Values)。但此时也存在一个缺点,就是正常的文件内容中也可能出现逗号或者制表符。

所以 Hive 默认使用了几个平时很少出现的字符,这些字符一般不会作为内容出现在文件中。Hive 默认的行和列分隔符如下表所示。

分隔符描述
\n对于文本文件来说,每行是一条记录,所以可以使用换行符来分割记录
^A (Ctrl+A)分割字段 (列),在 CREATE TABLE 语句中也可以使用八进制编码 \001 来表示
^B用于分割 ARRAY 或者 STRUCT 中的元素,或者用于 MAP 中键值对之间的分割,
在 CREATE TABLE 语句中也可以使用八进制编码 \002 表示
^C用于 MAP 中键和值之间的分割,在 CREATE TABLE 语句中也可以使用八进制编码 \003 表示

使用示例如下:

CREATE TABLE page_view(viewTime INT, userid BIGINT)
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\001'
   COLLECTION ITEMS TERMINATED BY '\002'
   MAP KEYS TERMINATED BY '\003'
 STORED AS SEQUENCEFILE;
复制代码

五、存储格式

5.1 支持的存储格式

Hive 会在 HDFS 为每个数据库上创建一个目录,数据库中的表是该目录的子目录,表中的数据会以文件的形式存储在对应的表目录下。Hive 支持以下几种文件存储格式:

格式说明
TextFile存储为纯文本文件。 这是 Hive 默认的文件存储格式。这种存储方式数据不做压缩,磁盘开销大,数据解析开销大。
SequenceFileSequenceFile 是 Hadoop API 提供的一种二进制文件,它将数据以<key,value>的形式序列化到文件中。这种二进制文件内部使用 Hadoop 的标准的 Writable 接口实现序列化和反序列化。它与 Hadoop API 中的 MapFile 是互相兼容的。Hive 中的 SequenceFile 继承自 Hadoop API 的 SequenceFile,不过它的 key 为空,使用 value 存放实际的值,这样是为了避免 MR 在运行 map 阶段进行额外的排序操作。
RCFileRCFile 文件格式是 FaceBook 开源的一种 Hive 的文件存储格式,首先将表分为几个行组,对每个行组内的数据按列存储,每一列的数据都是分开存储。
ORC FilesORC 是在一定程度上扩展了 RCFile,是对 RCFile 的优化。
Avro FilesAvro 是一个数据序列化系统,设计用于支持大批量数据交换的应用。它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro 提供的机制使动态语言可以方便地处理 Avro 数据。
ParquetParquet 是基于 Dremel 的数据模型和算法实现的,面向分析型业务的列式存储格式。它通过按列进行高效压缩和特殊的编码技术,从而在降低存储空间的同时提高了 IO 效率。

以上压缩格式中 ORC 和 Parquet 的综合性能突出,使用较为广泛,推荐使用这两种格式。

5.2 指定存储格式

通常在创建表的时候使用 STORED AS 参数指定:

CREATE TABLE page_view(viewTime INT, userid BIGINT)
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\001'
   COLLECTION ITEMS TERMINATED BY '\002'
   MAP KEYS TERMINATED BY '\003'
 STORED AS SEQUENCEFILE;
复制代码

各个存储文件类型指定方式如下:

  • STORED AS TEXTFILE
  • STORED AS SEQUENCEFILE
  • STORED AS ORC
  • STORED AS PARQUET
  • STORED AS AVRO
  • STORED AS RCFILE

六、内部表和外部表

内部表又叫做管理表 (Managed/Internal Table),创建表时不做任何指定,默认创建的就是内部表。想要创建外部表 (External Table),则需要使用 External 进行修饰。 内部表和外部表主要区别如下:

内部表外部表
数据存储位置内部表数据存储的位置由 hive.metastore.warehouse.dir 参数指定,默认情况下表的数据存储在 HDFS 的 /user/hive/warehouse/数据库名.db/表名/ 目录下外部表数据的存储位置创建表时由 Location 参数指定;
导入数据在导入数据到内部表,内部表将数据移动到自己的数据仓库目录下,数据的生命周期由 Hive 来进行管理外部表不会将数据移动到自己的数据仓库目录下,只是在元数据中存储了数据的位置
删除表删除元数据(metadata)和文件只删除元数据(metadata)

参考资料

  1. Hive Getting Started
  2. Hive SQL 的编译过程
  3. LanguageManual DDL
  4. LanguageManual Types
  5. Managed vs. External Tables

Hive架构组成与执行过程 阅读详情

相关推荐

HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介

本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1. 2. 3. 4. 接下来对第一个内容进行介绍。说明:本系列主要是Hive的使用,其他Hadoop和Hive的原理仅做简单的描述。 Hive安装 由于Hive在安装前需要安装很多东西,比如虚拟机,Linux系统,Hadoop,MySQL等,这个过程及其繁琐和艰难。由于目的是学习如何使用Hive,而不是搞大数据开发,因此没必要深陷其中。 这里推荐厦大林子雨老师的博客,里面已经安装好了全套的大数据软件,只需要自己安装虚拟机,然后导入即可,非常方便

AvenueCyy的博客 923

基于Hadoop的数据仓库Hive的介绍、安装与基本应用

基于Hadoop的数据仓库Hive 一、概述 数据仓库概念 数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策; 数据仓库的体系结构 传统数据仓库面临的挑战 无法满足快速增长的海量数据存储需求 无法有效处理不同类型的数据 计算和处理能力不足 Hive简介 Hive是一个构建于Hadoop顶层的数

qq_44992559的博客 2028

【大数据Hive系列】Hive简介及核心概念

【大数据Hive系列】Hive简介及核心概念

weixin_54707168的博客 642

Hive优化

1. hive group by distinct区别以及性能比较 https://blog.youkuaiyun.com/xiaoshunzi111/article/details/68484426 2. 用insert into替换union all 3. order by &amp; sort by    执行计划是什么 执行计划代表HiveSQL会转化成怎么样的MapReduce作业。也是...

littlecarton的博客 336

全志T113s3主线linux开发(0)--基础准备

嵌入式Linux设备的启动大概是三步:1)启动芯片+内存:常见的是Uboot,不过全志的Uboot主线对SPI NAND 不太友好,用TF卡就方便。对于T113S芯片,推荐使用Awboot,简陋但快速。开发阶段用这个就方便好多,对SPINAND支持也方便。2)启动linux内核:主线内核以下通篇都用6.13以上的内核。对比tina5.0还在用5.4 ,主要是性能、安全上有变化。6.0以上内核在devicetree的编写具体格式上有了变化,网上大量tina5.0和5.4内核的编写方式不适用。

2301_79234138的博客 2247

WPS用户看过来:避开格式错乱坑,用WPS Office完美制作红头文件(2024最新版)

本文详细解析了WPS Office与Word在红头文件制作中的核心差异,提供了2024年最新版的零误差实战指南。从字体处理、页面布局到红头制作关键步骤,帮助用户避开格式错乱坑,确保跨设备显示一致。特别针对WPS用户优化,解决字体丢失、版式错位等常见问题。

weixin_26800111的博客 216

Hive架构介绍

目录 hive的架构 hive数据模型 Metastore(元数据) motivation(动机) metadata objects(元数据对象) Metastore架构 metastore接口 Hive查询语言 Compiler Optimizer Hive API 原文地址:https://cwiki.apache.org/confluence/display/H...

newchitu的博客 1206

推荐系统(1):推荐系统评测

对于可以离线优化的指标,我个人的看法是应该在给定覆盖率、多样性、新颖性等限制条件下,尽量优化预测准确度。用一个数学公式表达,离线实验的优化目标是:最大化预测准确度使得 覆盖率 > A多样性 > B新颖性 > C其中,A、B、C的取值应该视不同的应用而定。

数据不会骗人 2527

hive入门及简介

hive入门及简介 1、hive是什么? Hive是建立在Hadoop (HDFS/MR)上的用于管理和查询结果化/非结构化的数据仓库; 2、hive组成? Hive主要由以下三个模块组成: 用户接口模块,含CLI、HWI、JDBC、Thrift Server等,用来实现对Hive的访问。CLI是Hive自带的命令行界面;HWI是Hive的一个简单网页界面;JDBC、ODBC以...

zhangsq1319 3798

CATIA高效设计:自定义快捷键全攻略

本文详细介绍了如何在CATIA中自定义快捷键以提升设计效率。通过减少鼠标依赖、优化工作流程和减轻手腕疲劳,合理设置快捷键可显著提高建模速度。文章提供了从基础设置到高级配置的全流程指南,包括解决冲突、推荐方案及外设扩展建议,帮助用户快速掌握CATIA高效设计技巧。

weixin_42648844的博客 584

事件相机数据处理实战:从原始事件流到视觉表征的三种核心方法

本文深入探讨了事件相机数据处理的核心环节,即如何将异步、稀疏的原始事件流转换为深度学习模型可处理的视觉表征。文章重点解析了三种核心方法:逐通道累积、体素网格双线性插值和对称累积事件表示,详细阐述了其原理、代码实现、可视化效果及各自的适用场景,为事件相机在目标识别、光流估计等视觉任务中的高效应用提供了实战指南。

read5的博客 438

Hive 系列(一)—— Hive 简介及核心概念

一、简介 Hive是一个构建在Hadoop之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类SQL查询功能,用于查询的SQL语句会被转化为MapReduce作业,然后提交到Hadoop上运行。 特点: 简单、容易上手(提供了类似sql的查询语言hql),使得精通sql但是不了解Java编程的人也能很好地进行大数据分析; 灵活性高,可以自定义用户函数(UDF)和存储格式; 为超大的数据集设...

黑白影的博客 890

如何修复Windows卡在“正在准备Windows”的问题?这里有详细步骤

如何修复Windows卡在“正在准备Windows”的问题?这里有详细步骤。

wyxtx的博客 5661

Hive简介及核心概念(未完)

文章目录一、简介二、Hive的体系架构2.1 command-line shell & thrift/jdbc2.2 Metastore2.3 HQL的执行流程三、数据类型3.1 基本数据类型 一、简介 Hive 是一个构建在 Hadoop 之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类 SQL 查询功能,用于查询的 SQL 语句会被转化为 MapReduce 作业,然后提交到 Hadoop 上运行。 特点: 简单、容易上手 (提供了类似 sql 的查询语言 hql),使得精通 sql

qq_24095055的博客 635

PyTorch复现EEG-TCNet踩坑记:从BCI IV2a数据到TCN块缺失的完整解决方案

本文详细解析了使用PyTorch复现EEG-TCNet模型的全过程,重点解决了BCI IV2a数据集预处理和TCN模块缺失的技术难题。通过标准化数据流程、跨受试者验证策略以及三种因果卷积实现方案,为运动想象分类任务提供完整解决方案,帮助研究者高效实现模型复现与优化。

weixin_30699955的博客 319

【PostgreSQL】Windows11下的PostgreSQL数据库安装tds_fdw扩展及使用(图文记录详细步骤)

【详解】【PostgreSQL】Windows11下的PostgreSQL数据库安装tds_fdw扩展及使用

tttzzzqqq2018的博客 2452

Hive简介及核心概念

Hive简介及核心概念

mxk4869的博客 533

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

大数据技术12:Hive简介及核心概念

​Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。这样,熟悉数据库的数据分析师和工程师便可以无门槛地使用大数据进行数据分析和处理了,Hive出现后大大降低了Hadoop的使用难度,迅速得到开发者和企业的追捧。为每个数据库上创建一个目录,数据库中的表是该目录的子目录,表中的数据会以文 件的形式存储在对应的表目录下。始化,但不会生成所有的元数据信息表,只会初始化必要的一部分,在之后的使用中用到其余表时。

何哥的博客 3268

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Hive 核心原理(hive-3.1.2)

全面分析与传统数据库在设计理念、基本使用等方面的相同点和不同点。hive有这一篇差不多就够了

小王是个弟弟 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Hive系列之简介

Hive是一个基于Hadoop的数据仓库工具,它提供了类似于SQL的查询语言HiveQL,以及用于将查询转换为MapReduce任务的引擎。Hive的主要目的是使数据分析师和开发人员能够轻松地查询和分析存储在Hadoop集群中的数据,而不需要编写复杂的MapReduce代码。Hive的核心是元数据(Metadata),它将表的结构和数据存储在一个关系型数据库中,例如MySQL或Derby。HiveQL语言类似于SQL,允许用户执行查询、过滤、聚合等操作。

算法小生 2083

大数据:Hive简介及核心概念

Hive 是一个构建在 Hadoop 之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类 SQL 查询功能,用于查询的 SQL 语句会被转化为 MapReduce 作业,然后提交到 Hadoop 上运行。特点:可以用 command-line shell 和 thrift/jdbc 两种方式来操作数据:在 Hive 中,表名、表结构、字段名、字段类型、表的分隔符等统一被称为元数据。所有的元数据默认存储在 Hive 内置的 derby 数据库中,但由于 derby 只能有一个实例,也就是说不能有多个命

金融科技和数据治理 923

hive int bigint 强类型_11、Hive核心概念与架构

1、 Hive核心概念和架构原理1.1、 Hive概念Hive由FaceBook开发,用于解决海量结构化日志的数据统计。Hive是基于Hadoop的数据仓库工具,可以将结构化数据映射为一张表,提供类似SQL语句查询功能本质:将Hive SQL转化成MapReduce程序。1.2、Hive与数据库的区别读时模式:Hive在加载数据到表中的时候不会校验.写时模式:Mysql数据库插入数据到表的时...

weixin_39837207的博客 1691

Hive简介

什么是 Hive Hive 由 Facebook 实现并开源,是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据 映射 为一张数据库表,并提供HQL(Hive SQL)查询功能,底层数据是存储在 HDFS 上。Hive 的本质是将 SQL 语句转换为 MapReduce 任务运行,使不熟悉 MapReduce 的用户很方便地利 用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。 数据仓库之父比尔·恩门(Bill Inmon)在 1991 年出版的“Building t

weixin_45354496的博客 2291

hive表格概念

hivehive概念hive的优势和特点数据库和数据仓库区别安装zookeeper安装hive修改mysql登录密码数据库????数据表hive建表语句????hive和MapReducehive元数据管理hive元数据结构数据类型----复杂数据类型数据分层 hive概念 基于hadoop的数据仓库解决方案 将结构化的数据文件映射为数据库表 提供类sql的查询语言HQL(Hive Query Language) Hive让更多的人使用Hadoop Hive成为Apache顶级项目 Hive始于2007年

GodXuzzZ的博客 692

hive中导入csv_大数据专题——Hive简介及核心概念

一、简介Hive 是一个构建在 Hadoop 之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类 SQL 查询功能,用于查询的 SQL 语句会被转化为 MapReduce 作业,然后提交到 Hadoop 上运行。特点:简单、容易上手 (提供了类似 sql 的查询语言 hql),使得精通 sql 但是不了解 Java 编程的人也能很好地进行大数据分析;灵活性高,可以自定义用户函数 (UDF)...

weixin_33693600的博客 351
上一篇: SQL函数 - 开窗(窗口)函数
下一篇: Hive 系列(六)—— Hive 视图和索引
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值