数仓工具Hive 概述

这篇具有很好参考价值的文章主要介绍了数仓工具Hive 概述。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hive简介

Hive是由Facebook开源,基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。
通过Hive可以将mapreduce程序的复杂编写过程抽象为简单的sql语句,它提供一种sql语句到mapreduce程序的映射,提高了开发效率。
另外:
(1)Hive中每张表的数据存储在HDFS
(2)Hive分析数据底层的实现是MapReduce(也可配置为Spark或者Tez)
(3)执行程序运行在Yarn上

Hive架构

其架构如下图所示,
数仓工具Hive 概述

  • Hive Client
    其中Hive Client就代表我们的客户端,如同mysql的client一样,不同的是这里有两种客户端,一种是本地的命令行接口CLI(command-line interface),另一种是远程通过JDBC等连接的客户端,这种远程连接的需要使用HiveServer2来统一代理,在远程访问Hive数据时,客户端并未直接访问Hadoop集群,而是由Hivesever2代理访问。

  • Metastore
    元数据包括:数据库(默认是default)、表名、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等。注意:这里只存储抽线出来的表的信息,真正的元数据还是保存在HDFS上的。(可以只有空表,也可以在hdfs上有数据,但是没有对应的元数据表,这两个的映射是通过hive实现的)元数据默认保存在一个自带的derby数据库中,但是derby数据库只支持单客户端访问,生产环境中为了多人开发,推荐使用MySQL存储Metastore。

  • Driver
    对sql语句做语法分析,解析,优化,然后交给对应执行引擎(可以是mapreduce,也可以是spark,tez等)执行的一个模块,包含以下几部分:
    (1)解析器(SQLParser):将SQL字符串转换成抽象语法树(AST)
    (2)语义分析(Semantic Analyzer):将AST进一步划分为QeuryBlock
    (3)逻辑计划生成器(Logical Plan Gen):将语法树生成逻辑计划
    (4)逻辑优化器(Logical Optimizer):对逻辑计划进行优化
    (5)物理计划生成器(Physical Plan Gen):根据优化后的逻辑计划生成物理计划
    (6)物理优化器(Physical Optimizer):对物理计划进行优化
    (7)执行器(Execution):执行该计划,得到查询结果并返回给客户端

  • Hadoop
    数据使用HDFS进行存储,可以选择MapReduce/Tez/Spark进行计算。资源的调度基于Yarn。Hadoop中HDFS,Yarn和MapReduce部分见之前的文章。

HiveSQL语法不同之处

和普通sql语法不同的几个在于窗口函数,炸裂函数,以及用户自定义函数UDF等,当然,建表语句也有很多不同的,包括分区,分桶等。此外,对应的数据类型也更为复杂,包括array,map和struct等。

建表语句

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name   
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) 
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format] 
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]

