自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 问答 (1)
  • 收藏
  • 关注

转载 spark 大型项目实战(四十三):算子调优之reduceByKey本地聚合介绍

下面给出一个图解: map端的task是不断的输出数据的,数据量可能是很大的。但是,其实reduce端的task,并不是等到map端task将属于自己的那份数据全部写入磁盘文件之后,再去拉取的。map端写一点数据,reduce端task就会拉取一小部分数据,立即进行后面的聚合、算子函数的应用。每次reduece能够拉取多少数据,就由buffer来决定。因为拉取过来的数据,都是先放在b...

2018-06-24 15:24:12 3583

转载 spark 大型项目实战(四十二):算子调优之reduceByKey本地聚合介绍

下面看一段简单的world countval lines = sc.textFile("hdfs://")val words = lines.flatMap(_.split(" "))val pairs = words.map((_, 1))val counts = pairs.reduceByKey(_ + _)counts.collect()reduceByKey,相较于...

2018-06-24 09:20:04 3273 3

转载 spark 大型项目实战(四十一):算子调优之使用repartition解决Spark SQL低并行度的性能问题

并行度:之前说过,并行度是自己可以调节,或者说是设置的。1、spark.default.parallelism 2、textFile(),传入第二个参数,指定partition数量(比较少用)咱们的项目代码中,没有设置并行度,实际上,在生产环境中,是最好自己设置一下的。官网有推荐的设置方式,你的spark-submit脚本中,会指定你的application总共要启动多少个executo...

2018-06-24 09:14:17 7817

转载 spark 大型项目实战(四十): 算子调优之使用foreachPartition优化写数据库性能

foreach的写库原理 默认的foreach的性能缺陷在哪里?首先,对于每条数据,都要单独去调用一次function,task为每个数据,都要去执行一次function函数。如果100万条数据,(一个partition),调用100万次。性能比较差。另外一个非常非常重要的一点如果每个数据,你都去创建一个数据库连接的话,那么你就得创建100万次数据库连接。但是要注意的是,...

2018-06-24 09:03:08 4220

转载 spark 大型项目实战(三十九): 算子调优之filter过后使用coalesce减少分区数量

下面给出一种filter 的情况 默认情况下,经过了这种filter之后,RDD中的每个partition的数据量,可能都不太一样了。(原本每个partition的数据量可能是差不多的)问题:1、每个partition数据量变少了,但是在后面进行处理的时候,还是要跟partition数量一样数量的task,来进行处理;有点浪费task计算资源。2、每个partition的数据量...

2018-06-23 18:34:43 3052

转载 spark 大型项目实战(三十八): 算子调优之MapPartitions提升Map类操作性能

spark中,最基本的原则,就是每个task处理一个RDD的partition。 MapPartitions操作的优点:如果是普通的map,比如一个partition中有1万条数据;ok,那么你的function要执行和计算1万次。但是,使用MapPartitions操作之后,一个task仅仅会执行一次function,function一次接收所有的partition数据。只要执行一次就...

2018-06-23 18:26:14 2836

转载 spark 大型项目实战(三十七): --Shuffle调优之HashShuffleManager与SortShuffleManager

spark.shuffle.manager:hash、sort、tungsten-sort(自己实现内存管理)spark.shuffle.sort.bypassMergeThreshold:200之前我们所讲的,其实都是已经属于Spark中,比较老旧的一种shuffle manager,HashShuffleManager;这种manager,实际上,从spark 1.2.x版本以后,就不再...

2018-06-23 18:22:55 3043

转载 spark 大型项目实战(三十六):Shuffle调优之调节map端内存缓冲与reduce端内存占比

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

2018-06-23 18:13:09 2843

转载 spark 大型项目实战(三十五):--Shuffle调优之合并map端输出文件

如果不合并map端输出文件的话,会怎么样? 前置条件: 每个executor有2个cpu core。4个task。task是线程执行的。 所以先并行跑2个task,再跑剩下2个task 图解如下: 第一个stage,每个task,都会给第二个stage的每个task创建一份map端的输出文件第二个stage,每个task,会到各个节点上面去,拉取第一个stage每个task输...

2018-06-23 18:03:53 3353

转载 spark 大型项目实战(三十五):--Shuffle调优之原理概述

什么样的情况下,会发生shuffle?在spark中,主要是以下几个算子:groupByKey、reduceByKey、countByKey、join,等等。什么是shuffle?groupByKey,要把分布在集群各个节点上的数据中的同一个key,对应的values,都给集中到一块儿,集中到集群中同一个节点上,更严密一点说,就是集中到一个节点的一个executor的一个task中。...

2018-06-23 17:43:08 2843

