SparkSQL Catalyst详解(转载)|Spark|Spark最近想来,大数据相关技术与传统型数据库技术很多都是相互融合、互相借鉴的。传统型数据库强势在于其久经考验的SQL优化器经验,弱势在于分布式领域的高可用性、容错性、扩展性等,假以时日,让其经过一定的改造,比如引入Paxos、raft等,强化自己在分布式领域的能力,相信一定会在大数据系统中占有一席之地。相 ...
Read more
从源码的角度解析ByKey类算子|Spark|SparkreduceByKey和groupByKey的区别我们都知道reduceByKey和groupByKey的区别在于
reduceByKey用于对每个key对应的多个value进行merge操作,并且在map端进行了预聚合操作。
groupByKey也是对每个key进行操作,但只将key对应的val ...
Read more
Spark Streaming中的state管理|Spark|Spark有状态转化依赖之前的批次数据或者中间结果来计算当前批次的数据,不断的把当前的计算和历史时间切片的RDD进行累计。
Spark Streaming中状态管理函数包括updateStateByKey和mapWithState,都是用来统计全局key的状态的变化的。它们以DStream中的数据进行按key ...
Read more
Spark自定义Hbase外部数据源(兼容稀疏存储)|Spark|Spark这篇文章接着从jdbc的角度解读外部数据源和自定义外部Text数据源
我想以简单的形式在Spark中读取Hbase数据,但是Spark并不支持读取Hbase数据后简单使用。思考能否自己实现这个读取的过程?
Hbase的读写API,结果数据往往需要处理后使用。我们是否可以将Hbase结果数据通过转化, ...
Read more
Spark内存管理|Spark|Spark概述Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色。理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优。本文旨在梳理出 Spark 内存管理的脉络,抛砖引玉,引出读者对这个话题的深入探讨。本文中阐述的原理基于 Sp ...
Read more
Spark Broadcast实现动态更新作业配置|Spark|Spark由于实时场景对可用性十分敏感,实时作业通常需要避免频繁重启,因此动态加载作业配置(变量)是实时计算里十分常见的需求,比如通常复杂事件处理 (CEP) 的规则或者在线机器学习的模型。尽管常见,实现起来却并没有那么简单,其中最难点在于如何确保节点状态在变更期间的一致性。目前来说一般有两种实现方式:
轮 ...
Read more
Spark性能优化指南之Shuffle调优(转载)|Spark|Spark调优概述大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。因此,如果要让作业的性能更上一层楼,就有必要对shuffle过程进行调优。但是也必须提醒大家的是,影响一个Spark作业性能的因素,主要还是代码开发、资源参数以及数据倾斜 ...
Read more
Spark性能优化指南之数据倾斜调优(转载)|Spark|Spark调优概述有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能。
数据倾斜发生时的现象
绝大多数task执行得都非常快,但个别task执行极慢。比如,总共有10 ...
Read more
Spark性能优化指南之资源参数调优(转载)|Spark|Spark调优概述在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置这些参数,最后就只能胡乱设置,甚至压根儿不设置。资源参数设置的不合理,可能会导致没有充分利用 ...
Read more
Spark性能优化指南之开发调优(转载)|Spark|Spark目录
调优概述
原则一:避免创建重复的RDD
原则二:尽可能复用同一个RDD
原则三:对多次使用的RDD进行持久化
原则四:尽量避免使用shuffle类算子
原则五:使用map-side预聚合的shuffle操作
原则六:使用高性能的算子
原则七:广播大变量
原则八:使用Kryo优化序列化性能
原则 ...
Read more