查询语句

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
  FROM table_reference       -- 从什么表查
  [WHERE where_condition]   -- 过滤
  [GROUP BY col_list]        -- 分组查询
   [HAVING col_list]          -- 分组后过滤
  [ORDER BY col_list]        -- 排序
  [CLUSTER BY col_list
    | [DISTRIBUTE BY col_list] [SORT BY col_list]

Hive查看执行计划

Hive查看执行计划的语句和sql类似,

EXPLAIN [FORMATTED | EXTENDED | DEPENDENCY] query-sql

注:FORMATTED、EXTENDED、DEPENDENCY关键字为可选项,各自作用如下。

  • FORMATTED:将执行计划以JSON字符串的形式输出
  • EXTENDED:输出执行计划中的额外信息,通常是读写的文件名等信息
  • DEPENDENCY:输出执行计划读取的表及分区

Explain呈现的执行计划,由一系列Stage组成,这一系列Stage具有依赖关系,每个Stage对应一个MapReduce Job,或者一个文件系统操作等。

Hive文件格式

为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。Hive表数据的存储格式,可以选择text file、orc、parquet、sequence file等。
text file和sequence file是基于行存储的,默认是text file,文本文件中的一行内容,就对应Hive表中的一行记录。

ORC和parquet都是基于列存储的,基于列存储方便对数据指定压缩算法, 减少网络io和磁盘占用,且sql语句中往往只需要特定列。
这两种基于列存储的文件格式类似,解析式都需要从末尾先读取特定字段的一个代表长度的数据,然后向前解析,且列数据和列的元数据信息(数据信息包含了该列的数据类型、该列的编码方式、位置等信息。)也单独存放的。
其中parquet是目前使用的主流格式。

Parquet文件是Hadoop生态中的一个通用的文件格式,它也是一个列式存储的文件格式。
Parquet文件的格式如下图所示:
数仓工具Hive 概述

上图展示了一个Parquet文件的基本结构,文件的首尾都是该文件的Magic Code,用于校验它是否是一个Parquet文件。
首尾中间由若干个Row Group和一个Footer(File Meta Data)组成。
每个Row Group包含多个Column Chunk,每个Column Chunk包含多个Page。以下是Row Group、Column Chunk和Page三个概念的说明:
行组(Row Group):一个行组对应逻辑表中的若干行。
列块(Column Chunk):一个行组中的一列保存在一个列块中。
页(Page):一个列块的数据会划分为若干个页。
Footer(File Meta Data)中存储了每个行组(Row Group)中的每个列快(Column Chunk)的元数据信息,元数据信息包含了该列的数据类型、该列的编码方式、该类的Data Page位置等信息。
建表语句
Create table parquet_table
(column_specs)
stored as parquet
tblproperties (property_name=property_value, …);
支持的参数如下:

若一张表的文件类型为Parquet,若需要对该表数据进行压缩,需在建表语句中声明压缩格式如下:
create table orc_table
(column_specs)
stored as parquet
tblproperties (“parquet.compression”=“snappy”);

参数 默认值 说明
parquet.compression uncompressed 压缩格式,可选项:uncompressed,snappy,gzip,lzo,brotli,lz4
parquet.block.size 134217728 行组大小,通常与HDFS块大小保持一致
parquet.page.size 1048576 页大小文章来源地址https://www.toymoban.com/news/detail-507968.html

到了这里,关于数仓工具Hive 概述的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • android开源投屏工具scrcpy简介

    目录 一,初识scrcpy 1.1 scrcpy介绍 1.2 scrcpy特点 二,scrcpy指令说明 2.1 画面设置 2.1.1 缩小分辨率 2.1.2 修改画面比特率 2.1.3 限制画面帧率 2.1.4 画面裁剪 2.1.5 锁定屏幕朝向 2.2 屏幕录制 2.3  连接方式 2.3.1 无线 2.3.2 多设备 2.4 窗口设置 2.4.1  标题 2.4.2 位置和大小 2.4.3 无边框 2.4.

    2024年02月06日
    浏览(46)
  • 开源机器学习工具包——PyTorch高级API简介

    作者:禅与计算机程序设计艺术 随着深度学习的不断发展,近年来在图像、文本、音频等领域取得重大突破,无论是识别率还是模型大小都有了明显的提升。因此,基于深度学习技术的应用在各行各业都得到广泛的应用。但这些模型往往较为复杂,使用起来也比较繁琐。Te

    2024年02月04日
    浏览(55)
  • 物流实时数仓——概述与准备工作

    目录 一、架构设计与技术栈 (一)数仓架构设计  (二)所用技术栈 (三)最终效果 二、关于离线与实时的相关概念 三、实时数仓设计思路 Hadoop 3.3.4 Zookeeper 3.7.1 Kafka 3.3.1 Hbase 2.4.11 Redis 6.0.8 Flink 1.17.0 Clickhouse Spring Sugar 物流         业务 离线         批处理         在处理数据

    2024年01月24日
    浏览(32)
  • 使用python连接hive数仓

    1 版本参数 查看hadoop和hive的版本号 查看java版本号 查看mysql版本号 2 启动环境 启动hadoop集群 查看hadoop集群状态 启动hiveserver2服务 检测hiveserver2状态 检测thrift端口号状态 3 安装环境 安装python第三方库 使用everything检索sasl2文件夹并打开该文件夹 在open git bash here窗口查看sasl2里

    2024年03月09日
    浏览(84)
  • hive数仓-数据的质量管理

    版本20231116 要理解数据的质量管理,应具备hive数据仓库的相关知识 数据的质量管理,表现保障在数据的健康性,即满足消费者期望程度,体现在他们对数据的使用预期,只有达到预期才能满足决策层的参考。 大数据大而价值密度低,在有效信息数据挖掘上,可能会出现错误

    2024年01月20日
    浏览(47)
  • GPT-SoVITS-WebUI可以中文声音克隆开源AI工具简介

    引言:         近年来,随着人工智能技术的不断发展,语音技术已经成为了热门领域。尽管已有不少技术实现了一定程度的成功,但传统语音合成技术的问题依然存在。传统方法对于训练数据的需求量大、效果受到声音质量和口音差异的影响。因此,在语音技术领域中

    2024年04月13日
    浏览(42)
  • Spark或Hive数仓生命周期管理

       在做数仓开发过程中,遇到一个问题就是随着数据量增大,存储空间增加惊人:hdfs的文件要存3份(可以修改副本份数),ods、dwd、dws、ads等各层都需要存储空间,指标计算过程如果内存不够又会缓冲在硬盘。而更严重的问题是:如果CDH依赖某个目录的存储空间严重不够

    2024年02月07日
    浏览(41)
  • PyTorch:Facebook推出的PyTorch是一个开源的机器学习框架,由Facebook AI Res

    作者:禅与计算机程序设计艺术 PyTorch是基于Python语言和C++底层库的开源深度学习框架。它可以运行在Linux、Windows、OSX平台上,支持多种编程语言,包括Python、C++、CUDA等。在过去的几年里,它迅速成为深度学习领域的主流工具。它具有以下优点: 强大的GPU加速能力:PyTorch可

    2024年02月08日
    浏览(43)
  • HIve数仓新零售项目ODS层的构建

    注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hive Flume等等~写的都是纯干货,各种顶会的论文解读,一起进步。 今天继续和大家分享一下HIve数

    2023年04月24日
    浏览(41)
  • CloudCanal x Hive 构建高效的实时数仓

    CloudCanal 最近对于全周期数据流动进行了初步探索,打通了 Hive 目标端的实时同步,为实时数仓的构建提供了支持,这篇文章简要做下分享。 基于临时表的增量合并方式 基于 HDFS 文件写入方式 临时表统一 Schema 任务级的临时表 Hive 目标端写入方式和 Doris 相似,需要在目标表

    2024年03月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包