大数据-数据仓库-Hive总结及性能优化

数仓任务优化 本文摘要:本文系统性地提出了数据模型优化方案,涵盖模型、逻辑、环境和调度四个维度。在模型优化方面,重点阐述字段精简、存储格式选择、分区策略和回溯优化等方法;逻辑优化包括执行顺序调整、倾斜处理和数据复用等技巧;环境优化涉及硬件资源配置和任务调度策略;调度优化强调任务并发控制。通过全链路优化思路,实现从上游数据源到下游应用的整体性能提升,同时兼顾存储成本和计算效率。 阅读详情

一、关于Hive

1.1 什么是Hive

Hive是构建在Hadoop之上的数据仓库软件。它提供类似sql的查询语句HiveQL对数据进行分析处理,Hive将HiveQL语句转换成一系列MapReduce作业并执行。
目前,Hive除了支持MapReduce计算引擎,还支持Spark和Tez这两种分布式计算引擎,常用于离线批处理。
http://hive.apache.org/

1.2 什么是数据仓库

数据仓库(Data Warehouse),是一个面向主题、集成的、随时间变化的,但信息本身相对稳定的数据集合,用于对管理决策过程的支持。

数据仓库架构图
https://www.jianshu.com/p/0b6414f92442

1.3 Hive的特点
  1. 可通过类SQL来分析大数据,避免了写MapReduce程序来分析数据;
  2. 数据存储在HDFS上,Hive本身不提供数据的存储功能;
  3. Hive将数据映射成数据库和一张张表,库和表的元数据信息一般存在关系型数据库上(如MySQL);
  4. 数据存储方面:可以存储很大的数据集,对数据完整性、格式要求并不严格;
  5. 数据处理方面:不适用于实时计算的场景,适用于离线分析。

二、Hive的体系结构

Hive的元数据:包括表的名字、列、分区、属性(内/外部表)以及表数据所在目录等。将元数据存储在数据库中(metastore),支持mysql、derby、oracle等数据库。
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用生成。
在这里插入图片描述
hive编译安装并修改元数据存储库为MySQL

三、Hive重要概念

3.1 外部表和内部表
内部表(managed table)
  • 默认创建的是内部表,即 create table xxx (xx xxx),存储位置在 hive.metastore.warehouse.dir 设置,默认位置为 /user/hive/warehouse
  • 导入数据的时候是将文件剪切到指定位置,即原有路径下文件将不再存在
  • 删除表时,数据和元数据都将被删除
外部表(external table)
  • 外部表可以在外部系统上,只要有访问权限即可
  • 外部表导入文件时不移动文件,仅仅是添加一个metadata
  • 删除外部表时元数据不会被删除
  • 分辨外部表、内部表可以用 DESCRIBE FORMATTED table_name 命令查看
  • 创建外部表命令添加一个external即可,即 create external table xxx (xxx)
  • 外部表指向的数据发生变化时会自动更新,不用特殊处理
3.2 分区表和桶表
分区(Partitioned)
  • 有时数据是有组织的,比如按时间/类型等分类,而查询数据的时候也经常只关心部分数据,比方说 我只想查询2017年8月8日,此时可以创建分区,查询具体某一天数据时,不需要扫描全部目录,所以会明显优化性能
  • 一个Hive表在HDFS上是有一个对应的目录来存储数据,普通表的数据直接存储在这个目录下,而分区表数据存储时,是再划分子目录来存储的
  • 创建分区:是在创建表时,使用 Partitioned by (列名1 格式1, 列名2 格式2…) 关键字定义的
  • 增加分区ALTER TABLE table_name ADD PARTITION (day='2018-08-08')
  • 删除分区ALTER TABLE table_name DROP IF EXISTS PARTITION (day='2018-08-08') 外部分区表使用alter table…drop partition语句删除分区,只会删除元数据,相应的目录和文件并不会删除;内部表使用该语句删除分区,既会删除元数据,也会删除相应目录和数据文件。
  • 动态分区和静态分区:主要区别在于是否指定分区目录,或由系统自己选择。

Hive分区表的分区操作

