Spark 中的分桶分化

news2024/11/14 18:20:54

Spark 中的分桶分化

Bucketing是 Spark 和 Hive 中用于优化任务性能的一种技术。在分桶桶(集群列)中确定数据分区并防止数据混洗。根据一个或多个分桶列的值,将数据分配给预定义数量的桶。

分桶有两个主要好处:

  • 改进的查询性能:在连接时,我们可以在相同的分桶列上明确指定桶的数量。由于每个存储桶包含相同大小的数据,因此映射端连接的性能优于存储桶表上的非存储桶表。在 map-side join 中,左侧表存储桶将准确知道右侧存储桶包含的数据集,以便以结构良好的格式执行表联接。
  • 改进的采样:数据已经被分成更小的块,因此采样得到了改进。
  • 加快连接操作的性能与尽量少的性能消耗:连接操作只需要定位各个桶,非整个数据集

何时使用桶列

  • 表大小很大(> 200G)。
  • 该表具有高基数列,这些列经常用作过滤和/或连接键。
  • 中等大小的表,但主要用于连接一个巨大的桶化表,桶化它仍然是有益的
  • 排序合并连接(没有存储桶)由于随机播放而不是由于数据倾斜而变慢

如何配置存储桶列

  • 选择高基数列作为桶列。
  • 尽量避免数据倾斜。
  • 至少 500 个桶(因为小桶数会导致并行执行不佳)。
  • 排序桶是可选的,但强烈推荐。

如何在 Spark 中创建数据桶

  • 下面是在 SparkAPI 中创建存储桶的示例。bucketBy是在 spark 中创建存储桶的函数。我们需要将桶的信息保存在某处,所以这里需要使用saveAsTable来保存桶表的元数据信息。

n 是要创建的桶数

df.write.mode(“save_mode”)
.option(“path”, “s3 path/hdfs path”) \
*.bucketBy(n, ‘col1’, ‘col2’…) *
*.sortBy(‘col1’, ’ col2’) *
.saveAsTable(‘table_name’, format=‘parquet’)
df = spark.table(‘table_name’)

CREATE TABLE
  `temp`.`dm_log_app_activityinfo_user` (`log_id` STRING, `mid` STRING,
  `app_name` STRING, `start_time` STRING, `user_name` STRING, `is_new_visitor`
  INT, `user_class` STRING, `user_group` STRING, `user_id` STRING, `user_label`
  STRING, `session_id` STRING, `dt` STRING)
  USING orc
  OPTIONS (
  `serialization.format` '1'
  )
  PARTITIONED BY (dt)
  CLUSTERED BY (log_id)
  SORTED BY (log_id)
  INTO 4000 BUCKETS;
  • 在上面的示例中,我们使用了 bucketBy 和 sortBy,因为在某些情况下我们有多个连接键,并且希望将整数键放在 bucketBy 中,将字符串键放在 sortBy 中。当我们做数据桶时,sortBy 是可选的。
  • 可以根据数据大小和我们对数据运行的查询来决定存储桶大小的数量。通常,每个存储桶可能更喜欢 100 MB 到 200 MB。
  • 存储桶表将使用以下命名约定将表保存在路径中。

如何在 Spark 上启用分桶?

默认情况下启用分桶。
或者,您可以在 Spark Shell 或属性文件中设置以下属性。

设置 spark.sql.sources.bucketing.enabled=true

Spark 中对表进行分桶的优点

  • 优化表。
  • 使用预洗牌分桶表时优化联接。
  • 当您在分桶列上定义谓词时,启用更有效的查询。
  • 优化了对表数据的访问。_在桶列上使用 WHERE 条件时,您将最小化给定查询的表扫描。
  • 将数据均匀分布在不同的存储桶中,从而实现对表数据的最佳访问。

转换列表

以下转换将受益于分桶:

  • 加入
  • 清楚的
  • 通过…分组
  • 减少

Spark Bucket 的限制