转载 spark 大型项目实战(三十四): --JVM调优之调节executor堆外内存与连接等待时长

/usr/local/spark/bin/spark-submit \--class com.wen.sparkstudy.WordCount \--num-executors 80 \--driver-memory 6g \--executor-memory 6g \--executor-cores 3 \--master yarn-cluster \--queue root.de...

2018-06-23 16:45:49 3091

转载 spark 大型项目实战(三十三): --JVM调优之原理概述以及降低cache操作的内存占比

JVM调优(Java虚拟机):JVM相关的参数,通常情况下,如果你的硬件配置、基础的JVM的配置,都ok的话,JVM通常不会造成太严重的性能问题;反而更多的是,在troubleshooting中,JVM占了很重要的地位;JVM造成线上的spark作业的运行报错,甚至失败(比如OOM)。 理想情况下,老年代都是放一些声明周期很长的对象,数量应该是很少的。比如数据库连接池。 图解: 每一次放...

2018-06-23 16:35:29 2828

转载 spark 大型项目实战(三十二): --性能调优之在实际项目中调节数据本地化等待时长

PROCESS_LOCAL:进程本地化,代码和数据在同一个进程中,也就是在同一个executor中;计算数据的task由executor执行,数据在executor的BlockManager中;性能最好 NODE_LOCAL:节点本地化,代码和数据在同一个节点中;比如说,数据作为一个HDFS block块,就在节点上,而task在节点上某个executor中运行;或者是,数据和task在一个节点...

2018-06-23 16:28:07 2801

转载 spark 大型项目实战(三十一): --性能调优之在实际项目中使用fastutil优化数据格式

fastutil介绍:fastutil是扩展了Java标准集合框架(Map、List、Set;HashMap、ArrayList、HashSet)的类库,提供了特殊类型的map、set、list和queue; fastutil能够提供更小的内存占用,更快的存取速度;我们使用fastutil提供的集合类,来替代自己平时使用的JDK的原生的Map、List、Set,好处在于,fastutil集合...

2018-06-23 16:17:28 2841

转载 spark 大型项目实战(三十): --性能调优之在实际项目中使用Kryo序列化

在进行stage间的task的shuffle操作时,节点与节点之间的task会互相大量通过网络拉取和传输文件,此时,这些数据既然通过网络传输,也是可能要序列化的,就会使用Kryo还可以进一步优化,优化这个序列化格式默认情况下,Spark内部是使用Java的序列化机制,ObjectOutputStream / ObjectInputStream,对象输入输出流机制,来进行序列化这种默认序...

2018-06-18 22:38:49 2799

转载 spark 大型项目实战(二十九): --性能调优之在实际项目中广播大变量

这种默认的,task执行的算子中,使用了外部的变量,每个task都会获取一份变量的副本,有什么缺点呢?在什么情况下,会出现性能上的恶劣的影响呢?map,本身是不小,存放数据的一个单位是Entry,还有可能会用链表的格式的来存放Entry链条。所以map是比较消耗内存的数据格式。比如,map是1M。总共,你前面调优都调的特好,资源给的到位,配合着资源,并行度调节的绝对到位,1000个ta...

2018-06-18 22:25:47 2806

转载 spark 大型项目实战(二十八): --性能调优之在实际项目中重构RDD架构以及RDD持久化

第一,RDD架构重构与优化尽量去复用RDD,差不多的RDD,可以抽取称为一个共同的RDD,供后面的RDD计算时,反复使用。第二,公共RDD一定要实现持久化北方吃饺子,现包现煮。你人来了,要点一盘饺子。馅料+饺子皮+水->包好的饺子,对包好的饺子去煮,煮开了以后,才有你需要的熟的,热腾腾的饺子。现实生活中,饺子现包现煮,当然是最好的了;但是Spark中,RDD要去“现包现煮”,...

2018-06-18 15:03:05 2813

转载 spark 大型项目实战(二十七): --性能调优之在实际项目中调节并行度

并行度:其实就是指的是,Spark作业中,各个stage的task数量,也就代表了Spark作业的在各个阶段(stage)的并行度。如果不调节并行度,导致并行度过低,会怎么样?假设,现在已经在spark-submit脚本里面,给我们的spark作业分配了足够多的资源,比如50个executor,每个executor有10G内存,每个executor有3个cpu core。基本已经达到了集群...

2018-06-18 14:00:44 2883

转载 spark 大型项目实战(二十六): --性能调优之在实际项目中分配更多资源

分配更多资源:性能调优的王道,就是增加和分配更多的资源,性能和速度上的提升,是显而易见的;基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调优的时候,首先第一步,我觉得,就是要来调节最优的资源配置;在这个基础之上,如果说你的spark作业,能够分配的资源达到了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限;那么才是考虑去做后面的这...

