
spark-porject
WQ同学
这个作者很懒,什么都没留下…
展开
-
Apache Spark 2.4 内置图像数据源介绍
随着图像分类(image classification)和对象检测(object detection)的深度学习框架的最新进展,开发者对 Apache Spark 中标准图像处理的需求变得越来越大。图像处理和预处理有其特定的挑战 - 比如,图像有不同的格式(例如,jpeg,png等),大小和颜色,并且没有简单的方法来测试正确性。图像数据源通过给我们提供可以编码的标准表示,并通过特定图像的细节进行...转载 2018-12-18 21:14:25 · 3441 阅读 · 0 评论 -
spark 大型项目实战(四十四):troubleshooting之控制shuffle reduce端缓冲大小以避免OOM
1. map端的task是不断的输出数据的,数据量可能是很大的。但是,其实reduce端的task,并不是等到map端task将属于自己的那份数据全部写入磁盘文件之后,再去拉取的。map端写一点数据,reduce端task就会拉取一小部分数据,立即进行后面的聚合、算子函数的应用。每次reduece能够拉取多少数据,就由buffer来决定。因为拉取过来的数据,都是先放在buffer中的。然...原创 2018-07-02 23:49:40 · 2871 阅读 · 0 评论 -
spark 大型项目实战(三十): --性能调优之在实际项目中使用Kryo序列化
在进行stage间的task的shuffle操作时,节点与节点之间的task会互相大量通过网络拉取和传输文件,此时,这些数据既然通过网络传输,也是可能要序列化的,就会使用Kryo还可以进一步优化,优化这个序列化格式默认情况下,Spark内部是使用Java的序列化机制,ObjectOutputStream / ObjectInputStream,对象输入输出流机制,来进行序列化这种默认序...转载 2018-06-18 22:38:49 · 2825 阅读 · 0 评论 -
spark 大型项目实战(二十九): --性能调优之在实际项目中广播大变量
这种默认的,task执行的算子中,使用了外部的变量,每个task都会获取一份变量的副本,有什么缺点呢?在什么情况下,会出现性能上的恶劣的影响呢?map,本身是不小,存放数据的一个单位是Entry,还有可能会用链表的格式的来存放Entry链条。所以map是比较消耗内存的数据格式。比如,map是1M。总共,你前面调优都调的特好,资源给的到位,配合着资源,并行度调节的绝对到位,1000个ta...转载 2018-06-18 22:25:47 · 2828 阅读 · 0 评论 -
spark 大型项目实战(二十八): --性能调优之在实际项目中重构RDD架构以及RDD持久化
第一,RDD架构重构与优化尽量去复用RDD,差不多的RDD,可以抽取称为一个共同的RDD,供后面的RDD计算时,反复使用。第二,公共RDD一定要实现持久化北方吃饺子,现包现煮。你人来了,要点一盘饺子。馅料+饺子皮+水->包好的饺子,对包好的饺子去煮,煮开了以后,才有你需要的熟的,热腾腾的饺子。现实生活中,饺子现包现煮,当然是最好的了;但是Spark中,RDD要去“现包现煮”,...转载 2018-06-18 15:03:05 · 2844 阅读 · 0 评论 -
spark 大型项目实战(二十七): --性能调优之在实际项目中调节并行度
并行度:其实就是指的是,Spark作业中,各个stage的task数量,也就代表了Spark作业的在各个阶段(stage)的并行度。如果不调节并行度,导致并行度过低,会怎么样?假设,现在已经在spark-submit脚本里面,给我们的spark作业分配了足够多的资源,比如50个executor,每个executor有10G内存,每个executor有3个cpu core。基本已经达到了集群...转载 2018-06-18 14:00:44 · 2905 阅读 · 0 评论 -
spark 大型项目实战(二十六): --性能调优之在实际项目中分配更多资源
分配更多资源:性能调优的王道,就是增加和分配更多的资源,性能和速度上的提升,是显而易见的;基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调优的时候,首先第一步,我觉得,就是要来调节最优的资源配置;在这个基础之上,如果说你的spark作业,能够分配的资源达到了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限;那么才是考虑去做后面的这...转载 2018-06-18 13:39:29 · 4831 阅读 · 0 评论 -
spark 大型项目实战(二十四):用户访问session分析(二十四) --top10热门品类之需求回顾以及实现思路分析
需求回顾:top10热门品类计算出来通过筛选条件的那些session,他们访问过的所有品类(点击、下单、支付),按照各个品类的点击、下单和支付次数,降序排序,获取前10个品类,也就是筛选条件下的那一批session的top10热门品类;点击、下单和支付次数:优先按照点击次数排序、如果点击次数相等,那么按照下单次数排序、如果下单次数相当,那么按照支付次数排序这个需求是很有意义的,因为这样...转载 2018-06-10 16:20:18 · 3062 阅读 · 0 评论 -
spark 大型项目实战(二十五):top10热门品类(二) --获取Top10 实现
/** * 获取top10热门品类 * @param filteredSessionid2AggrInfoRDD * @param sessionid2actionRDD */ private static void getTop10Category( long taskid, JavaPairRDD...转载 2018-06-18 11:12:58 · 4044 阅读 · 0 评论 -
spark 大型项目实战(二十三):用户访问session分析(二十三) --session随机抽取之根据随机索引进行抽取
项目源码:https://github.com/haha174/spark-session.git /** * 第五步:遍历每天每小时的session,然后根据随机索引进行抽取 */ // 执行groupByKey算子,得到<dateHour,(session aggrInfo)> JavaPairRDD&...转载 2018-06-09 22:41:43 · 2929 阅读 · 0 评论 -
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 · 3065 阅读 · 0 评论 -
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 · 3008 阅读 · 0 评论 -
spark 大型项目实战(四十五):troubleshooting之解决JVM GC导致的shuffle文件拉取失败
1. 比如,executor的JVM进程,可能内存不是很够用了。那么此时可能就会执行GC。minor GC or full GC。总之一旦发生了JVM之后,就会导致executor内,所有的工作线程全部停止。 2. 下一个stage的executor,可能是还没有停止掉的,task想要去上一个stage的task所在的exeuctor,去拉取属于自己的数据,结果由于对方正在gc,就导致拉取了...转载 2018-07-02 23:57:32 · 2792 阅读 · 0 评论 -
spark 大型项目实战(四十六):troubleshooting之解决YARN队列资源不足导致的application直接失败
如果说,你是基于yarn来提交spark。比如yarn-cluster或者yarn-client。你可以指定提交到某个hadoop队列上的。每个队列都是可以有自己的资源的。跟大家说一个生产环境中的,给spark用的yarn资源队列的情况:500G内存,200个cpu core。比如说,某个spark application,在spark-submit里面你自己配了,executor,80个...转载 2018-07-03 00:03:51 · 3151 阅读 · 0 评论 -
spark 大型项目实战(四十七):troubleshooting之解决各种序列化导致的报错
你会看到什么样的序列化导致的报错?用client模式去提交spark作业,观察本地打印出来的log。如果出现了类似于Serializable、Serialize等等字眼,报错的log,那么恭喜大家,就碰到了序列化问题导致的报错。虽然是报错,但是序列化报错,应该是属于比较简单的了,很好处理。序列化报错要注意的三个点:1、你的算子函数里面,如果使用到了外部的自定义类型的变量,那么此时,...转载 2018-07-03 00:10:49 · 2804 阅读 · 0 评论 -
spark 大型项目实战(五十八):数据倾斜解决方案之sample采样倾斜key进行两次join
当采用随机数和扩容表进行join解决数据倾斜的时候,就代表着,你的之前的数据倾斜的解决方案,都没法使用。这个方案是没办法彻底解决数据倾斜的,更多的,是一种对数据倾斜的缓解。原理,其实在上一讲,已经带出来了。 步骤:1、选择一个RDD,要用flatMap,进行扩容,将每条数据,映射为多条数据,每个映射出来的数据,都带了一个n以内的随机数,通常来说,会选择10。2、将另外一个RDD,...原创 2018-08-04 17:13:47 · 3789 阅读 · 0 评论 -
spark 大型项目实战(五十七):数据倾斜解决方案之sample采样倾斜key进行两次join
这个方案的实现思路,跟大家解析一下:其实关键之处在于,将发生数据倾斜的key,单独拉出来,放到一个RDD中去;就用这个原本会倾斜的key RDD跟其他RDD,单独去join一下,这个时候,key对应的数据,可能就会分散到多个task中去进行join操作。就不至于说是,这个key跟之前其他的key混合在一个RDD中时,肯定是会导致一个key对应的所有数据,都到一个task中去,就会导致数据倾...原创 2018-08-04 17:09:55 · 3236 阅读 · 0 评论 -
spark 大型项目实战(五十六):数数据倾斜解决方案之将reduce join转换为map join
普通的join,那么肯定是要走shuffle;那么,所以既然是走shuffle,那么普通的join,就肯定是走的是reduce join。先将所有相同的key,对应的values,汇聚到一个task中,然后再进行join。 将reduce join转换为map join。 reduce join转换为map join,适合在什么样的情况下,可以来使用?如果两个RDD要进行join,...原创 2018-08-04 17:01:42 · 3638 阅读 · 0 评论 -
spark 大型项目实战(五十五):数据倾斜解决方案之使用随机key实现双重聚合
使用随机key实现双重聚合1、原理2、使用场景 (1)groupByKey (2)reduceByKey比较适合使用这种方式;join,咱们通常不会这样来做,后面会讲三种,针对不同的join造成的数据倾斜的问题的解决方案。第一轮聚合的时候,对key进行打散,将原先一样的key,变成不一样的key,相当于是将每个key分为多组;先针对多个组,进行key的局部聚合;接着,再去除...原创 2018-08-04 16:54:15 · 3214 阅读 · 0 评论 -
spark 大型项目实战(五十四):数据倾斜解决方案之提高shuffle操作reduce并行度
spark.default.parallelism,100 提升shuffle reduce端并行度,怎么来操作?很简单,主要给我们所有的shuffle算子,比如groupByKey、countByKey、reduceByKey。在调用的时候,传入进去一个参数。一个数字。那个数字,就代表了那个shuffle操作的reduce端的并行度。那么在进行shuffle操作的时候,就会对应着创建指...原创 2018-08-04 16:45:17 · 3230 阅读 · 0 评论 -
spark 大型项目实战(五十三):数据倾斜解决方案之聚合源数据
数据倾斜的解决,跟之前讲解的性能调优,有一点异曲同工之妙。性能调优,跟大家讲过一个道理,“重剑无锋”。性能调优,调了半天,最有效,最直接,最简单的方式,就是加资源,加并行度,注意RDD架构(复用同一个RDD,加上cache缓存);shuffle、jvm等,次要的。数据倾斜,解决方案,第一个方案和第二个方案,一起来讲。最朴素、最简谱、最直接、最有效、最简单的,解决数据倾斜问题的方案。第一...原创 2018-08-04 16:26:07 · 3401 阅读 · 0 评论 -
spark 大型项目实战(五十二):数据倾斜解决方案之原理以及现象分析
数据倾斜在任何大数据类的项目中,都是最棘手的性能问题,最能体现人的技术能力,最能体现RD(Research Developer,研发工程师)的技术水平。数据倾斜 = 性能杀手如果没有丰富的经验,或者没有受过专业的技术培训,是很难解决数据倾斜问题的 在执行shuffle操作的时候,大家都知道,我们之前讲解过shuffle的原理。是按照key,来进行values的数据的输出、拉取和聚...原创 2018-08-04 13:18:58 · 3104 阅读 · 0 评论 -
spark 大型项目实战(五十一):troubleshooting之错误的持久化方式以及checkpoint的使用
错误的持久化使用方式:usersRDD,想要对这个RDD做一个cache,希望能够在后面多次使用这个RDD的时候,不用反复重新计算RDD;可以直接使用通过各个节点上的executor的BlockManager管理的内存 / 磁盘上的数据,避免重新反复计算RDD。usersRDD.cache() usersRDD.count() usersRDD.take()上面这种方式,不要说会不...原创 2018-08-04 13:02:39 · 3377 阅读 · 0 评论 -
spark 大型项目实战(五十):troubleshooting之解决yarn-cluster模式的JVM内存溢出无法执行问题
总结一下yarn-client和yarn-cluster模式的不同之处:yarn-client模式,driver运行在本地机器上的;yarn-cluster模式,driver是运行在yarn集群上某个nodemanager节点上面的。yarn-client会导致本地机器负责spark作业的调度,所以网卡流量会激增;yarn-cluster模式就没有这个问题。yarn-client的...原创 2018-08-04 11:19:43 · 2897 阅读 · 0 评论 -
spark 大型项目实战(四十九):troubleshooting之解决yarn-client模式导致的网卡流量激增问题
yarn-client模式下,会产生什么样的问题呢?由于咱们的driver是启动在本地机器的,而且driver是全权负责所有的任务的调度的,也就是说要跟yarn集群上运行的多个executor进行频繁的通信(中间有task的启动消息、task的执行统计消息、task的运行状态、shuffle的输出结果)。咱们来想象一下。比如你的executor有100个,stage有10个,task有10...转载 2018-07-03 00:17:21 · 2904 阅读 · 0 评论 -
spark 大型项目实战(四十八):troubleshooting之解决算子函数返回NULL导致的问题
在算子函数中,返回null// return actionRDD.mapToPair(new PairFunction<Row, String, Row>() {//// private static final long serialVersionUID = 1L;// // @Override// ...转载 2018-07-03 00:13:11 · 2774 阅读 · 0 评论 -
spark 大型项目实战(二十):用户访问session分析(二十) --session随机抽取之实现思路分析
文章地址:http://www.haha174.top/article/details/253333 每一次执行用户访问session分析模块,要抽取出100个sessionsession随机抽取:按每天的每个小时的session数量,占当天session总数的比例,乘以每天要抽取的session数量,计算出每个小时要抽取的session数量;然后呢,在每天每小时的session中,随机抽取...原创 2018-06-09 17:12:03 · 2998 阅读 · 0 评论 -
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 · 2819 阅读 · 0 评论 -
spark 大型项目实战(四十三):算子调优之reduceByKey本地聚合介绍
下面给出一个图解: map端的task是不断的输出数据的,数据量可能是很大的。但是,其实reduce端的task,并不是等到map端task将属于自己的那份数据全部写入磁盘文件之后,再去拉取的。map端写一点数据,reduce端task就会拉取一小部分数据,立即进行后面的聚合、算子函数的应用。每次reduece能够拉取多少数据,就由buffer来决定。因为拉取过来的数据,都是先放在b...转载 2018-06-24 15:24:12 · 3611 阅读 · 0 评论 -
spark 大型项目实战(十五):用户访问session分析(十五) --按照session 粒度进行数据聚合
文章地址:http://www.haha174.top/article/details/253715 源码:https://github.com/haha174/spark-session.git 上一遍中通过代码构造出了测试的数据下面开始对该数据进行聚合 首先分析一下/** * * 接收用户创建的分析任务,用户可能指定的条件如下: * * 1、时间范围:起始日期~结束日期 *...转载 2018-05-31 22:20:30 · 3439 阅读 · 0 评论 -
spark 大型项目实战(十四):用户访问session分析(十四) --spark 上下文和构造测试数据
文章地址:http://www.haha174.top/article/details/251331一.构建上下文再生产环境和开发环境使用的spark 上下文肯定是不一样的比如说sqlContext 在生产用的hivecontext 在开发的时候就用的sqlcontext./** * 用户访问session分析Spark作业 * @author Administrato...转载 2018-05-29 22:06:57 · 3076 阅读 · 0 评论 -
spark 大型项目实战(十一):用户访问session分析(十一) --使用注解进行字段转化
在之前开发的sessionFactory 中 如果字段的名称和数据库中字段名称不一致,是没有办法直接获取到值的,而且一直用map 操作也不是很方便,所以开发一个字段转换的注解进行数据库字段和model 中的字段进行映射。 首先创建一个注解/** * 数据库中字段一般和 model * 字段名称不一样 所以这里定义一个主机来转换名称 * 只需要将名称不一样的注解进行转换即...原创 2018-05-24 23:54:05 · 2846 阅读 · 0 评论 -
spark 大型项目实战(十):用户访问session分析(十) --DAO 模式讲解以及taskDAO 开发
一 简介 DAO模式 Data Access Object:数据访问对象首先,你的应用程序,肯定会有业务逻辑的代码。在三层架构的web系统中,业务逻辑的代码,就是在你的Service组件里面;在我们的spark作业中,业务逻辑代码就是在我们的spark作业里面。如果说,你不用DAO模式的话,那么所有的数据库访问的代码和逻辑会全部耦合在业务逻辑代码里面。比如,你的业务逻辑代码中,可能会充...转载 2018-05-24 23:07:26 · 2867 阅读 · 0 评论 -
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 · 3552 阅读 · 0 评论 -
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 · 2935 阅读 · 0 评论 -
spark 大型项目实战(十三):用户访问session分析(十三) --json 数据格式
什么是JSON?就是一种数据格式;比如说,我们现在规定,有一个txt文本文件,用来存放一个班级的成绩;然后呢,我们规定,这个文本文件里的学生成绩的格式,是第一行,就是一行列头(姓名 班级 年级 科目 成绩),接下来,每一行就是一个学生的成绩。那么,这个文本文件内的这种信息存放的格式,其实就是一种数据格式。学生 班级 年级 科目 成绩 张三 一班 大一 高数 90 李四 二班 大一 高数...转载 2018-05-25 07:12:03 · 2851 阅读 · 0 评论 -
spark 大型项目实战(十二):用户访问session分析(十二) --工厂模式讲解以及DAOFactory开发
如果没有工厂模式,可能会出现的问题:ITaskDAO接口和TaskDAOImpl实现类;实现类是可能会更换的;那么,如果你就使用普通的方式来创建DAO,比如ITaskDAO taskDAO = new TaskDAOImpl(),那么后续,如果你的TaskDAO的实现类变更了,那么你就必须在你的程序中,所有出现过TaskDAOImpl的地方,去更换掉这个实现类。这是非常非常麻烦的。如果说,...转载 2018-05-25 00:01:27 · 3222 阅读 · 0 评论 -
spark 大型项目实战(八):用户访问session分析(八) --单例模式
一、概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。 单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓...转载 2018-05-14 11:20:54 · 3126 阅读 · 0 评论 -
spark 大型项目实战(七):用户访问session分析(七) --数据库连接池原理
1.谈谈数据库连接池的原理这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包。一.早期我们怎么进行数据库操作 1.原理:一般来说,java应用程序访问数据库的过程是: ①装载数据库驱动程序; ②通过jdbc建立数据库连接; ③访问数据库,执行sql语句; ④断开数据库连接。2.代码 ...转载 2018-05-13 23:29:58 · 3176 阅读 · 0 评论 -
spark 大型项目实战(六):用户访问session分析(六) --开发配置管理组件
1.简述配置管理组件 * * 1、配置管理组件可以复杂,也可以很简单,对于简单的配置管理组件来说,只要开发一个类,可以在第一次访问它的 * 时候,就从对应的properties文件中,读取配置项,并提供外界获取某个配置key对应的value的方法 * 2、如果是特别复杂的配置管理组件,那么可能需要使用一些软件设计中的设计模式,比如单例模式、解释器模式 * ...转载 2018-05-13 18:33:52 · 2884 阅读 · 0 评论