Spark Bucketing 有其自身的局限性,我们在创建分桶表以及将它们连接在一起时需要非常小心。

为了优化连接并在 Spark 中使用分桶,我们需要确保以下几点:

  1. 两个表都使用相同数量的存储桶进行存储 如果加入表中的桶号不同,则不会应用预洗牌。
  2. 两个表都存储在同一列上以进行连接 由于数据是根据给定的分桶列进行分区的,如果我们不使用同一列进行连接,那么您就没有使用分桶,它会影响性能。

Spark 分桶与 Hive 分桶有何不同?

在 Hive 中,我们需要根据需要创建文件数量的 reducer。

而在 Spark 分桶中,我们没有减速器。因此,它最终会根据任务的数量创建 n 个文件。

分桶表实践

将增量大表与存量历史大表(rows≈百亿)的full join去重过程优化,通过历史表分桶方式避免 TB级别表的shuffle过程,相同过程中 图2修改成了历史数据分桶表 避免自身exchange过程,
相同task数测试性能将200分钟压缩至50分钟左右

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1616802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jvm(JVM快速入门、stack栈、堆、GC垃圾回收、Arthas)

文章目录 1. JVM快速入门1.1. 结构图1.2. 类加载器ClassLoader1.3. 执行引擎Execution Engine1.4. 本地接口Native Interface1.5. Native Method Stack1.6. PC寄存器(程序计数器)1.7. Method Area方法区 2. stack栈3. 堆3.1. 堆体系概述3.1.1. 新生区3.1.2. 老年代3.1.3. 永久代…

2024统计建模:大数据与人工智能时代的统计研究

文章目录 题目解读你需要具备的知识点课题推荐视频分析 题目解读 主要做的是“大数据”与“人工智能”。 其中“大数据”所涉及的的第一个就是大量的数据,数据从哪里来?拿到数据后,我们需要做基本的数据分析,如何对大量的数据进…

【UnityShader]使用Shader将图片进行水平/竖直镜像翻转

一、需求 在开发时从很多地方取出来的图片可能并不是图像原本的模样,可能是被水平或者竖直镜像翻转后的图形,这时候我们要将图片再次镜像回来,只需要一个小小的Shader即可。 二、实现 下面是镜像翻转Shader的思路: 一般来说我们在顶点着色…

C++奇迹之旅:从0开始实现日期时间计算器

文章目录 📝前言🌠 头文件Date.h🌉日期计算函数🌠前后置🌉前后置-- 🌠两对象日期相减🌉自定义流输入和输出 🌉 代码🌉 头文件Date.h🌠Date.cpp🌉 …

ECALL介绍

一、ECALL关键词介绍 ECALL:Emergency Call,紧急呼叫 PSTN:Public Switched Telephone Network MSD:Minimum Set of Data PLMN: Public Land Mobile Network PASP:Public Safety Answering Point IVS: in-vehicle system(车载系统)是内部的调制解调器,以全双工的方式…

【漏洞复现】手机卡号推广商城 login.php接口处存在 SQL 注入漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

STM32应用开发教程进阶--UART串口重定向(printf)

实现目标 1、掌握STM32 HAL库的串口重定向 2、具体目标:1、实现printf “打印”各种常用的类型的数据变量 一、串口“打印” UART串口通信协议是我们常用的通信协议(UART、I2C、SPI等)之一,全称叫做通用异步收发传输器&#xf…

卷积神经网络CNN入门

卷积神经网络应用领域 因为卷积神经网络主要应用场景就是计算机视觉任务,因此有必要简单介绍一下CV领域发展情况: 可以发现,在 ImageNet 图像数据集中分析图像的错误率十年间已经被深度学习给降低到了比人类(HuMan)识…

阿里云短信渠道专属优惠价格,全网最便宜入口

阿里云短信渠道专属优惠,1000条短信30元、2000条短信优惠价格60元、3000元短信套餐包价格90元、5000短信优惠150元,活动页面 aliyunbaike.com/go/duanxin 链接打开如下图: 阿里云短信渠道专属优惠价格 阿里云短信支持国内快速发送验证码、通…

