.spark
andycao1
这个作者很懒,什么都没留下…
展开
-
尽量避免使用 IN 和 NOT IN ?
not exists 用left anti join 代替。exists用join。用什么代替 exists not exists , join。最严重的是数据容易出错。原创 2022-11-23 18:38:10 · 813 阅读 · 1 评论 -
spark中禁用广播变量失败的原因
sql中有not in,尝试改成not exists,可能产生BroadcastNestedLoopJoin,导致广播无法禁掉。禁止使用广播变量的配置参数 spark.sql.autoBroadcastJoinThreshold = -1。not in 改成not exists 等同于。原创 2022-11-23 13:39:23 · 1959 阅读 · 0 评论 -
spark的shuffle原理流程图
原创 2021-12-07 16:07:30 · 613 阅读 · 0 评论 -
spark的task的任务调度
原创 2021-12-07 16:05:52 · 172 阅读 · 0 评论 -
spark任务划分
原创 2021-12-07 16:05:12 · 182 阅读 · 0 评论 -
Spark通讯架构
原创 2021-12-07 16:04:33 · 113 阅读 · 0 评论 -
Spark提交流程(YarnCluster)
原创 2021-12-07 16:03:36 · 173 阅读 · 0 评论 -
spark的shuffle分类
spark2.0版本以后默认使用的是sortshuffle在该模式下,数据会先写入一个数据结构,reduceByKey写入Map,一边通过Map局部聚合,一边写入内存。Join算子写入ArrayList直接写入内存中。然后需要判断是否达到阈值,如果达到就会将内存数据结构的数据写入到磁盘,清空内存数据结构。在溢写磁盘前,先根据key进行排序,排序过后的数据,会分批写入到磁盘文件中。默认批次为10000条,数据会以每批一万条写入到磁盘文件。写入磁盘文件通过缓冲区溢写的方式,每次溢写都会产生一..原创 2021-12-07 16:02:49 · 380 阅读 · 0 评论 -
spark的累加器和自定义累加器详解
累加器:分布式共享只写变量。(Executor和Executor之间不能读数据)累加器用来把Executor端变量信息聚合到Driver端。在Driver中定义的一个变量,在Executor端的每个task都会得到这个变量的一份新的副本,每个task更新这些副本的值后,传回Driver端进行合并计算。累加器使用(1)累加器定义(SparkContext.accumulator(initialValue)方法)val sum: LongAccumulator = sc.longA.原创 2021-11-30 10:14:07 · 1532 阅读 · 0 评论 -
spark的数据读取与保存
Spark的数据读取及数据保存可以从两个维度来作区分:文件格式以及文件系统。文件格式分为:Text文件、Sequence文件以及Object文件;文件系统分为:本地文件系统、HDFS以及数据库。1.Text文件2.Sequence文件SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File)。在SparkContext中,可以调用sequenceFile[keyClass, valueClass](path)。.原创 2021-11-30 10:09:08 · 2240 阅读 · 0 评论 -
spark的rdd数据如何分区
Spark目前支持Hash分区、Range分区和用户自定义分区。Hash分区为当前的默认分区。分区器直接决定了RDD中分区的个数、RDD中每条数据经过Shuffle后进入哪个分区和Reduce的个数。1)注意:(1)只有Key-Value类型的RDD才有分区器,非Key-Value类型的RDD分区的值是None(2)每个RDD的分区ID范围:0~numPartitions-1,决定这个值是属于那个分区的。Hash分区Ranger分区...原创 2021-11-30 10:04:31 · 966 阅读 · 0 评论 -
spark的缓存和检查点的配合使用
缓存和检查点区别1)Cache缓存只是将数据保存起来,不切断血缘依赖。Checkpoint检查点切断血缘依赖。2)Cache缓存的数据通常存储在磁盘、内存等地方,可靠性低。Checkpoint的数据通常存储在HDFS等容错、高可用的文件系统,可靠性高。3)建议对checkpoint()的RDD使用Cache缓存,这样checkpoint的job只需从Cache缓存中读取数据即可,否则需要再从头计算一次RDD。4)如果使用完了缓存,可以通过unpersist()方法释放缓存最后使.原创 2021-11-30 09:58:11 · 294 阅读 · 0 评论 -
spark中RDD任务切分
中间分为:Application、Job、Stage和Task(1)Application:初始化一个SparkContext即生成一个Application;(2)Job:一个Action算子就会生成一个Job;(3)Stage:Stage等于宽依赖的个数加1;(4)Task:一个Stage阶段中,最后一个RDD的分区个数就是Task的个数。...原创 2021-11-29 16:15:54 · 610 阅读 · 0 评论 -
spark中行动算子和scala中的foreach() 重名函数区别
原创 2021-11-29 16:08:47 · 210 阅读 · 0 评论 -
spark中的RDD序列化
在实际开发中我们往往需要自己定义一些对于RDD的操作,那么此时需要注意的是,初始化工作是在Driver端进行的,而实际运行程序是在Executor端进行的,这就涉及到了跨进程通信,是需要1)闭包引入(有闭包就需要进行序列化)序列化方法和属性2)说明Driver:算子以外的代码都是在Driver端执行Executor:算子里面的代码都是在Executor端执行3 Kryo序列化框架参考地址: https://github.com/EsotericSoftware/kryoJ原创 2021-11-29 14:57:20 · 692 阅读 · 0 评论 -
spark的RDD序列化 最终用case 样例化都可以解决
在实际开发中我们往往需要自己定义一些对于RDD的操作,那么此时需要注意的是,初始化工作是在Driver端进行的,而实际运行程序是在Executor端进行的,这就涉及到了跨进程通信,是需要序列化的。下面我们看几个例子:2 序列化方法和属性1)说明Driver:算子以外的代码都是在Driver端执行Executor:算子里面的代码都是在Executor端执行3 Kryo序列化框架参考地址: https://github.com/EsotericSoftware/kryoJa.原创 2021-11-29 13:06:11 · 211 阅读 · 0 评论 -
Key-Value类型
1 partitionBy()按照K重新分区1)函数签名:def partitionBy(partitioner: Partitioner): RDD[(K, V)]2)功能说明将RDD[K,V]中的K按照指定Partitioner重新进行分区;如果原有的RDD和新的RDD是一致的话就不进行分区,否则会产生Shuffle过程。3)需求说明:创建一个3个分区的RDD,对其重新分区2)自定义分区器要实现自定义分区器,需要继承org.apache.spark.Partitioner类,原创 2021-11-29 13:02:56 · 607 阅读 · 0 评论 -
spark双Value类型转换算子
1 intersection()交集2 union()并集不去重3 subtract()差集4 zip()拉链原创 2021-11-29 12:57:57 · 193 阅读 · 0 评论 -
Transformation转换算子RDD整体上分为Value类型
1 Value类型mapPartitions()以分区为单位执行Map3 map()和mapPartitions()区别.4 mapPartitionsWithIndex()带分区号1)函数签名:def mapPartitionsWithIndex[U: ClassTag](f: (Int, Iterator[T]) => Iterator[U], // Int表示分区编号preservesPartitioning: B...原创 2021-11-29 12:54:31 · 265 阅读 · 0 评论 -
spark的行动算子介绍Action
行动算子是触发了整个作业的执行。因为转换算子都是懒加载,并不会立即执行。1 reduce()聚合1)函数签名:def reduce(f: (T, T) => T): T2)功能说明:f函数聚集RDD中的所有元素,先聚合分区内数据,再聚合分区间数据。2 collect()以数组的形式返回数据集1)函数签名:def collect(): Array[T]2)功能说明:在驱动程序中,以数组Array的形式返回数据集的所有元素。3 count()返回RDD中元素个数1)函数签名原创 2021-11-29 12:43:24 · 315 阅读 · 0 评论 -
Saprk中五个bykey分析对比
Saprk中五个bykey分析对比Groupbykey,reduceByKey、foldByKey、aggregateByKey、combineByKeyGroupbykey, 功能最少只根据key进行分组这五个bykey底层代码调用的都是combineByKeyWithClassTag方法...原创 2021-11-28 22:39:55 · 171 阅读 · 0 评论 -
spark任务划分源码点击流程
=====================================Stage划分源码collect算子点进去 点runjob runjob runjob runjob runjob 直到进入DAGScheduler类的734行的runjob方法DAGScheduler类的742行有一个submitJob(提交job的方法) 点进去 进入到 681行往下翻 来到714行 有个eventProcessLoop.post() DAGScheduler将任务压到消息队列里面 点进去进入到EventL.原创 2021-11-27 11:13:32 · 91 阅读 · 0 评论 -
打包太大解决排除环境型依赖
原创 2021-11-26 11:59:03 · 108 阅读 · 0 评论 -
查询jps带参数设置9
原创 2021-11-26 11:58:01 · 102 阅读 · 0 评论 -
查询jps带参数设置2
原创 2021-11-26 11:57:12 · 81 阅读 · 0 评论 -
把spar的默认地址改成hdfs
原创 2021-11-26 11:53:18 · 311 阅读 · 0 评论