spark3.x 生产调优笔记

Apache Spark实战指南:从核心概念到生产环境调优 在大数据处理领域,分布式计算框架是处理海量数据的核心技术。其核心原理在于将计算任务分解并分发到多台机器上并行执行,从而突破单机性能瓶颈。这种技术价值在于能够高效处理TB甚至PB级的数据,广泛应用于数据分析、机器学习、实时流处理等场景。Apache Spark作为其中的杰出代表,凭借其内存计算和DAG调度引擎,显著提升了处理性能。本文聚焦于Spark的实战应用,深入探讨RDD、DataFrame等核心抽象,并结合性能调优与数据倾斜等常见工程挑战,提供从环境搭建到生产部署的完整解决方案。 阅读详情
1 spark sql写入mysql非常慢
  • 有这样一个业务场景:需要将通过Spark处理之后的数据写入MySQL,并在在网页端进行可视化输出。Spark处理之后有大概40万条数据,写入MySQL却要耗费将近30分钟,这也太慢了!
  • 后来翻看了Spark向JDBC数据源写数据的那部分源码,虽然源码中的实现使用的确实是PreparedStatement 的addBatch()方法和executeBatch()方法,但是我们再去翻看executeBatch()方法的实现后发现,它并不是每次执行一批插入,而是循环的去执行每条insert插入语句,这就造成只插入一条数据,而不是一批数据,导致大多数的时间都耗费在了与数据库的交互连接上了
  • 解决方法:
jdbc.saas.url=jdbc:mysql://172.25.1.*/saas-hospital?characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true
2 spark sql jdbc并发分区
  • jdbcDF.rdd.partitions.size # 结果返回 1。该操作的并发度为1,你所有的数据都会在一个partition中进行操作,意味着无论你给的资源有多少,只有一个task会执行任务,执行效率可想而之,并且在稍微大点的表中进行操作分分钟就会OOM。
def jdbc(
  url: String,
  table: String,
  columnName: String,    # 根据该字段分区,需要为整形,比如id等
  lowerBound: Long,      # 分区的下界
  upperBound: Long,      # 分区的上界
  numPartitions: Int,    # 分区的个数
  connectionProperties: Properties): DataFrame

#指定字段区间分区
val predicates =
    Array(
      "2015-09-16" -> "2015-09-30",
      "2015-10-01" -> "2015-10-15",
      "2015-10-16" -> "2015-10-31",
      "2015-11-01" -> "2015-11-14",
      "2015-11-15" -> "2015-11-30",
      "2015-12-01" -> "2015-12-15"
    ).map {
      case (start, end) =>
        s"cast(modified_time as date) >= date '$start' " + s"AND cast(modified_time as date) <= date '$end'"
    }

// 取得该表数据
val jdbcDF = sqlContext.read.jdbc(url,tableName,predicates,prop)
3 SparkSQL与Parquet格式兼容性
  • spark.sql.parquet.writeLegacyFormat 默认是false。如果设置为true 数据会以spark 1.4和更早的版本的格式写入。比如,decimal类型的值会被以apache parquet的fixed-length byte array格式写出,该格式是其他系统例如hive,impala等使用的。如果是false,会使用parquet的新版格式。例如,decimals会以int-based格式写出。
4 RDD复用并序列化存储
  • 必须对多次使用的 RDD 进行持久化,通过持久化将公共 RDD 的数据缓存到内存/磁盘中,之后对于公共 RDD 的计算都会从内存/磁盘中直接获取 RDD 数据
  • RDD 的持久化是可以进行序列化的,当内存无法将 RDD 的数据完整的进行存放的时候,可以考虑使用序列化的方式减小数据体积,将数据完整存储在内存中
    public static final StorageLevel MEMORY_ONLY_SER_2 
    public static final StorageLevel MEMORY_AND_DISK_SER_2 
