
spark
文章平均质量分 81
matao_jack
没有什么可以打败我,除非是我自己不想成功
展开
-
Spark优化汇总
1.资源优化搭建集群在Spark安装路径下 spark/conf/spark-env.sh配置:SPARK_WORKER_CORES=XXXSPARK_WORKER_MEMORY=XXX提交任务提交任务命令,最好使用脚本化提交,可以在提交任务时,给当前Spark 应用程序足够的资源,提交命令:./spark-submit –master spark://mynode1:7077 ...原创 2019-10-19 21:27:38 · 210 阅读 · 0 评论 -
数据倾斜解决方案之使用随机数以及扩容表进行join
当采用随机数和扩容表进行join解决数据倾斜的时候,就代表着,你的之前的数据倾斜的解决方案,都没法使用。这个方案是没办法彻底解决数据倾斜的,更多的,是一种对数据倾斜的缓解。原理,其实在和上一个几乎一样的。步骤:1、选择一个RDD,要用flatMap,进行扩容,将每条数据,映射为多条数据,每个映射出来的数据,都带了一个n以内的随机数,通常来说,会选择10。2、将另外一个RDD,做普通的ma...原创 2019-10-18 17:38:11 · 700 阅读 · 1 评论 -
数据倾斜解决方案之sample采样倾斜key进行两次join
这个方案的实现思路,跟大家解析一下:其实关键之处在于,将发生数据倾斜的key,单独拉出来,放到一个RDD中去;就用这个原本会倾斜的key RDD跟其他RDD,单独去join一下,这个时候,key对应的数据,可能就会分散到多个task中去进行join操作。就不至于说是,这个key跟之前其他的key混合在一个RDD中时,肯定是会导致一个key对应的所有数据,都到一个task中去,就会导致数据倾斜。...原创 2019-10-17 21:02:58 · 302 阅读 · 0 评论 -
数据倾斜解决方案之使用随机key实现双重聚合和将reduce join转换为map join
使用随机key实现双重聚合使用随机key实现双重聚合2、使用场景(1)groupByKey(2)reduceByKey比较适合使用这种方式;join,咱们通常不会这样来做,后面会讲三种,针对不同的join造成的数据倾斜的问题的解决方案。第一轮聚合的时候,对key进行打散,将原先一样的key,变成不一样的key,相当于是将每个key分为多组;先针对多个组,进行key的局部聚合;接着,再...原创 2019-10-16 20:03:17 · 212 阅读 · 0 评论 -
数据倾斜解决方案之提高shuffle操作reduce并行度
第一个和第二个方案,都不适合做。第三个方案,提高shuffle操作的reduce并行度将reduce task的数量,变多,就可以让每个reduce task分配到更少的数据量,这样的话,也许就可以缓解,或者甚至是基本解决掉数据倾斜的问题。提升shuffle reduce端并行度,怎么来操作?很简单,主要给我们所有的shuffle算子,比如groupByKey、countByKey、re...原创 2019-10-15 21:06:10 · 153 阅读 · 0 评论 -
数据倾斜解决方案之聚合源数据
数据倾斜的解决,跟之前讲解的性能调优,有一点异曲同工之妙。性能调优,跟大家讲过一个道理,“重剑无锋”。性能调优,调了半天,最有效,最直接,最简单的方式,就是加资源,加并行度,注意RDD架构(复用同一个RDD,加上cache缓存);shuffle、jvm等,次要的。数据倾斜,解决方案,第一个方案和第二个方案,一起来讲。最朴素、最简谱、最直接、最有效、最简单的,解决数据倾斜问题的方案。第一个方案...原创 2019-10-14 20:34:48 · 201 阅读 · 0 评论 -
数据倾斜解决方案之原理以及现象分析
数据倾斜在任何大数据类的项目中,都是最棘手的性能问题,最能体现人的技术能力,最能体现RD(Research Developer,研发工程师)的技术水平。数据倾斜 = 性能杀手1、数据倾斜的原理在执行shuffle操作的时候,大家都知道,shuffle的原理。是按照key,来进行values的数据的输出、拉取和聚合的。同一个key的values,一定是分配到一个reduce task进行...原创 2019-10-13 09:07:21 · 211 阅读 · 0 评论 -
troubleshooting之解决yarn-cluster模式的JVM内存溢出无法执行问题
yarn-client和yarn-cluster模式的不同之处:yarn-client模式,driver运行在本地机器上的;yarn-cluster模式,driver是运行在yarn集群上某个nodemanager节点上面的。yarn-client会导致本地机器负责spark作业的调度,所以网卡流量会激增;yarn-cluster模式就没有这个问题。yarn-client的driver运行...原创 2019-10-11 22:27:32 · 179 阅读 · 0 评论 -
troubleshooting之解决yarn-client模式导致的网卡流量激增问题
Driver到底是什么?我们写的spark程序,打成jar包,用spark-submit来提交。jar包中的一个main类,通过jvm的命令启动起来。JVM进程,这个进程,其实就是咱们的Driver进程。Driver进程启动起来以后,执行我们自己写的main函数,从new SparkContext()。。。ApplicationMaster?yarn中的核心概念,任何要在yarn上启动...原创 2019-10-10 21:20:23 · 160 阅读 · 0 评论 -
troubleshooting之解决yarn-client模式导致的网卡流量激增问题
Driver到底是什么?我们写的spark程序,打成jar包,用spark-submit来提交。jar包中的一个main类,通过jvm的命令启动起来。JVM进程,这个进程,其实就是咱们的Driver进程。Driver进程启动起来以后,执行我们自己写的main函数,从new SparkContext()。。。ApplicationMaster?yarn中的核心概念,任何要在yarn上启动...原创 2019-10-09 14:08:03 · 200 阅读 · 0 评论 -
解决算子函数返回NULL问题和错误的持久化以及checkpoint的使用
在算子函数中,返回null// return actionRDD.mapToPair(new PairFunction<Row, String, Row>() {//// private static final long serialVersionUID = 1L;// // @Override// public Tuple2<String, Ro...原创 2019-10-08 22:15:12 · 237 阅读 · 0 评论 -
troubleshooting之解决各种序列化导致的报错
你会看到什么样的序列化导致的报错?用client模式去提交spark作业,观察本地打印出来的log。如果出现了类似于Serializable、Serialize等等字眼,报错的log,那么恭喜大家,就碰到了序列化问题导致的报错。虽然是报错,但是序列化报错,应该是属于比较简单的了,很好处理。序列化报错要注意的三个点:1、你的算子函数里面,如果使用到了外部的自定义类型的变量,那么此时,就要求你...原创 2019-09-28 21:08:57 · 305 阅读 · 1 评论 -
troubleshooting之解决YARN队列资源不足导致的application直接失败
现象:如果说,你是基于yarn来提交spark。比如yarn-cluster或者yarn-client。你可以指定提交到某个hadoop队列上的。每个队列都是可以有自己的资源的。跟大家说一个生产环境中的,给spark用的yarn资源队列的情况:500G内存,200个cpu core。比如说,某个spark application,在spark-submit里面你自己配了,executor,8...原创 2019-09-27 19:48:41 · 293 阅读 · 0 评论 -
troubleshooting之解决JVM GC导致的shuffle文件拉取失败
问题:有时会出现的一种情况,非常普遍,在spark的作业中;shuffle file not found。(spark作业中,非常非常常见的)而且,有的时候,它是偶尔才会出现的一种情况。有的时候,出现这种情况以后,会重新去提交stage、task。重新执行一遍,发现就好了。没有这种错误了。log怎么看?用client模式去提交你的spark作业。比如standalone client;yarn...原创 2019-09-26 19:59:05 · 145 阅读 · 0 评论 -
troubleshooting之控制shuffle reduce端缓冲大小以避免OOM
map端的task是不断的输出数据的,数据量可能是很大的。但是,其实reduce端的task,并不是等到map端task将属于自己的那份数据全部写入磁盘文件之后,再去拉取的。map端写一点数据,reduce端task就会拉取一小部分数据,立即进行后面的聚合、算子函数的应用。每次reduece能够拉取多少数据,就由buffer来决定。因为拉取过来的数据,都是先放在buffer中的。然后才用后面的...原创 2019-09-24 19:33:35 · 183 阅读 · 0 评论 -
算子调优之reduceByKey本地聚合介绍
val lines = sc.textFile(“hdfs://”)val words = lines.flatMap(.split(" "))val pairs = words.map((, 1))val counts = pairs.reduceByKey(_ + _)counts.collect()reduceByKey,相较于普通的shuffle操作(比如groupByKey),...原创 2019-09-20 21:36:47 · 342 阅读 · 0 评论 -
使用repartition解决Spark SQL低并行度的性能问题
并行度:并行度是自己可以调节,或者说是设置的。1、spark.default.parallelism2、textFile(),传入第二个参数,指定partition数量(比较少用)实际上,在生产环境中,是最好自己设置一下的。官网有推荐的设置方式,你的spark-submit脚本中,会指定你的application总共要启动多少个executor,100个;每个executor多少个cpu c...原创 2019-09-18 21:55:04 · 451 阅读 · 0 评论 -
spark调优-分配资源
分配更多资源:性能调优的王道,就是增加和分配更多的资源,性能和速度上的提升,是显而易见的;基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调优的时候,首先第一步,我觉得,就是要来调节最优的资源配置;在这个基础之上,如果说你的spark作业,能够分配的资源达到了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限;那么才是考虑去做后面的这...原创 2019-09-03 21:45:27 · 135 阅读 · 0 评论 -
spark性能调优-调节并行度
Spark并行度指的是什么?并行度:其实就是指的是,Spark作业中,各个stage的task数量,也就代表了Spark作业的在各个阶段(stage)的并行度。如果不调节并行度,导致并行度过低,会怎么样?假设,现在已经在spark-submit脚本里面,给我们的spark作业分配了足够多的资源,比如50个executor,每个executor有10G内存,每个executor有3个cpu c...原创 2019-09-04 22:10:18 · 188 阅读 · 0 评论 -
spark性能调优-重构RDD架构和RDD的持久化
当第一次对RDD2执行算子,获取RDD3的时候,就会从RDD1开始计算,就是读取HDFS文件,然后对RDD1执行算子,获取到RDD2,然后再计算,得到RDD3另外一种情况,从一个RDD到几个不同的RDD,算子和计算逻辑其实是完全一样的,结果因为人为的疏忽,计算了多次,获取到了多个RDD。默认情况下,多次对一个RDD执行算子,去获取不同的RDD;都会对这个RDD以及之前的父RDD,全部重新...原创 2019-09-05 21:22:00 · 193 阅读 · 0 评论 -
spark性能优化之在实际项目中广播大变量
如果说,task使用大变量(1m~100m),明知道会导致性能出现恶劣的影响。那么我们怎么来解决呢?广播,Broadcast,将大变量广播出去。而不是直接使用。因为每个task拷贝一份map的副本,刚才说的这种随机抽取的map,1M,举例。还算小的。如果你是从哪个表里面读取了一些维度数据,比方说,所有商品品类的信息,在某个算子函数中要使用到。100M。1000个task。100G的数据,网...原创 2019-09-07 21:26:30 · 215 阅读 · 0 评论 -
saprk性能调优-kryo序列化
1、默认情况下,Spark内部是使用Java的序列化机制,ObjectOutputStream / ObjectInputStream,对象输入输出流机制,来进行序列化这种默认序列化机制的好处在于,处理起来比较方便;也不需要我们手动去做什么事情,只是,你在算子里面使用的变量,必须是实现Serializable接口的,可序列化即可。但是缺点在于,默认的序列化机制的效率不高,序列化的速度比较慢;序...原创 2019-09-09 21:51:18 · 167 阅读 · 0 评论 -
spark性能调优之使用fastutil优化数据格式与调节数据本地化等待时长
fastutil介绍:fastutil是扩展了Java标准集合框架(Map、List、Set;HashMap、ArrayList、HashSet)的类库,提供了特殊类型的map、set、list和queue;fastutil能够提供更小的内存占用,更快的存取速度;我们使用fastutil提供的集合类,来替代自己平时使用的JDK的原生的Map、List、Set,好处在于,fastutil集合类,...原创 2019-09-10 22:11:35 · 231 阅读 · 0 评论 -
JVM调优之原理概述以及降低cache操作的内存占比
1、常规性能调优:分配资源、并行度。。。等2、JVM调优(Java虚拟机):JVM相关的参数,通常情况下,如果你的硬件配置、基础的JVM的配置,都ok的话,JVM通常不会造成太严重的性能问题;反而更多的是,在troubleshooting中,JVM占了很重要的地位;JVM造成线上的spark作业的运行报错,甚至失败(比如OOM)。3、shuffle调优(相当重要):spark在执行groupB...原创 2019-09-11 22:20:03 · 215 阅读 · 0 评论 -
JVM调优之调节executor堆外内存与连接等待时长
executor堆外内存有时候,如果你的spark作业处理的数据量特别特别大,几亿数据量;然后spark作业一运行,时不时的报错,shuffle file cannot find,executor、task lost,out of memory(内存溢出);可能是说executor的堆外内存不太够用,导致executor在运行的过程中,可能会内存溢出;然后可能导致后续的stage的task在运...原创 2019-09-12 22:10:26 · 186 阅读 · 0 评论 -
Shuffle调优之原理概述
什么样的情况下,会发生shuffle?在spark中,主要是以下几个算子:groupByKey、reduceByKey、countByKey、join,等等。什么是shuffle?groupByKey,要把分布在集群各个节点上的数据中的同一个key,对应的values,都给集中到一块儿,集中到集群中同一个节点上,更严密一点说,就是集中到一个节点的一个executor的一个task中。然后呢...原创 2019-09-13 22:01:40 · 289 阅读 · 0 评论 -
Shuffle调优之合并map端输出文件
如果不合并map端输出文件的话,会怎么样?第一个stage,每个task,都会给第二个stage的每个task创建一份map端的输出文件第二个stage,每个task,会到各个节点上面去,拉取第一个stage每个task输出的,属于自己的那一份文件。问题来了:默认的这种shuffle行为,对性能有什么样的恶劣影响呢?实际生产环境的条件:100个节点(每个节点一个executor):10...原创 2019-09-15 09:55:52 · 263 阅读 · 0 评论 -
Shuffle调优之HashShuffleManager与SortShuffleManager
SortShuffleManager与HashShuffleManager两点不同:1、SortShuffleManager会对每个reduce task要处理的数据,进行排序(默认的)。2、SortShuffleManager会避免像HashShuffleManager那样,默认就去创建多份磁盘文件。一个task,只会写入一个磁盘文件,不同reduce task的数据,用offset来划分界...原创 2019-09-16 09:09:56 · 178 阅读 · 0 评论 -
算子调优之MapPartitions和filter过后使用coalesce减少分区数量
spark中,最基本的原则,就是每个task处理一个RDD的partition。MapPartitions操作的优点:如果是普通的map,比如一个partition中有1万条数据;ok,那么你的function要执行和计算1万次。但是,使用MapPartitions操作之后,一个task仅仅会执行一次function,function一次接收所有的partition数据。只要执行一次就可以了...原创 2019-09-16 22:06:45 · 647 阅读 · 0 评论 -
算子调优之使用foreachPartition优化写数据库性能
默认的foreach的性能缺陷在哪里?首先,对于每条数据,都要单独去调用一次function,task为每个数据,都要去执行一次function函数。如果100万条数据,(一个partition),调用100万次。性能比较差。另外一个非常非常重要的一点如果每个数据,你都去创建一个数据库连接的话,那么你就得创建100万次数据库连接。但是要注意的是,数据库连接的创建和销毁,都是非常非常消耗...原创 2019-09-17 21:55:59 · 307 阅读 · 0 评论 -
spark2.0介绍
1、Spark Core&Spark SQL APIdataframe与dataset统一,dataframe只是dataset[Row]的类型别名SparkSession:统一SQLContext和HiveContext,新的上下文入口为SparkSession开发的一种新的流式调用的configuration apiaccumulator功能增强:便捷api、web ui支持...原创 2019-08-29 22:31:57 · 474 阅读 · 0 评论