算法——BFS算法

1. 什么是BFS算法 BFS(广度优先搜索,Breadth-First Search)算法是一种用于图和树等数据结构中进行搜索的基本算法。它从指定的起始节点开始,逐层地向外扩展搜索,直到找到目标节点或遍历完整个图。 BFS算法的基本思想是…

R可视化:桑基图展示数据层流动

介绍 以桑基图形式展示数据分布情况 加载R包 knitr::opts_chunk$set(message = FALSE, warning = FALSE) library(tidyverse) library(ggalluvial)# rm(list = ls()) options(stringsAsFactors = F) options(future.globals.maxSize = 10000 * 1024^2) 导入数据 metadata…

【Qt 学习笔记】Qt常用控件 | 显示类控件 | Label的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 显示类控件 | Label的使用及说明 文章编号:Q…

CentOS 系统的优缺点

CentOS (社区企业操作系统的缩写)是一个基于红帽企业 Linux (RHEL)的免费开源发行版, 旨在为服务器和工作站提供稳定、可靠和安全的平台。 不应将其与CentOS Stream 混淆,后者是即将发布的 RHEL 版本的上游开发平台。 CentOS Li…

虚拟化及Docker基础

一、虚拟化 1.1 云端 1.2 云计算服务模式分层 1.3 虚拟化架构 1.3.1 寄居架构 1.3.2 原生架构 1.4 虚拟化产品 1.4.1 仿真虚拟化产品(对系统硬件没有要求,性能最低) 1.4.2 半虚拟化 (虚拟机可以使用真机物理机&#xff09…

垃圾渗滤液如何有效处理

垃圾渗滤液,通常称为垃圾填埋场的渗滤液,是一种复杂的高浓度有机废水,含有多种有毒有害物质。有效处理垃圾渗滤液对环境保护至关重要。这里是一些常见且有效的处理方法: ### 预处理 ##### 1. 调节池 - **pH调整**:通过…

【招聘】数通,云计算岗位持续招聘中

北京、南京、成都、贵州、杭州、深圳、上海 云计算HCS 薪资:8-25k 岗位描述: 1、制定网络安全技术规范及工作标准、负责全国工程团队技术培训及人员培养 2、全国项目技术支持、协助开展广域网的设计、规划、实施及方案交流工作 3、承担公司中、大型集成项目管理,负…

7、线上系统部署时如何设置JVM内存大小?

7.1、前文回顾 让我们先来回顾一下我们已经学到的知识。现在,大家应该都明白了,在我们日常编写代码时,所创建的对象通常是首先在新生代区域进行分配的。然后,当一些方法执行完毕后,大部分位于新生代区域中的对象将不再被引用,从而变成垃圾对象。如下图所示: 随着程序…

Spring MVC后续

目录 1 响应 1.1 返回静态页面 1.2 返回数据ResponseBody 1.3 返回HTML代码片段 1.4 返回JSON 1.5 设置状态码 1 响应 1.1 返回静态页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>index页面&…

项目管理中,项目团队如何高效的协作与沟通?

目 录 一、项目团队高效的协作与沟通&#xff0c;可以通过以下几个方面来实现&#xff1a; 二、如何在项目团队中明确和共享愿景以提高协作效率&#xff1f; 三、有效的沟通策略在项目管理中的应用案例有哪些&#xff1f; 四、建立哪些具体的沟通机制可以提升团队协作效率…

创享大会分会场—“职棱起来”《职业生涯画布工作坊》

会议主题&#xff1a;创享大会分会场—“职棱起来”《职业生涯画布工作坊》 会议时间&#xff1a;5月25日&#xff08;周六&#xff09;13:30—16:30 会议地点&#xff1a;北京希尔顿欢朋酒店&#xff08;大红门&#xff09; 特邀嘉宾&#xff1a;姚冬&#xff08;冬哥&…