5 RDD合理设置并行度
  • Spark 官方推荐,task 数量应该设置为 Spark 作业总 CPU core 数量的 2~3 倍。之所以没有推荐 task 数量与 CPU core 总数相等,是因为 task 的执行时间不同,有的 task 执行速度快而有的 task 执行速度慢,如果 task 数量与 CPU core 总数相等,那么执行快的 task 执行完成后,会出现 CPU core 空闲的情况。如果 task 数量设置为 CPU core 总数的 2~3 倍,那么一个task 执行完毕后,CPU core 会立刻执行下一个 task,降低了资源的浪费,同时提升了 Spark作业运行的效率。
val conf = new SparkConf().set("spark.default.parallelism", "500")
6 广播大变量
  • 默认情况下,task 中的算子中如果使用了外部的变量,每个 task 都会获取一份变量的复本,这就造成了内存的极大消耗。一方面,如果后续对 RDD 进行持久化,可能就无法将 RDD数据存入内存,只能写入磁盘,磁盘 IO 将会严重消耗性能;另一方面,task 在创建对象的时候,也许会发现堆内存无法存放新创建的对象,这就会导致频繁的 GC,GC 会导致工作线程停止,进而导致 Spark 暂停工作一段时间,严重影响 Spark 性能。
7 Kryo 序列化
  • Kryo 序列化机制比 Java 序列化机制性能提高 10 倍左右,Spark 之所以没有默认使用Kryo 作为序列化类库,是因为它不支持所有对象的序列化,同时 Kryo 需要用户在使用前注册需要序列化的类型,不够方便,但从 Spark 2.0.0 版本开始,简单类型、简单类型数组、字符串类型的 Shuffling RDDs 已经默认使用 Kryo 序列化方式了
public class MyKryoRegistrator implements KryoRegistrator {
	 @Override
	 public void registerClasses(Kryo kryo){
	 	kryo.register(StartupReportLogs.class);
	 }
 }

//创建 SparkConf 对象
val conf = new SparkConf().setMaster(…).setAppName(…)
//使用 Kryo 序列化库,如果要使用 Java 序列化库,需要把该行屏蔽掉
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); 
//在 Kryo 序列化库中注册自定义的类集合,如果要使用 Java 序列化库,需要把该行屏蔽掉
conf.set("spark.kryo.registrator", "MyKryoRegistrator");
8 foreachPartition 优化数据库操作
  • 在生产环境中,通常使用 foreachPartition 算子来完成数据库的写入,通过 foreachPartition算子的特性,可以优化写数据库的性能。
  • 对于我们写的 function 函数,一次处理一整个分区的数据;
  • 对于一个分区内的数据,创建唯一的数据库连接;
  • 只需要向数据库发送一次 SQL 语句和多组参数;
9 repartition 解决 SparkSQL 低并行度问题
  • Spark SQL 的并行度不允许用户自己指定,Spark SQL 自己会默认根据 hive 表对应的HDFS 文件的 split 个数自动设置 Spark SQL 所在的那个 stage 的并行度,用户自己通spark.default.parallelism 参数指定的并行度,只会在没 Spark SQL 的 stage 中生效。
  • Spark SQL 这一步的并行度和 task 数量肯定是没有办法去改变了,但是,对于Spark SQL 查询出来的 RDD,立即使用 repartition 算子,去重新进行分区,这样可以重新分区为多个 partition,从 repartition 之后的 RDD 操作,由于不再设计 Spark SQL,因此 stage 的并行度就会等于你手动设置的值,这样就避免了 Spark SQL 所在的 stage 只能用少量的 task 去处理大量数据并执行复杂的算法逻辑。
    spark sql重分区
10 reduceByKey 预聚合
  • 本地聚合后,在 map 端的数据量变少,减少了磁盘 IO,也减少了对磁盘空间的占用;
  • 本地聚合后,下一个 stage 拉取的数据量变少,减少了网络传输的数据量;
  • 本地聚合后,在 reduce 端进行数据缓存的内存占用减少;
  • 本地聚合后,在 reduce 端进行聚合的数据量减少。
  • 基于 reduceByKey 的本地聚合特征,我们应该考虑使用 reduceByKey 代替其他的 shuffle 算
    子,例如 groupByKey。