分桶(clustered)
  • 分桶是相对分区进行更细粒度的划分。分桶将整个数据内容按照某列属性的hash值进行区分,按照取模结果对数据分桶,如取模结果相同的数据记录存放到一个文件
  • 桶表也是一种用于优化查询而设计的表类型。创建桶表时,指定桶的个数、分桶的依据字段,hive就可以自动将数据分桶储存。查询时只需要遍历一个桶里的数据,或者遍历部分桶,这样就提高了查询效率

具体说明分桶:clustered by (user_id) sorted by (leads_id) into 10 buckets

  • clustered by是根据user_id 的值进行哈希后模除分桶个数,根据得到的结果,确定这行数据分入哪个桶中,这样的分法,可以确保相同user_id 的数据放入同一个桶中
  • sorted by 是指定以哪个字段进行排序,排序的好处是,在join操作时可获得较高的效率
  • into 10 buckets 是指定一共分10个桶
  • 在HDFS上存储时,一个桶存入一个文件中,这样根据user_id进行查询时,可以快速确定数据存在于哪个桶中,而只遍历一个桶可以提高查询效率
3.3 Hive文件格式
Hive文件存储格式包括以下几类:
  • TEXTFILE
  • SEQUENCEFILE
  • RCFILE
  • ORCFILE( 0.11以后出现)

其中,TEXTFILE为默认格式,导入数据时会直接将数据文件copy到hdfs上不进行处理;
其他三种格式的表不能直接从本地文件导入数据,数据要先导入到 TEXTFILE 格式的表中,然后再从表中用 insert 导入 SequenceFile,RCFile,ORCFile 表中。

3.4 列式存储和行式存储
Hive文件存储格式包括以下几类:

先来看一张表的存储格式:
在这里插入图片描述

行式存储:

在这里插入图片描述
优点:

  • 相关数据保存在一起,较符合面向对象的思维,一行数据就是一条记录
  • 便于进行insert/update操作

缺点:

  • 如果查询只涉及某几个列,他会把整行数据都读取处理,不能跳过不必要的列读取,在数据量较大时影响性能
  • 每行中,列的数据类型不一致,导致不容易获得一个较高的压缩比,即空间利用率不高
  • 不是所有的列都适合作为索引
记录大数据量写入Hive慢的解决过程 最近在做一个大数据类项目,用到了Hadoop Hive SparkStreaming kafka等技术,整体面很广,本片仅介绍在开发过程中遇到的大数据量写入遇到的写入特别慢的解决过程。 说明: 我之前没接触过Hive相关,所以可能有些地方不是很准确,或者是还有其它解决方案,欢迎大家指出以备完善。 场景: 现在有个场景:50W数据写入hive库,会使用哪种方案。我之前没接触过Hive相关知识,最开始的方法是将数据转换为SQL,使用jdbc直接insert到Hive里面。我做了个测试一晚上跑了不到30W,速度太 阅读详情

相关推荐

clickhouse跟hive的不同

虽然clickhouse可以是多台机器,因为占用内存,每台机器存储不同的数据,所以需要有一个视图,将三台机器的数据进行汇总,原始跟视图的创建语句如下 --创建 clickhouse , drop table dm.city_dim on cluster my_cluster; CREATE TABLE dm.city_dim on cluster my_cluster( city_id Int32 comment '城市ID', city_name String comment '城市名' ) E..

AiBigData的博客 7388

大数据面试通关手册 | Hive面试题之4万字基础调优面试小总结

点击上方蓝色字体,选择“设为星标”回复”资源“获取更多资源本文基本涵盖以下内容:一、基于Hadoop的数据仓库Hive基础知识二、HiveSQL语法三、Hive性能优化四、Hive性能优化...

微信搜:import_bigdata,大数据领域硬核原创作者 1204

利用大数据领域Hive实现数据仓库的构建

在当今数字化时代,企业和组织面临着海量数据的存储和处理需求。数据仓库作为一种集成化的数据管理解决方案,能够帮助企业整合、存储和分析各种来源的数据,为决策提供有力支持。Hive作为大数据领域中一款重要的工具,基于Hadoop平台,提供了类SQL的查询语言HQL,使得非专业的程序员也能方便地进行数据处理和分析。本文的目的在于详细阐述如何利用Hive来构建数据仓库,涵盖了从基本概念到实际项目应用的各个方面,范围包括Hive的核心原理、数据仓库的构建步骤、实际代码案例以及相关工具和资源的推荐等。

