前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >《hive编程指南》读书笔记:模式设计

《hive编程指南》读书笔记:模式设计

作者头像
木野归郎
发布于 2023-02-25 10:49:11
发布于 2023-02-25 10:49:11
36000
代码可运行
举报
文章被收录于专栏:share ai happinessshare ai happiness
运行总次数:0
代码可运行

大家好,我是小轩

这几天看了《hive编程指南》的模式设计,整理下知识点

目录

  • 按天分区表
  • 关于分区
  • 唯一键和标准化
  • 同一份数据多种处理
  • 对于每个表的分区
  • 分桶表数据存储
  • 为表增加列
  • 使用列存储表
  • 总是使用压缩

一、按天分区表

按天划分表就是一种模式,每天一张表的方式在数据库领域是反模式的一种方式,按天划分的表建议使用分区表,hive通过where子句中的表达式来选择查询所需要的指定的分区,这样查询执行效率高。

二、关于分区

一个分区对应着一个包含有多个文件的文件夹,如果指定的表存在数百个分区,每天都会创建好几万个小文件,保持多年之后,就会超出NameNode对系统云数据信息的处理能力,因为HDFS namenode会将所有的文件系统的元数据信息加载到内存中,虽然每个文件只需要少量字节大小的元数据(大约150字节/文件)。

而且小文件容易导致处理时间长,MapReduce会将一个任务(job)转换成多个任务(task)。默认情况下,每个task都是一个新的jvm实例,jvm开启和销毁的时间中销毁可能会比实际处理数据的时间消耗要长。

分区有两种策略:

1、按时间范围进行分区。按照这个时间粒度,随着时间的推移,分区数量的增长是“均匀的”;

2、使用两个级别的分区并且使用不同的维度。如:第一个分区可能是按天(day)划分,二级分区可能通过州名(state)划分

然而有的州可能数据会多一些,就会导致map task处理数据时会出现不均匀情况,如果找不到好的、大小相对合适的分区方式,可以考虑“分桶表数据存储”

三、唯一键和标准化

hive没有主键或基于序列秘钥生成的自增键的概念,如果可以的话,应避免对非标准化数据进行连接(join)操作,复杂的数据类型,如array、map、struct,有助于实现在单行中存储一对多数据。

避免标准化的主要目的是为了最小化磁盘寻道,比如那些通常需要外键关系的情况。非标准化数据允许被扫描或写入到大的、连续的磁盘存储区域,从而优化磁盘驱动器的IO性能。但是非标准化数据可能导致数据重复,而且有更大的导致数据不一致的风险。

四、同一份数据多种处理

hive提供了一种独特的语法,可以从一个数据源产生多个数据聚合,无需每次聚合都要重新扫描一次

五、对于每个表的分区

很多的ETL处理过程会涉及到多个处理步骤,每个步骤可能会产生一个或多个临时表,这些表仅供下一个job使用,如果由于查询或者原始数据处理的某个步骤出现问题而导致需要对好几天的输入数据重跑ETL过程。

我们可以在整个过程使用分区,这样就不会存在同步问题,还可以允许用户对中间数据按日期进行比较。

但这种方法有个缺点就是需要管理中间表并删除旧分区。

六、分桶表数据存储

为了避免分区中数据不均的问题,可以用另一种数据分管的技术:分桶

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table weblog(user_id int, url string, source_id string)
partitioned by (dt string)
clustered by (user_id) into 96 buckets;

如果使用某个字段作为分桶字段,则字段值会根据用户指定的值进行哈希分发到桶中。但是,要将数据正确的插入到表的过程完全取决于用户自己!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
怎么使用分桶插入数据?
(1)为分桶设置正确的reducer个数
set hive.enforce.bucketing = true;2)插入数据
from raw_logs
insert overwrite table weblog
partition (dt='2009-02-25')
select user_id,url,source_ip where dt='2009-02-25';

分桶的优点: (1)因为桶数量是固定的,所以他没有数据波动;

(2)桶对抽样非常适合;

(3)分桶有利于执行高效的map-side join

七、为表增加列

为表增加字段,例子: alter table weblogs add columns (user_id string);

这种方式无法再已有字段的开始或者中间增加新字段。

八、使用列存储表

hive通常使用行式存储,不过hive也提供了一个列式SerDe来以混合列式格式存储信息。某些数据集使用列式存储是最优的,如某些列重复数据特别多时,使用列式存储会加快查询速度。