11 故障:shuffle file not found
  • 原因:Shuffle 操作中,后面 stage 的 task 想要去上一个 stage 的task 所在的 Executor 拉取数据,结果对方正在执行 GC,执行 GC 会导致 Executor 内所有的工作现场全部停止,比如 BlockManager、基于 netty 的网络通信等,这就会导致后面的 task拉取数据拉取了半天都没有拉取到,就会报出 shuffle file not found 的错误,而第二次再次执行就不会再出现这种错误。
# 调整 reduce 端拉取数据重试次数和 reduce 端拉取数据时间间隔这两个参数
val conf = new SparkConf()
 .set("spark.shuffle.io.maxRetries", "60")
 .set("spark.shuffle.io.retryWait", "60s")
12 故障:OOM
  • Shuffle map端:map 端缓冲的默认配置是 32KB,如果每个 task 处理 640KB 的数据,那么会发生 640/32 = 20 次溢写,如果每个 task 处理 64000KB 的数据,机会发生 64000/32=2000 此溢写,这对于性能的影响是非常严重的。
val conf = new SparkConf().set("spark.shuffle.file.buffer", "64")
  • shuffle reduce端: reduce task 的 buffer 缓冲区大小决定了 reduce task 每次能够缓冲的数据量,也就是每次能够拉取的数据量。reduce 端数据拉取缓冲区的大小可以通过 park.reducer.maxSizeInFlight 参数进行设置,默认为 48MB
val conf = new SparkConf().set("spark.reducer.maxSizeInFlight", "96")
13 Executor 堆外内存故障:OOM与task lost
  • Spark 作业处理的数据量非常大,达到几亿的数据量,此时运行 Spark作业会时不时地报错,例如 shuffle output file cannot find,executor lost,task lost,out of memory等,这可能是 Executor 的堆外内存不太够用,导致 Executor 在运行的过程中内存溢出。
  • Executor 的堆外内存主要用于程序的共享库、Perm Space、 线程 Stack 和一些 Memory mapping 等, 或者类 C 方式 allocate object。
  • stage 的 task 在运行的时候,可能要从一些 Executor 中去拉取 shuffle map output 文件,但是 Executor 可能已经由于内存溢出挂掉了,其关联的 BlockManager 也没有了,这就可能会报出 shuffle output file cannot find,executor lost,task lost,out of memory 等错误
# Executor 堆外内存的配置需要在 spark-submit :
--conf spark.yarn.executor.memoryOverhead=2048
14 spark数据倾斜

1. 数据倾斜的表现

  • Spark 作业的大部分 task 都执行迅速,只有有限的几个 task 执行的非常慢,此时可能出现了数据倾斜,作业可以运行,但是运行得非常慢;
  • Spark 作业的大部分 task 都执行迅速,但是有的 task 在运行过程中会突然报出 OOM,反复执行几次都在某一个 task 报出 OOM 错误,此时可能出现了数据倾斜,作业无法正常运行。

2. 定位数据倾斜问题

  • 查阅代码中的 shuffle 算子,例如 reduceByKey、countByKey、groupByKey、join 等算子,根据代码逻辑判断此处是否会出现数据倾斜;
  • 查看 Spark 作业的 log 文件,log 文件对于错误的记录会精确到代码的某一行,可以根据异常定位到的代码位置来明确错误发生在第几个 stage,对应的 shuffle 算子是哪一个;

3. 解决方法1 - 过滤产生数据倾斜的key

  • 在 Spark 作业中允许丢弃某些数据,那么可以考虑将可能导致数据倾斜的 key 进行过滤,滤除可能导致数据倾斜的 key 对应的数据

4. 解决方法2 - 聚合原始数据

  • 如果 Spark 作业的数据来源于 Hive 表,那么可以先在 Hive 表中对数据进行聚合,例如按照 key 进行分组,将同一 key 对应的所有 value 用一种特殊的格式拼接到一个字符串里去,一个 key 就只有一条数据了;之后,对一个 key 的所有 value 进行处理时,只需要进行 map 操作即可,无需再进行任何的 shuffle 操作。通过上述方式就避免了执行 shuffle 操作,也就不可能会发生任何的数据倾斜问题。