AI云原生与云计算技术学院 355

Hive 大数据性能调优

HiveHive是一种依赖于结构化数据的大数据。数据默认存储Hive 数据仓库中。为了将它存储在特定的位置,开发人员可以在创建时使用 location 标记设置位置。Hive 遵循同样的 SQL 概念,如行、列和模式。 在读取 Hadoop 文件系统数据或 Hive 数据时,大数据应用程序开发人员遇到了一个普遍的问题。数据是通过spark streaming、Nifi streaming作业、其他任何流或摄入程序写入 Hadoop 集群的。摄入作业将大量的小数据文件写入 Hadoop 集群。这

zjjcchina的博客 1109

hive的metastore问题汇总

当Spark任务无法获取足够资源时,因为任务无法继续进行,不能将元数据从Metastore返回给任务。这种情况下,如果Metastore的内存不断累积,可能会导致内存占用过高,进而影响系统的稳定性。spark集群提交的任务无法运行, 只申请到了dirver的资源;后,这些元数据暂存在Metastore中;metastore内存飙升降不下来;

盛源的博客 924

数据仓库-Hive

数据仓库-Hive 1. 数据仓库 1.1. 基本概念 底层用的是MapReduce 数据仓库是存数据的,企业的各种数据往里面存,主要目的是为了分析有效数据,后续会基于它产出供分析挖掘的数据,或者数据应用需要的数据,如企业的分析性报告和各类报等。 可以理解为:面向分析的存储系统。 1.2. 主要特征 数据仓库是面向主题的(Subject-Oriented )、集成的(Integrated)、非易失的(Non-Volatile)和时变的(Time-Variant )数据集合,用以支持管理决策。 1.2.

chenlujun98的博客 900

Hive系列之——Hive特性解析并与传统数据库对比

文章目录Hive入门详解及主要特点总结Hive概述Hive原理Hive的DDL语句:hive的DQL操作 Hive入门详解及主要特点总结 本文主要总结HIve自身的一些特点,并对其中的一些点和传统数据库做对比,能够更好的理解HiveHive详细入门介绍看下方链接,有原理,有案例,讲的很通俗移动。 链接易学教程——Hive入门详解 Hive概述 Hive是Hadoop上的数据仓库工具,处理的是结...

bingchenwurao的博客 1030

大数据-Hadoop学习链接

1.HDFS介绍:https://blog.csdn.net/RuiKe1400360107/article/details/107080084 2.MapReduce介绍:https://blog.csdn.net/RuiKe1400360107/article/details/107088881 3.MapReduce案例分析:https://blog.csdn.net/RuiKe1400360107/article/details/107098766

RuiKe的博客 335

Hive

尚硅谷大数据技术之Hive (作者:尚硅谷大数据研发部) 版本:V1.3 第1章 Hive入门 1.1 什么是Hive===》数据分析,不存东西,要与mysql区分 Hive:由Facebook开源用于解决海量结构化日志的数据统计。 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张,并提供类SQL查询功能。 本质是:将HQL转化成MapReduce程序 所有的MR模...

weixin_32229529的博客 537

Hive入门】Hive概述:大数据时代的数据仓库桥梁

大数据时代,Hive作为Apache顶级开源项目,成功架起了传统SQL与Hadoop分布式计算之间的桥梁。它允许数据分析师和数据工程师使用熟悉的SQL语法来查询和管理存储在Hadoop分布式文件系统(HDFS)中的海量数据。CAPEX高,许可费用贵。深度Hadoop生态集成。OPEX低,开源免费。

IT成长日记的博客 914

Hive数据仓

面向主题、集成、随时间变化、信息稳定的数据集合,用于支持管理决策。解决 MapReduce 学习成本高、复杂查询开发难的问题。源于 Facebook,用于海量社交数据管理和机器学习。类型:UDF(普通函数)、UDAF(聚合函数)、UDTF(生成函数)。实现步骤(UDF 为例):继承 org.apache.hadoop.hive.ql.exec.UDF 类。实现 evaluate () 方法(自定义参数和返回值)。打包 Jar 包,上传到 Hive 的 lib 目录。

