
spark
zuodaoyong
这个作者很懒,什么都没留下…
展开
-
Spark数据倾调优
调优spark重点是从数据本地性,数据倾斜一、数据倾斜并行处理数据集的某一个部分的数据显著多余其他部分,导致该部分的处理速度成为整个数据集处理的瓶颈。1、出现数据倾斜的基本特征:个别任务处理大量数据,符合二八原则,即20%的任务处理80%的数据。2、出现数据倾斜的原因:主要是shuffle的时候,数据分配不均。3、数据倾斜最直接的后果:OOM,处理任务慢4、定位数据倾斜(1)观察spark ui中task运行的信息(2)查看log日志,分析处理任务慢的原因(3)revie翻译 2020-07-11 08:01:37 · 149 阅读 · 0 评论 -
Spark之Shuffle参数调优解析
在分布式系统中,数据分布在不同的节点上,每个节点计算一部分数据,后续将各个节点的数据进行汇聚,此时会出现shuffle,shuffle会产生大量的磁盘IO,网络IO,压缩,解压缩,序列化,反序列化等操作,这系列操作对性能都是很大的负担。下面是spark2.2.0版本的shuffle的属性表,http://spark.apache.org/docs/2.2.0/configuration.html一、Shuffle 参数Property Name Default Meaning翻译 2020-07-07 10:13:04 · 3905 阅读 · 0 评论 -
Spark之jvm调优
一、spark内存模型Spark1.6之前使用的内存模型是StaticMemoryManager实现,1.6之后使用UnifiedMemoryManager实现。spark支持用参数spark.memory.useLegacyMode来配置使用哪种内存管理模式。Executor内存使用(1)RDD存储当调用RDD的persist或者cache时,RDD的分区会被存储到内存里(2)shuffle需要用缓存区存储shuffle的输出和聚合的中间结果(3)用户代码编写的代码使用翻译 2020-06-30 07:39:07 · 946 阅读 · 0 评论 -
Spark之Mapper端和Reduce端调优
Spark在shuffle分为两部分,Mapper端和Reduce端一、Mapper端调优假设Mapper端有3个Task,task1,task2,task3,Reducer有两个Task,task1,task2数据传输到Reducer端的时候首先进行Mapper端的处理,Mapper端的处理很简单,Mapper端有一个Cache写入文件,Mapper端的缓冲层根据Reducer端的需要,将数据分成既定的分区。Reducer端抓取属于自己的数据进行Reduce操作,Reduce端也有Cach翻译 2020-06-26 21:16:52 · 751 阅读 · 0 评论 -
SparkContext源码详解
sparkContext核心组件:DAGScheduler,TaskScheduler,SchedulerBackend原创 2020-06-23 11:11:54 · 525 阅读 · 0 评论 -
Spark的Persist和checkpoint
一、Spark有多种持久化方式1、memory_only(仅在内存中)spark会将RDD作为未序列化的java对象存于内存,如果spark估算不是所有的分区能在内存中容纳,那么Spark不会将RDD缓存,以后用到该RDD,会根据血统重新计算userRDD.cache()userRDD.persist()userRDD.persist(StorageLevel.MEMORY_ONLY)劣势:占用大量内存,如果缓存过多对象,将对垃圾回收产生压力2、memory_only_ser(仅在翻译 2020-06-22 23:25:59 · 820 阅读 · 0 评论 -
Spark算子调优
1、使用MapPartitions替代Mapmap函数是应用于RDD的每个数据,MapPartitions是应用RDD的分区里的数据注意:如果在处理数据的时候,比较耗时(获取数据库连接),此时使用MapPartitions更合适2、foreachPartition替代foreachforeachPartition应用于RDD的每个分区,foreach是应用于RDD的每个元素3、coalesce替代rePartitioncoalesce和rePartition都是重新设置RDD分区翻译 2020-06-20 12:16:12 · 207 阅读 · 0 评论 -
Spark在Yarn上的性能调优
1、Spark数据本地化(移动计算,避免移动数据)(1)process_local(进程本地化)(推荐使用)代码和数据在同一个(Executor)进程中,数据在Executor的BlockManager中,性能最好(2)node_local(节点本地化)(推荐使用)代码和数据在一个节点中,主要分两种情况 i)数据在节点上,Task在节点上的Executor中运行 ii)节点上起了多个Executor,比如Executor1,Executor2,数据在Executor1的B...翻译 2020-06-18 22:12:54 · 501 阅读 · 0 评论 -
Spark内核流程详解
下图是以standalone模式提交应用执行的流程流程1、首先是提交打包的应用程序,使用Spark submit或者spark shell工具执行。2、提交应用程序到集群,集群会启动Driver进程。注意:(1)client模式:Driver进程是在客户端启动,客户端就是指提交应用程序的当前节点,该模式适合测试环境 (2)cluster模式:Driver会...翻译 2020-04-07 22:32:09 · 177 阅读 · 0 评论 -
Spark内核之DAGScheduler调度
Executor启动完了,接下来就准备在executor上执行task了,关于task任务的执行,就是我们接下来要说的TaskScheduler和DAGScheduler了。TaskScheduler作用是为创建它的SparkContext调度任务,即从DAGScheduler接受不同Stage的任务,并且向集群提交这些任务DAGScheduler主要负责分析用户提交的应用,并根据计算任务...翻译 2020-01-12 22:40:34 · 569 阅读 · 0 评论 -
Spark部署方式
Spark支持的主要的三种分布式部署方式分别是一、standalone(FIFO调度)1、独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。它是Spark实现的资源调度框架,其主要的节点有Client节点、Master节点和Worker节点(1)Master主控节点,在整个集群之中,最多只有一个Master处在Active状态(2)Worker工作...翻译 2020-01-12 21:38:50 · 2655 阅读 · 0 评论 -
Spark检查点checkpoint和缓存
一、缓存RDD通过persist方法或cache方法可以将计算结果缓存,默认情况下 persist() 会把数据以序列化的形式缓存在 JVM 的堆空 间中。 但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供后面重用。/** * Persist this RDD with the default storage level (...原创 2020-01-05 22:13:42 · 829 阅读 · 0 评论 -
spark概念解析
1. job定义: 在spark rdd中,有action、transform操作,当真正触发action时,才真正执行计算,此时产生一个job任务。2. stage定义: 以shuffle为界,当在一个job任务中涉及shuffle操作时,会进行stage划分,产生一个或多个stage。3. task定义: 一个stage可能包含一个或者多个task...原创 2019-09-06 11:24:35 · 160 阅读 · 0 评论 -
spark调优之Spark作业资源分配
每一台host上面可以并行N个worker,每一个worker下面可以并行M个executor,task任务组会被分配到executor上面去执行。Spark通过shuffle将任务分成多个stage。 CPU的core数量,每个executor可以占用一个或多个core,可以通过观察CPU的使用率变化来了解计算资源的使用情况,例如,很常见的一种浪费是一个executor...原创 2019-07-22 00:06:52 · 2179 阅读 · 0 评论 -
spark调优之广播大变量
在spark任务的算子引用了外部变量,那么spark默认会将被引用的变量拷贝副本发送到stage中的所有task。如果我们想一种场景,被引用的变量比较大,比如100M。假设spark任务在stage阶段使用了10个Executor,每个Executor有10个task,则spark会将变量拷贝100份总计10G。spark为了此变量就要消耗10G的网络资源和存储。对于一个spark集群而言这个...原创 2019-07-23 13:16:50 · 412 阅读 · 0 评论 -
Spark调优之Kryo序列化
在Spark中,默认序列化用的java的序列化机制。使用java的序列化机制好处是:处理起来比较方便;也不需要手动去做什么事情,只是在算子里面使用的变量,必须是实现Serializable接口的,可序列化即可。使用java的序列化机制缺点也是显而易见的:默认的序列化机制的效率不高,序列化的速度比较慢;序列化以后的数据,占用的内存空间相对还是比较大。Spark为了解决上面的java序列化...原创 2019-07-25 08:38:10 · 356 阅读 · 0 评论 -
Spark调优之fastutil
fastutil是扩展了Java标准集合框架(Map、List、Set;HashMap、ArrayList、HashSet)的类库,提供了特殊类型的map、set、list和queue。 fastutil能够提供更小的内存占用,更快的存取速度;我们使用fastutil提供的集合类,来替代自己平时使用的JDK的原生的Map、List、Set,好处在于,fastutil...原创 2019-08-14 06:37:26 · 201 阅读 · 0 评论 -
spark调优之调节数据本地化等待时长
PROCESS_LOCAL:进程本地化,代码和数据在同一个进程中,也就是在同一个executor中;计算数据的task由executor执行,数据在executor的BlockManager中;性能最好。 NODE_LOCAL:节点本地化,代码和数据在同一个节点中;比如说,数据作为一个HDFS block块,就在节点上,而task在节点上某个executor中运行;或者是,...原创 2019-08-14 06:57:31 · 244 阅读 · 0 评论 -
spark内核解析内存管理
一、堆内和堆外内存1、堆内内存 堆内内存的大小,由 Spark 应用程序启动时的 –executor-memory 或 spark.executor.memory 参数配置。 堆内内存包含,Storage内存,Execution内存,other内存 1)Storage内存:任务在缓存 RDD 数据和广播(Broadcast)数据时占用的内存 2)Exec...翻译 2019-09-23 00:11:07 · 160 阅读 · 0 评论 -
Spark内核解析RDD抽象
RDD(分布式数据集),是spark最基本的数据抽象。一、RDD特点RDD的源码注释如下:Internally, each RDD is characterized by five main properties:** - A list of partitions* - A function for computing each split* - A list of d...原创 2019-08-29 11:54:52 · 267 阅读 · 0 评论