5. 解决方法3 - 提高 shuffle 操作中的 reduce 并行度

  • 在大部分的 shuffle 算子中,都可以传入一个并行度的设置参数,比如 reduceByKey(500),这个参数会决定 shuffle 过程中 reduce 端的并行度,在进行 shuffle 操作的时候,就会对应着创建指定数量的 reduce task。对于 Spark SQL 中的 shuffle 类语句,比如 group by、join 等,需要设置一个参数,即 spark.sql.shuffle.partitions,该参数代表了 shuffle read task 的并行度,该值默认是 200,对于很多场景来说都有点过小。

6. 解决方法4 - 聚合算子:使用随机 key 实现双重聚合

  • 首先,通过 map 算子给每个数据的 key 添加随机数前缀,对 key 进行打散,将原先一样的 key 变成不一样的 key,然后进行第一次聚合,这样就可以让原本被一个 task 处理的数据分散到多个 task 上去做局部聚合;随后,去除掉每个 key 的前缀,再次进行聚合。

7. 解决方法5 - join算子:将 reduce join 转换为 map join

  • 将较小 RDD 中的数据直接通过 collect 算子拉取到 Driver 端的内存中来,然后对其创建一个 Broadcast 变量;接着对另外一个 RDD 执行 map 类算子,在算子函数内,从 Broadcast 变量中获取较小 RDD 的全量数据,与当前 RDD 的每一条数据按照连接 key 进行比对,如果连接 key 相同的话,那么就将两个 RDD 的数据用你需要的方式连接起来。

8. 解决方法6 - join算子:sample 采样对倾斜 key 单独进行 join

  • 当数据量非常大时,可以考虑使用 sample 采样获取 10%的数据,然后分析这 10%的数据中哪个 key 可能会导致数据倾斜,然后将这个 key 对应的数据单独提取出来。

9. 解决方法7 - join算子:使用随机数扩容进行 join

  • 我们会将原先一样的 key 通过附加随机前缀变成不一样的 key,然后就可以将这些处理后的“不同 key”分散到多个 task 中去处理,而不是让一个 task 处理大量的相同 key。这一种方案是针对有大量倾斜 key 的情况,没法将部分 key 拆分出来进行单独处理,需要对整个RDD 进行数据扩容,对内存资源要求很高。
Spark3 AQE实战:从原理到调优,解锁性能提升新姿势 本文深入解析Spark3 AQE(Adaptive Query Execution)的核心原理与实战调优技巧,帮助开发者解锁性能提升新姿势。通过动态合并分区、Join策略切换和数据倾斜优化三大机制,显著提升集群资源利用率和作业执行效率。文章还提供了生产环境配置建议和常见问题排查指南,助力大数据工程师高效应对分布式计算挑战。 阅读详情

相关推荐

Spark调优手册:解决OOM和性能瓶颈的终极方案

Spark作为大数据处理领域的“瑞士军刀”,广泛应用于ETL、实时计算、机器学习等场景。:任务运行中突然崩溃,日志提示“Executor lost”或“Java heap space”;性能瓶颈:任务耗时远超预期,CPU/内存资源利用率低,或Shuffle阶段“卡脖子”。本文聚焦这两个核心问题,覆盖Spark 2.x/3.x版本,适用于离线批处理与实时流计算场景。Spark核心概念与内存模型;OOM的5大常见原因与解决方案;性能瓶颈的4类典型场景与优化策略;

AI 原生应用开发的博客 1104

[3.0.1]性能调优之调节并行度