2201_76001326的博客 1395

大数据面试题】(三)Hive 基础知识及优化总结

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 Metastore (hive元数据) Hive将元数据存储在数据库中,比如mysql 、derby。Hive中的元数据包括的名称,的列和分区及其属性,的数据所在的目录。 Hive数据存储在HDFS,大部分的查询...

云祁QI 2503

【硬刚大数据之面试篇】2021年从零到大数据专家面试篇之Hive

欢迎关注博客主页:https://blog.csdn.net/u013411339 欢迎点赞、收藏、留言 ,欢迎留言交流!本文由【王知无】原创,首发于 CSDN博客!本文首发CSDN论坛,未经过官方和本人允许,严禁转载! 本文是对《【硬刚大数据之学习路线篇】2021年从零到大数据专家的学习指南(全面升级版)》的面试部分补充。 硬刚大数据系列文章链接: 2021年从零到大数据专家的学习指南(全面升级版) 2021年从零到大数据专家面试篇之Hadoop/HDFS/Yarn篇 2.

微信搜:import_bigdata,大数据领域硬核原创作者 1910

大数据新视界 --大数据大厂之Hive大数据融合:构建强大数据仓库实战指南

本文深入介绍 Hive大数据融合构建强大数据仓库的实战指南。涵盖 Hive 简介、优势、安装配置、数据处理、性能优化及安全管理等内容,并通过互联网广告和物流行业案例分析,展示其实际应用。具有专业性、可操作性和参考价值。

【青云交】华为云云享专家 | 阿里云开发者社区专家博主 技术圈个人影响力前 9 | 博客之星 TOP12 CSDN 首位四榜(原力榜 / 作者周榜 / 领军人物 / 综合热榜)榜首,破平台纪录! 苏州地区全榜霸榜,感恩全网十多万粉丝同行! 3470

Hive大数据分析的核心工具

Hive 是一个基于 Hadoop 的数据仓库工具,旨在为大数据分析提供高效、易用的 SQL 查询接口。SQL 兼容:支持 HiveQL,与 SQL 语法高度兼容。分布式计算:基于 Hadoop 生态系统,支持大规模数据处理。数据存储:支持多种数据存储格式(如 ORC、Parquet)。扩展性:通过 UDF(用户自定义函数)和 UDAF(用户自定义聚合函数)扩展功能。Hive大数据分析领域的核心工具,通过其 SQL 兼容性、分布式计算能力和高效的数据存储格式,为大数据分析提供了强大的支持。

u011403205的博客 1031

大数据工程师面试题

大数据工程师面试题

木鱼时刻的专栏 1208

【Sqoop基础】Sqoop生态集成:与HDFS、Hive、HBase等组件的协同关系深度解析

Apache Sqoop(SQL-to-Hadoop)作为大数据生态系统中至关重要的数据迁移工具,在关系型数据库与Hadoop生态系统之间架起了高效的数据桥梁。随着企业数据量的爆炸式增长,传统ETL工具在处理海量数据时面临性能瓶颈,而Sqoop凭借其分布式架构和并行处理能力,成为大数据平台数据集成的事实标准。当执行导入操作时,Sqoop会将关系型数据库中的数据转换为HDFS上的文件存储。Sqoop作为大数据生态系统的关键组件,通过与HDFS、Hive、HBase的深度集成,构建了完整的数据管道解决方案。

IT成长日记的博客 2010

大数据全栈工程师学习路线

大数据存储和处理技术:掌握Hadoop生态圈技术如HDFS、MapReduce、Yarn等,熟悉Spark、Flink等大数据计算框架,学习列式存储技术如HBase、Cassandra等。机器学习和深度学习:了解机器学习和深度学习的基本概念和算法,学习常见的机器学习工具如Scikit-Learn、TensorFlow等。安全和性能优化:了解常见的大数据安全漏洞如SQL注入、XSS、CSRF等,学习HTTPS等安全协议,掌握性能优化的基本方法和工具。

m0_58171811的博客 575
上一篇: 大数据-Hadoop应用
下一篇: 大数据-数据仓库-数据倾斜
ckSpark
博客等级 码龄14年 273粉丝 46原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值