2018-06-18 13:39:29 4795

转载 spark 大型项目实战(二十五):top10热门品类(二) --获取Top10 实现

/** * 获取top10热门品类 * @param filteredSessionid2AggrInfoRDD * @param sessionid2actionRDD */ private static void getTop10Category( long taskid, JavaPairRDD...

2018-06-18 11:12:58 4008

转载 spark 大型项目实战(二十四):用户访问session分析(二十四) --top10热门品类之需求回顾以及实现思路分析

需求回顾:top10热门品类计算出来通过筛选条件的那些session,他们访问过的所有品类(点击、下单、支付),按照各个品类的点击、下单和支付次数,降序排序,获取前10个品类,也就是筛选条件下的那一批session的top10热门品类;点击、下单和支付次数:优先按照点击次数排序、如果点击次数相等,那么按照下单次数排序、如果下单次数相当,那么按照支付次数排序这个需求是很有意义的,因为这样...

2018-06-10 16:20:18 3018

转载 spark 大型项目实战(二十三):用户访问session分析(二十三) --session随机抽取之根据随机索引进行抽取

项目源码:https://github.com/haha174/spark-session.git /** * 第五步:遍历每天每小时的session,然后根据随机索引进行抽取 */ // 执行groupByKey算子,得到<dateHour,(session aggrInfo)> JavaPairRDD&...

2018-06-09 22:41:43 2895

转载 spark 大型项目实战(二十二):用户访问session分析(二十二) --session随机抽取之按时间比例随机抽取算法实现

项目源码:https://github.com/haha174/spark-session.git 大致步骤如下:第一步,计算出每天每小时的session数量,获取<yyyy-MM-dd_HH,sessionid>格式的RDD第二步,使用按时间比例随机抽取算法,计算出每天每小时要抽取session的索引,将<yyyy-MM-dd_HH,count&gt

2018-06-09 22:27:02 3040

转载 spark 大型项目实战(二十一):用户访问session分析(二十一) --session随机抽取之计算每天每小时session数量

文章地址:http://www.haha174.top/article/details/257633 项目源码:https://github.com/haha174/spark-session.git 在上面聚合的时候添加startTime Constants.SESSION_PROJECT.FIELD_START_TIME + "=" + DateUtils.formatTime(s...

2018-06-09 17:48:20 2985

原创 spark 大型项目实战(二十):用户访问session分析(二十) --session随机抽取之实现思路分析

文章地址:http://www.haha174.top/article/details/253333 每一次执行用户访问session分析模块,要抽取出100个sessionsession随机抽取:按每天的每个小时的session数量,占当天session总数的比例,乘以每天要抽取的session数量,计算出每个小时要抽取的session数量;然后呢,在每天每小时的session中,随机抽取...

2018-06-09 17:12:03 2967

原创 spark 大型项目实战(十九):用户访问session分析(十九) -- 聚合结果写入mysql

文章地址:http://www.haha174.top/article/details/253596 项目源码:https://github.com/haha174/spark-session.git 前文中一直在介绍如何进行session 过滤聚合,本篇介绍一下如何将过滤以后的结果写入mysql. 首先需要创建一个model 类便于进行数据操作public class Sessi...

2018-06-09 17:06:36 2791

转载 spark 大型项目实战(十八):用户访问session分析(十八) -- session 聚合之重构时长和步长

文章地址:http://www.haha174.top/article/details/256619 源码:https://github.com/haha174/spark-session.git session 聚合统计统计处访问时长和访问步长,各个区间的session 占总session 数据量的比例 首先介绍一下不重构的实现思路 1.actionRDD(前文中介绍的用户数据...

2018-06-04 22:02:58 3515

转载 spark 大型项目实战(十七):用户访问session分析(十七) -- session 聚合之自定义Accumulator

文章地址:http://www.haha174.top/article/details/253747 源码:https://github.com/haha174/spark-session.git session聚合统计:统计出来之前通过条件过滤的session,访问时长在0s~3s的session的数量,占总session数量的比例;4s~6s。。。。; 访问步长在1~3的sessio...

2018-06-03 23:59:19 2893

转载 spark 大型项目实战(十六):用户访问session分析(十六) --session 聚合过滤

项目源码:https://github.com/haha174/spark-session.git 文章地址:http://www.haha174.top/article/details/255956 一般的情况下,我们都不会直接输出所有的结果,需要对过滤条件对数据进行一定的过滤最后得到需要的数据,本篇介绍一下session 过滤 首先设置过滤条件参数 String FI...

2018-06-02 13:31:45 2903

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除