- 博客(12)
- 收藏
- 关注
原创 Spark-SQL_Join策略的种类与选择
Spark底层中一共有以下5种join策略:1、Broadcast Hash Join(BHJ)2、Shuffle Hash Join3、Shuffle Sort Merge Join(SMJ)4、Cartesian Product Join5、Broadcast Nested Loop Join(BNLJ)
2024-06-25 23:14:34
149
原创 Spark-SQL_RDD/DataFrame/DataSet的区别
dataSet:dateSet 就是在 DateFrame 的基础上增加一个强类型的概念,就是我自己去定义属性是什么类型,而不是靠读取数据定义类型。DataFrame:就是在 RDD 的基础上,加上结构,赋予数据的含义,类似 Sql 里面的表。RDD 与 DataSet 之间的转换,如果一层一层的来,太麻烦了,一步转换的方法如下。RDD:只关注数据本身,不关注数据代表的含义。DataSet 转换成 rdd 的方法。
2024-06-16 23:20:00
281
原创 Hive中各种表的理解(流水/全量/快照/拉链)
流水表: 就是每天增量的数据直接累加,用于凭证表等,每条记录 ID 都是唯一全量表: 每天都是全量抽取的数据快照: 1、根据业务修改时间 upd_ts 字段,抽取 T-1 天更新 / 新增的数据 2、T-2 天的全量数据,关联 T-1 的数据,剔除历史数据中包含 T-1 天更新的数据 on a.card_no(T-2) = b.card_no (T-1) where b
2024-06-14 17:10:52
434
原创 Spark项目之用户行为【性能优化9】数据倾斜优化
有点类似Hive数据倾斜的情况适用:已经找出倾斜的Key,直接对倾斜Key进行打散操作,以及聚合的逻辑可以进行拆分局部和总体的,比如加减乘等不适用:聚合逻辑复杂且不支持局部聚合,比如求平均值等实际项目操作:1、在品类ID聚合之前,可以先映射随机数前缀,scala:map(),java:maptopair()2、初步的reduceByKey3、初步聚合后,再映射回本来的Key, scala:map(),java:maptopair()4、全局的reduceByKey。
2024-06-14 10:53:34
1584
原创 Spark项目之用户行为【性能调优8】算子调优
实践:使用之前先评估RDD里面每个分区的数据量是多大,然后每个Excutor分到的内存是多大,避免同时处理大量数据造成OOM,在用户画像项目里面,我们拿到每行的数据转换成Tuple<sessionid,Row>的格式等很多转换格式的map都有做类似的优化。原理:map是对RDD中,每一行Row数据进行自定义转换处理,当数据量有一定程度时,自定义函数会执行多次,增加开销,这时候可以通过mapPartition来处理,他会一个分区的数据同时提交执行自定义函数转换RDD。
2024-06-05 16:37:52
292
原创 Spark项目之用户行为【性能调优7】map端缓冲区大小及reduce端内存占比调整
在reduce端,进行聚合计算的时候,同样也有0.2(default)的内存比例是用来计算的,匿名函数规则计算,如果内存足够,则直接在内存中计算,否则需要spill到磁盘中,进行交互计算。在map端,task写文件之前,都有一个内存缓冲区,如果每个task数据量不大,那么就可以不溢写文件,直接利用内存计算。conf.set(“spark.shuffle.file.buffer”,“64”),默认32k。
2024-05-30 16:56:32
304
原创 Spark项目之用户行为【性能调优6】Shuffle-Map端文件合并
在了解Spark-Shuffle原理之后,我们看下实际生产环境中,减少Map端输出写入文件数量的优化效果,不了解的可以考古。
2024-05-30 16:08:14
746
原创 Spark常见算子详解
groupByKey 和groupby 的区别是前者是确定以key为分组,所以只返回value的迭代器,程序上后者不确定以什么来分组,所以返回[(String,Int) (K,V)]定义:countByKey算子统计K-v类型的数据中的Key的次数,countByValue统计所有的value出现的次数,统计对象可以是K-v,也可以是List等。定义:rdd.aggregateByKey((初始化的值)(分区内迭代计算的逻辑)(分区间计算的逻辑))
2024-05-28 22:46:39
2456
原创 Spark-Core【Shuffle原理】-【源码】
因为不是CheckPoint,所以走compute方法,发现是个抽象类,RDD抽象类里面有很多,因为我们是属于ShuffleRDD嘛,所以在ShuffleRDD.scala里面,发现抽象的compute方法,所以其实每种RDD都有不同的compute方法?文字理解:如果只落一个文件,那么三个Task去分,不知道应该从哪里开始读起,如果落三个文件,任务一多,就会形成小文件的问题,所以最好的办法是,生成一个数据文件,一个索引文件可以通过源码解析得知,Spark的原理。阅读DAGSchedule.scala。
2024-05-24 15:58:43
334
1
原创 Spark项目之用户行为【性能调优3】RDD重构以及持久化(待补充项目内容)
重构,提取一些公共的RDD进行持久化优化需求:在之前的 Wordcount 案例的基础上,我要同时实现 reduceByKey 和 groupByKey ,并且进行优化,同时重用代码和数据图解:结论:所以需要持久化 mapRDD 的数据 (内存 / 磁盘上)
2024-05-22 23:05:12
273
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人