参考中华石杉 DT大数据梦工厂系列场景什么是并行度、如何调节并行度、并行度对性能有怎样的影响以及并行度调节成多大合适?分析 并行度 Snail理解的并行度是指spark集群能同时并发处理的task数量,在数值上等于集群的总core的数量,其值可以在编写应用程序的时候指定:val conf = new SparkConf() conf.setAppName("my first spark

Memory of Mr.Snail 981

HBase与Spark集成实战:RDD_DF读写HBase,性能调优案例

环境搭建:HBase集群与Spark集群的兼容性配置、依赖管理;基础读写:基于RDD和DataFrame(DF)读写HBase的完整代码实现,包括表结构设计、数据映射、API调用;性能调优:通过3个真实案例(写入延迟优化、读取吞吐量提升、高并发场景调优),详解调优方法论与参数配置;避坑指南:解决版本冲突、region热点、数据倾斜等常见问题。本文从实战出发,讲解了Spark与HBase集成的全流程。

2501_92132293的博客 1046

Spark 多个Stage执行是串行执行的么?

作者:祝威廉 在做内部培训的时候,我讲了这么一句: 一个Job里的Stage都是串行的,前一个Stage完成后下一个Stage才会进行。 显然上面的话是不严谨的。 看如下的代码: 这里的话,我们构建了两个输入(input1,input2),input2带有一个reduceByKey,所以会产生一次Shuffle,接着进行Join,会产生第二次Shuffle(值得注意的是,join 不一定产生新的Stage,我通过强制变更join后的分区数让其...

qq_32445015的博客 1129

STM32F407用FSMC+DMA驱动LVGL,3.5寸屏流畅度翻倍实战(附CubeMX配置避坑)

本文详细介绍了如何在STM32F407上通过FSMC+DMA驱动LVGL,显著提升3.5寸屏的显示流畅度。从FSMC与DMA的配置原理到LVGL驱动层适配,提供了完整的优化方案和实测数据,帮助开发者解决界面卡顿问题,实现流畅度翻倍的效果。

weixin_30872499的博客 559

Xilinx FPGA MultiBoot实战:7Series与UltraScale的SPI Fallback配置详解

本文深入解析了Xilinx FPGA的MultiBoot(多启动)与Fallback(回退)功能,针对7系列与UltraScale/UltraScale+系列,提供了从约束文件编写、看门狗集成到镜像烧录的完整实战配置指南。文章重点对比了两个系列在SPI Fallback配置上的关键差异与注意事项,旨在帮助工程师构建高可靠、永不宕机的FPGA系统。

weixin_29197051的博客 547

Spark_日期参数解析参数-spark.sql.legacy.timeParserPolicy

在Spark 3.0之前的版本中,日期和时间解析使用java.text.SimpleDateFormat,它在解析某些日期和时间格式时可能较为宽松。例如,它可能允许日期字符串中的月份部分超过12,或日期部分超过31,并尝试自动调整。如果你的代码中有日期和时间解析,并且你升级到了Spark 3.0或更高版本,那么你可能需要关注这个配置选项,以确保代码的兼容性和期望行为。如果你的日期和时间字符串格式严格并始终遵循ISO标准,或者你希望采用更严格的解析策略,那么你应该使用默认的。在Apache Spark中,

迎难而上 2316

本地AI语音生成与配音工作台Pandrator:从TTS到RVC的完整实践指南

语音合成(TTS)技术通过深度学习模型将文本转换为自然语音,其核心原理涉及声学建模与波形生成。这项技术不仅提升了人机交互体验,更在内容创作领域展现出巨大价值,广泛应用于有声书制作、视频配音、虚拟助手等场景。本文聚焦于一个集成了XTTS-v2、RVC等先进模型的本地化AI语音工作台——Pandrator,它通过模块化架构将语音合成、声音克隆、音频转录与翻译等流程无缝整合,为用户提供了一个图形化、可定制的完整解决方案。文章深入解析了其基于TTS与RVC(Retrieval-based Voice Convers

weixin_42676876的博客 340

spark.sql.parquet.writeLegacyFormat:ParquetDecodingException: Can not read value at 0 in block -1 in

系列二 在此之前可以先阅读文章:SparkSQL与Hive metastore Parquet转换 在说问题之前首先了解一个参数spark.sql.parquet.writeLegacyFormat(默认false)的作用: 设置为true时,数据会以Spark1.4和更早的版本的格式写入。比如decimal类型的值会被以Apache Parquet的fixed-length byte array格式写出,该格式是其他系统例如Hive、Impala等使用的。 设置为false时,会使用parquet的新版格

智海观潮的博客 3515

【COMSOL】将一个面上数据导出CSV或txt格式的方法

在COMSOL中参数化扫描后,把一个面上或体里的数据按照CSV或TXT格式导出的方法。

dave496206的博客 2990

RAG开源框架深度评测:从RAGFlow到Dify的实战选型指南

本文深度评测了主流RAG开源框架(RAGFlow、Dify、WeKnora)的核心能力与实战表现,提供企业级选型指南。重点对比了文档解析、检索性能和生产部署等关键指标,揭示RAGFlow在复杂文档处理、Dify在低代码开发、WeKnora在腾讯生态集成的差异化优势,并给出技术选型决策树与成本优化方案。

weixin_29294597的博客 827

Spark SQL的Parquet那些事儿.docx

Parquet是一种列式存储格式,很多种处理引擎都支持这种存储格式,也是sparksql的默认存储格式。Spark SQL支持灵活的读和写Parquet文件,并且对par...

大数据星球-浪尖 1869

Ansys Zemax实战:5步搞定多模光纤耦合效率优化(附IMAE操作数详解)

本文详细介绍了使用Ansys Zemax优化多模光纤耦合效率的5个关键步骤,包括几何图像分析设置、IMAE操作数应用及偏振效应处理。通过实战案例解析,帮助工程师快速掌握光纤耦合效率提升技巧,特别针对IMAE操作数的配置保存机制和菲涅尔损耗控制进行深度讲解。

potato的博客 690

Spark性能调优

嗨,各位小伙伴大家好,我是爱小可爱的IT白,最近应朋友所邀,一直让写一篇关于Spark调优方面的文章,这两天工作之余,忙里偷闲,写了这篇调优文章,跟大家一起共享;在大数据领域,肯定有很多小伙伴跟笔者一样为了让生产中数据执行速度更快、性能更高而去使用Spark,当我们用Spark程序实现功能开发并使程序正常稳定运行起来的时候,一定是非常有成就感的;但是随着数据量的增加以及需求的完善,我们就开始关注我们这个程序能否做到在运行起来的时候让数据查询更快、让页面响应更快、尽可能的节省空间占用率;

aikeaidecxy的博客 2490

《备考系统架构设计师》 - 专栏介绍和目录

本专栏包括所有历年真题及详解、章节知识核心总结、精选高分论文、补充知识、专题总结等。欢迎订阅专栏。

数据知道的博客 4万+

【CASS精品教程】032:CASS11台阶画法案例大全

一、普通无边台阶 二、普通有边台阶 三、普通圆弧无边台阶 四、U型台阶 五、曲线U型台阶 六、L型台阶

智慧空间实验室 7463

Spark调优在—代码调优

spark调优—代码优化

weixin_44077750的博客 1383

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Spark 深度实战:核心原理剖析与生产级调优全解

重新绘制自Spark 3.5.0官方文档,标注了DAGScheduler、TaskScheduler、Executor的核心交互流程,红色箭头表示shuffle数据流,绿色表示计算结果返回路径。:某Join任务通过动态调整Join顺序,执行时间从45min→12min。1.关键指标:任务时长、GC时间占比、Shuffle spill量。:实时统计广告点击量,要求Exactly-Once语义。:某日志分析任务因单Key数据量过大(1TB+),采用。:某电商订单表(1亿+记录)执行。:用户流失预测模型训练。

salamu_的博客 875

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

spark shuffer调优

性能优化 shuffle spark.shuffle.file.buffer,默认32k spark.shuffle.memoryFraction,0.2 map端内存缓冲,reduce端内存占比;很多资料、网上视频,都会说,这两个参数, 是调节shuffle性能的不二选择,很有效果的样子,实际上,不是这样的。 以实际的生产经验来说,这两个参数没有那么重要,往往来说,shuffle的性能不是因为 ...

一个北漂的程序猿 455

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

hive3.x on spark3.0生产调优实践

1 数据倾斜 绝大部分任务都很快完成,只有一个或者少数几个任务执行的很慢甚至最终执行失败,这样的现象为数据倾斜现象。 将数据倾斜分为单表携带了 GroupBy 字段的查询和两表(或者多表)Join 的查询。 1.1 单表数据倾斜优化 1.1.1 Map 端进行聚合 - GroupBy 操作同时聚合函数为 count 或者 sum set hive.map.aggr = true; set hive.groupby.mapaggr.checkinterval = 100000; set hive.grou

架构师老狼 1474

数据工程师实战指南:Hadoop、Spark、Flink等五大框架生产调优与避坑

大数据(Big Data)指在分布式环境下对海量、高速、多样数据进行采集、存储、计算与服务的系统性工程能力。其核心原理在于通过分而治之(Shuffle/Partition)、容错重试(Speculative Execution/Checkpointing)和统一资源调度(YARN/K8s)保障SLA。技术价值体现在降低TCO、提升分析时效性与支撑实时决策闭环。典型应用场景包括电商用户行为分析、金融风控实时拦截、IoT设备时序处理等。本文聚焦Hadoop、Spark、Flink、Hive、Storm五大高频框

weixin_30772105的博客 779

Spark 3.0实战:从环境搭建到性能调优的完整指南

在大数据处理领域,分布式计算框架是处理海量数据的核心技术。其核心原理在于将大规模数据集分割成多个分区,通过并行计算集群进行高效处理,从而突破单机性能瓶颈。这项技术的核心价值在于能够显著提升数据处理效率,降低计算成本,并支持复杂的分析任务。它广泛应用于日志分析、用户行为统计、机器学习特征工程等场景。本文聚焦于Apache Spark 3.0这一主流框架,深入探讨其自适应查询执行(AQE)和动态分区裁剪(DPP)等智能化特性,这些特性能够自动优化执行计划,有效应对数据倾斜问题,并结合Kryo序列化等性能优化手段

weixin_31412781的博客 255

Spark RDD 转换操作深度解析:从基础到调优

本文深入解析了Spark RDD的核心转换操作及其优化策略。主要内容包括: RDD转换操作体系:详细分类了单元素转换(map/filter/flatMap)、键值对转换(groupByKey/reduceByKey/join)、集合操作(union/distinct)和分区控制(repartition/coalesce)四大类操作。 惰性求值机制:通过DAG构建和延迟执行实现自动优化,能合并连续操作、跳过未使用分支,提高容错性和资源利用率。 生产调优策略: 避免不必要的Shuffle操作 合理控制分区数量和

csdn_tom_168的博客 1018

Spark 性能调优实战:从开发到生产落地

Spark 是绝大多数大数据平台的主力计算引擎,但在真正的生产环境中,一条 SQL 或一段 DataFrame 代码从“能跑”到“跑得好”,中间隔着一整套理解模型、精细调优的工程实践。本文将从作业执行模型开始,一直深入内存管理、Shuffle 优化、并行度、Join 策略与监控诊断,所有内容均以“可动手、可排错”为目标,并在关键环节附上代码和 Spark UI 截图解读(以文字模拟)。

渣渣盟的博客 888

【Spark 】完整知识体系:从入门到生产调优

Spark 3.5是现代大数据处理的核心引擎,核心为Spark SQL,推荐使用DataFrame/Dataset API(Python仅支持DataFrame)。其性能关键在于Catalyst优化器,实现自动逻辑与物理优化、代码生成。数据源首选Parquet,支持多种格式读写。编程风格可选DSL链式调用或SQL字符串,后者需注册临时视图。理解Transformation惰性求值与Action触发执行是掌握Spark的关键。避免学习过时的RDD,专注高效、声明式的数据处理。

zy123456nn的博客 489

Amazon EMR生产级实战:Spark调优、EMRFS深度配置与Spot容错

Amazon EMR并非简单的‘云上Hadoop’,而是融合基础设施编排、深度调优运行时与S3原生数据平面的分布式计算操作系统。其核心原理在于三层抽象协同:底层EC2资源池化管理、中层Spark/Hadoop发行版级预集成、上层EMRFS对S3的元数据一致性增强与延迟写入机制。技术价值体现在成本可控(Spot实例+自动伸缩)、弹性可靠(Application Recovery+Checkpoint)、可观测可诊断(CloudWatch+EMR日志管道)。典型应用场景包括PB级日志实时特征计算、分钟级ETL流

weixin_30954265的博客 386
上一篇: 元数据管理理论
下一篇: kafka优化笔记
架构师老狼
博客等级 码龄14年 44粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值