(十三)session聚合统计
发布日期:2021-11-18 17:47:23
浏览次数:10
分类:技术文章
本文共 1618 字,大约阅读时间需要 5 分钟。
文章目录
session聚合统计
(统计出访问时长和访问步长,各个区间的session数量占总session数量的比例)
其实就是耦合性和性能直接的博弈!!!! * 如果不进行重构,直接来实现,思路: * 1、actionRDD,映射成<sessionid,Row>的格式 * 2、按sessionid聚合,计算出每个session的访问时长和访问步长,生成一个新的RDD * 3、遍历新生成的RDD,将每个session的访问时长和访问步长,去更新自定义Accumulator中的对应的值 * 4、使用自定义Accumulator中的统计值,去计算各个区间的比例 * 5、将最后计算出来的结果,写入MySQL对应的表中 * 普通实现思路的问题: * 1、为什么还要用actionRDD,去映射?其实我们之前在session聚合的时候,映射已经做过了。多此一举 * 2、是不是一定要,为了session的聚合这个功能,单独去遍历一遍session?其实没有必要,已经有session数据 * 之前过滤session的时候,其实,就相当于,是在遍历session,那么这里就没有必要再过滤一遍了重构实现思路:
1、不要去生成任何新的RDD(处理上亿的数据) 2、不要去单独遍历一遍session的数据(处理上千万的数据) 3、可以在进行session聚合的时候,就直接计算出来每个session的访问时长和访问步长 4、在进行过滤的时候,本来就要遍历所有的聚合session信息,此时,就可以在某个session通过筛选条件后 将其访问时长和访问步长,累加到自定义的Accumulator上面去 5、就是两种截然不同的思考方式,和实现方式,在面对上亿,上千万数据的时候,甚至可以节省时间长达 半个小时,或者数个小时
开发Spark大型复杂项目的一些经验准则:
* 1、尽量少生成RDD * 2、尽量少对RDD进行算子操作,如果有可能,尽量在一个算子里面,实现多个需要做的功能 * 3、尽量少对RDD进行shuffle算子操作,比如groupByKey、reduceByKey、sortByKey(map、mapToPair) * shuffle操作,会导致大量的磁盘读写,严重降低性能 * 有shuffle的算子,和没有shuffle的算子,甚至性能,会达到几十分钟,甚至数个小时的差别 * 有shfufle的算子,很容易导致数据倾斜,一旦数据倾斜,简直就是性能杀手(完整的解决方案) * 4、无论做什么功能,性能第一 * 在传统的J2EE或者.NET后者PHP,软件/系统/网站开发中,我认为是架构和可维护性,可扩展性的重要 * 程度,远远高于了性能,大量的分布式的架构,设计模式,代码的划分,类的划分(高并发网站除外)
经验之谈
- 在大数据项目中,比如MapReduce、Hive、Spark、Storm,我认为性能的重要程度,远远大于一些代码的规范,和设计模式,代码的划分,类的划分;大数据,大数据,最重要的,就是性能 主要就是因为大数据以及大数据项目的特点,决定了,大数据的程序和项目的速度,都比较慢
- 如果不优先考虑性能的话,会导致一个大数据处理程序运行时间长度数个小时,甚至数十个小时,此时,对于用户体验,简直就是一场灾难
- 所以,推荐大数据项目,在开发和代码的架构中,优先考虑性能;其次考虑功能代码的划分、解耦合
总结
- 我们如果采用第一种实现方案,那么其实就是代码划分(解耦合、可维护)优先,设计优先,如果采用第二种方案,那么其实就是性能优先
- 讲了这么多,其实大家不要以为我是在岔开话题,大家不要觉得项目的课程,就是单纯的项目本身以及 代码coding最重要,其实项目,我觉得,最重要的,除了技术本身和项目经验以外;非常重要的一点,就是积累了,处理各种问题的经验。
转载地址:https://blog.csdn.net/weixin_37850264/article/details/112258412 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月05日 03时53分56秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
RTT大牛告诉你,混合微内核是什么?
2019-04-27
ARM 原子操作里的两个汇编指令
2019-04-27
秒,在解答这个C语言题目上,我们都败了
2019-04-27
Linux kernel 同步机制(下篇)
2019-04-27
有意思,USB资料分享
2019-04-27
做算法,为什么建议你一定要学懂C++?
2019-04-27
Linux操作寄存器前为什么要ioremap
2019-04-27
不知道的,还以为是555牌香烟
2019-04-27
为什么别人赚钱比自己容易?
2019-04-27
呵,你会51单片机的精确延时吗?
2019-04-27
15张图来了解【树】,面试再也不怕被刷了
2019-04-27
嵌入式如何入门,要不要学习Python
2019-04-27
Linux 资料大全
2019-04-27
一个深入学习Linux/C/C++的原创技术号
2019-04-27
Linux 用户空间和内核空间
2019-04-27
深入理解cache对写好代码至关重要
2019-04-27
你确定你会使用git commit?
2019-04-27
你会选择深圳还是佛山?
2019-04-27
华为开始对嵌入式开发者下手了!
2019-04-27