自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 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 87

原创 Spark-SQL_RDD/DataFrame/DataSet的区别

dataSet:dateSet 就是在 DateFrame 的基础上增加一个强类型的概念,就是我自己去定义属性是什么类型,而不是靠读取数据定义类型。DataFrame:就是在 RDD 的基础上,加上结构,赋予数据的含义,类似 Sql 里面的表。RDD 与 DataSet 之间的转换,如果一层一层的来,太麻烦了,一步转换的方法如下。RDD:只关注数据本身,不关注数据代表的含义。DataSet 转换成 rdd 的方法。

2024-06-16 23:20:00 196

原创 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 188

原创 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 834

原创 Spark项目之用户行为【性能调优8】算子调优

实践:使用之前先评估RDD里面每个分区的数据量是多大,然后每个Excutor分到的内存是多大,避免同时处理大量数据造成OOM,在用户画像项目里面,我们拿到每行的数据转换成Tuple<sessionid,Row>的格式等很多转换格式的map都有做类似的优化。原理:map是对RDD中,每一行Row数据进行自定义转换处理,当数据量有一定程度时,自定义函数会执行多次,增加开销,这时候可以通过mapPartition来处理,他会一个分区的数据同时提交执行自定义函数转换RDD。

2024-06-05 16:37:52 231

原创 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 207

原创 Spark项目之用户行为【性能调优6】Shuffle-Map端文件合并

在了解Spark-Shuffle原理之后,我们看下实际生产环境中,减少Map端输出写入文件数量的优化效果,不了解的可以考古。

2024-05-30 16:08:14 273

原创 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 587

原创 Spark-Core【Shuffle原理】-【源码】

因为不是CheckPoint,所以走compute方法,发现是个抽象类,RDD抽象类里面有很多,因为我们是属于ShuffleRDD嘛,所以在ShuffleRDD.scala里面,发现抽象的compute方法,所以其实每种RDD都有不同的compute方法?文字理解:如果只落一个文件,那么三个Task去分,不知道应该从哪里开始读起,如果落三个文件,任务一多,就会形成小文件的问题,所以最好的办法是,生成一个数据文件,一个索引文件可以通过源码解析得知,Spark的原理。阅读DAGSchedule.scala。

2024-05-24 15:58:43 241 1

原创 Spark项目之用户行为【性能调优3】RDD重构以及持久化(待补充项目内容)

重构,提取一些公共的RDD进行持久化优化需求:在之前的 Wordcount 案例的基础上,我要同时实现 reduceByKey 和 groupByKey ,并且进行优化,同时重用代码和数据图解:结论:所以需要持久化 mapRDD 的数据 (内存 / 磁盘上)

2024-05-22 23:05:12 234

空空如也

空空如也

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

TA关注的人

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