九、总是使用压缩

在大多数情况下,压缩可以使磁盘上存储的数据量变小,这样可以通过降低IO来提高查询执行速度。

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OnlyCoding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
技术干货 | Hive模式设计
过多使用分区可能导致非必须的Hadoop文件和文件夹,最终会超出NameNode对系统云数据信息的处理能力。 默认,每个task都是一个新的JVM实例,都需要开启和销毁的开销。对于小文件(小于一个块的大小),每个文件都会对应一个task。会导致JVM开启和销毁的时间中可能会比实际处理数据的时间消耗要长。 理想的分区方案部应该导致产生太多的分区和文件夹目录,并且每个目录下的文件应该足够大,应该是文件系统中块大小的若干倍。 不能够找到好的、大小相对合适的分区方式的话,可以考虑使用分桶表数据存储。 Hive没有主
加米谷大数据
2018/04/02
8490
技术干货 | Hive模式设计
Hive介绍与核心知识点
Facebook为了解决海量日志数据的分析而开发了Hive,后来开源给了Apache软件基金会。
高广超
2018/12/12
1.2K0
Hive提高查询效率的八条军规
大家好,我是一哥,今天分享一下Hive如何提升查询效率。Hive作为最常用的数仓计算引擎,是我们必备的技能,但是很多人只是会写Hql,并不会优化,也不知道如何提升查询效率,今天分享8条军规:
数据社
2021/09/23
1.2K0
Hive面试题持续更新【2023-07-07】
Hive是一个在Hadoop上构建的数据仓库基础架构,它提供了一种类似于SQL的查询语言,称为HiveQL,用于处理和分析大规模的结构化数据。Hive的体系架构主要包括以下几个组件:
火之高兴
2024/07/25
1320
Hive_
HiveSQL ->AST(抽象语法树) -> QB(查询块) ->OperatorTree(操作树)->优化后的操作树->mapreduce任务树->优化后的mapreduce任务树
挽风
2023/10/17
3080
Hive_
Hive个人笔记总结
①保证环境变量中有JAVA_HOME ②基于HADOOP工作,保证环境变量中有HADOOP_HOME ③在环境变量中配置HIVE_HOME,默认hive在启动时,会读取HIVE_HOME/conf中的配置文件
Java架构师必看
2021/05/14
2.7K0
hive基本使用
由于最近项目需要和大数据对接,需要了解一下数仓的基本知识,所以记录一下hive的基础原理和使用
leobhao
2022/06/28
8750
hive基本使用
看完了108份面试题,我为你总结出了这 10 个【Hive】高频考点(建议收藏)
之前听 CSDN 头牌博主 @沉默王二 说过一句话,我觉得十分在理:处在互联网时代,是一种幸福,因为各式各样的信息非常容易触达,如果掌握了信息筛选的能力,就真的是“运筹帷幄之中,决胜千里之外”。就像现在各行业都内卷不断,我们要从中破圈,只有想办法提升自己的竞争力!例如备战面试,广泛无脑地刷题只会消耗完你最后一丝精力,而多刷别人总结复盘记录下来的面经,有利于我们为下一次的“跨越”做好准备!
用户8612862
2021/05/13
1K0
看完了108份面试题,我为你总结出了这 10 个【Hive】高频考点(建议收藏)
大数据组件:Hive优化之配置参数的优化
Hive是大数据领域常用的组件之一,主要用于大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的一个点,因此掌握一些Hive调优是必不可少的一项技能。影响Hive效率的主要因素有数据倾斜、数据冗余、job的IO以及不同底层引擎配置情况和Hive本身参数和HiveSQL的执行等。本文主要从建表配置参数方面对Hive优化进行讲解。
袋鼠云数栈
2021/05/14
9630
大数据组件:Hive优化之配置参数的优化
达观数据文辉:Hadoop和Hive使用经验
近十年来,随着Hadoop生态系统的不断完善,Hadoop早已成为大数据事实上的行业标准之一。面对当今互联网产生的巨大的TB甚至PB级原始数据,利用基于Hadoop的数据仓库解决方案Hive早已是Ha
达观数据
2018/03/30
1.5K0
大数据面试杀招——Hive高频考点,就怕你都会!
上一篇文章介绍了3道常见的SQL笔试题,反响还算是不错。于是乎,接下来的几天,菌哥将每天为大家分享一些关于大数据面试的杀招,祝小伙伴们都能早日找到合适的工作~
大数据梦想家
2021/01/27
2.2K0
大数据面试杀招——Hive高频考点,就怕你都会!
3万字史诗级 Hive 性能调优(建议收藏)
Hive 作为大数据领域常用的数据仓库组件,在平时设计和查询的时候要特别注意效率 。影响 Hive 效率的几乎从不是数据量过大,而是数据倾斜、数据冗余、Job或I/O过多、MapReduce 分配不合理等等。 对Hive 的调优既包含 Hive 的建表设计方面,对 HiveHQL 语句本身的优化,也包含 Hive 配置参数 和 底层引擎 MapReduce 方面的调整 。
肉眼品世界
2022/06/15
4.6K0
3万字史诗级 Hive 性能调优(建议收藏)
「Hive进阶篇」万字长文超详述hive企业级优化
原创推文链接:https://mp.weixin.qq.com/s/GHwYVEwAS8WgNBLb14NC4A
大数据阶梯之路
2022/10/01
1.3K0
「Hive进阶篇」万字长文超详述hive企业级优化
Hive 高频面试题 30 题
来源:大数据技术与架构本文约6000字,建议阅读10分钟本文收集了Hive面试中的高频考题。 如果你是数据开发、数据研发、或数据分析师,那么这篇文章将对你非常有用。记得转发收藏哦。 一、Hive面试题 1、hive内部表和外部表的区别 未被external修饰的是内部表,被external修饰的为外部表。 区别: 内部表数据由Hive自身管理,外部表数据由HDFS管理; 内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),
数据派THU
2022/04/06
1.8K0
Hive 高频面试题 30 题
数据分析工具篇——HQL中DDL操作
1.1) CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常。
数据森麟
2021/03/09
6360
数据分析工具篇——HQL中DDL操作
大数据技术之_32_大数据面试题_01_Hive 基本面试 + Hive 数据分析面试 + Flume + Kafka 面试
一、Hive 基本面试1、什么是 metastore2、metastore 安装方式有什么区别3、什么是 Managed Table 跟 External Table?4、什么时候使用 Managed Table 跟 External Table?5、hive 有哪些复合数据类型?6、hive 分区有什么好处?7、hive 分区跟分桶的区别8、hive 如何动态分区9、map join 优化手段10、如何创建 bucket 表?11、hive 有哪些 file formats12、hive 最优的 file formats 是什么?13、hive 传参14、order by 和 sort by 的区别15、hive 跟 hbase 的区别二、Hive 数据分析面试1、分组 TopN,选出今年每个学校、每个年级、分数前三的科目2、今年,北航,每个班级,每科的分数,及分数上下浮动 2 分的总和3、where 与 having:今年,清华 1 年级,总成绩大于 200 分的学生以及学生数三、Flume + Kafka 面试1、flume 如何保证数据的可靠性?2、kafka 数据丢失问题,及如何保证?3、kafka 工作流程原理4、kafka 保证消息顺序5、zero copy 原理及如何使用?6、spark Join 常见分类以及基本实现机制
黑泽君
2019/06/19
1.8K0
大数据技术之_32_大数据面试题_01_Hive 基本面试 + Hive 数据分析面试 + Flume + Kafka 面试
最新Hive/Hadoop高频面试点小集合
如果其中有一张表为小表,直接使用map端join的方式(map端加载小表)进行聚合。
王知无-import_bigdata
2021/04/21
1.1K0
最新Hive/Hadoop高频面试点小集合
精选Hive高频面试题11道,附答案详细解析(好文收藏)
Hive支持索引(3.0版本之前),但是Hive的索引与关系型数据库中的索引并不相同,比如,Hive不支持主键或者外键。并且Hive索引提供的功能很有限,效率也并不高,因此Hive索引很少使用。
五分钟学大数据
2021/05/27
1.1K0
工作常用之Hive 调优【三】 Explain 查看执行计划及建表优化
create table bigtable(id bigint, t bigint, uid string, keyword string,
Maynor
2022/10/04
1.7K0
工作常用之Hive 调优【三】 Explain 查看执行计划及建表优化
拿美团offer,Hive进阶篇
https://blog.csdn.net/weixin_38754799/article/details/104306898
木野归郎
2020/06/15
7700
拿美团offer,Hive进阶篇
推荐阅读
相关推荐
技术干货 | Hive模式设计
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验