长沙建站模板大全,如何防止网站被攻击,莱芜网站建设与管理,公司官方网站制作一、spark的内存分布
堆内内存#xff1a;在这使用堆内内存的时候#xff0c;如果我们设置了堆内内存2个g的话#xff0c;读取的数据也是两个g#xff0c;此时又来两个g的数据#xff0c;这样就会产生OOM溢出#xff0c;因为处理完两个g的数据#xff0c;并不会马上进行…一、spark的内存分布
堆内内存在这使用堆内内存的时候如果我们设置了堆内内存2个g的话读取的数据也是两个g此时又来两个g的数据这样就会产生OOM溢出因为处理完两个g的数据并不会马上进行GC。
堆外内存这样我们就可以使用堆外内存也就是物理内存堆外内存可以精准的申请和释放空间不需要Gc性能比较高提升了任务的效率。二、Spark的宽窄依赖
宽依赖一个父RDD分区中的数据划分到多个子RDD分区的过程也就说明有shuffle的过程。如GroupByKeyreduceByKeyjoinsortByKey等。
窄依赖一个父RDD分区中的数据被一个子RDD分区所使用mapfilter。三、Spark中reduceByKey和groupByKey的区别
reduceByKey按照key进行聚合在shuffle之前有个combine预聚合的操作返回的结果是RDD(K,V)
groupByKEy直接按照key进行进行分组直接进行shuffle
建议使用reduceByKey 但注意是否会影响最终的业务逻辑四、Spark的缓存
将频繁使用的RDD进行缓存到内存中后面RDD用到的时候去内存中区就不需要重复了提高任务的执行效率
cache时间数据保存在内存中
程序结束后会被清除或手动调用unpersist方法清除
会记录RDD的血缘关系五、什么是RDD
一个弹性分布式的数据集
数据可以保存在内存中也可以保存在磁盘中
他是一个分布式的计算的集合
RDD有3个特征分区、不可变、并行操作
RDD是有好多分区组成的操作RDD的时候对RDD里的每个分区进行操作
RDD使用算子进行操作
算子分为转换算子与行动算子六、Spark落盘场景
在shuffle中会进行落盘的操作
shuffle分为shuffle write和shuffle read
在这期间会进行一次落盘操作七、Spark的shffle
Spark使用涉及到一些shuffle算子的时候就会进行shuffle
shuffle的过程八、Spark内存OOM的情况
1. map过程中产生大量对象导致内存溢出
2. 数据不平衡导致内存溢出
3. coalesce调用导致内存溢出
4. shuffle后内存溢出
5. standalone模式下资源分配不均匀导致内存溢出
6. 在RDD中公用对象能减少OOM的情况九、怎样避免SparkOOM
1. 使用mapPartition代替部分map操作或者连续使用map的操作
2. broadcast join和普通join
3. 先filter在join
4. partitionBy优化
5. combineDyKey的使用
6. 参数优化十、Spark shuffle的默认并行度
由spark.sql.shuffle.partitions决定默认并行度为200数据量比较的是并且集群性能可以的时候也已适当的加大十一、Coalesce和Repartition的区别
Coalesce和Repartition两个都是用来改变分区的Coalesce用来缩减分区但不会进行shuffleRepartition用来增加分区会进行shuffle的操作在spark中减少文件个数会使用coalesce来减少分区但如果分区量过大分区数过少就会出现OOM所以coalesce缩小分区个数也需合理。十二、如何使用spark实现TopN的操作
方法一1按照key对数据进行聚合reduceByKey2将value转换为数组利用scala中sortBy或者sortWith进行排序mapValues数据量太大会OOM。
方法二1自定义分区器按照key进行分区使不同的key进到不同的分区中2对每个分区运用spark的排序算子进行排序十三、spark中的共享变量
累加器是spark中提供的一种分布式变量机制其原理类似与mapreduce先分后合累加器的一个常用用途在对作业执行中的事件进行计数。而广播变量用来搞笑分发较大的对象。十四、Coalesce和Repartition的关系与区别
关系都是用来修改RDD的partition数量的repartiotion底层调用的就是coalesce()方法coalesce(numPaitition,shuffletrue)
区别repartiotion一定会发生shufflecoalesce根据传入的参数来判断是否会发生shuffle一般情况下增大rdd的partition的数量使用repartition减少partition数量使用coalesce十五、Spark的调优
遵循几个原则
原则一避免重复使用的RDD
原则二尽可能复用一个RDD
原则三对多次使用的RDD进行持久化
原则四尽量避免使用shuffle类的算子
原则五使用map-side预聚合的shuffle操作
原则六使用高性能的算子
原则七广播大变量
原则八使用Kryo优化序列化性能
原则九优化数据结构十六、Spark中RDD与DataFream及DataSet之间的关系
宏观RDD弹性分布式数据集Datafream在RDD上多了一层schemaDataset在datafream之上多了一个数据结构
微观RDD优点 编译时编译时可以检查类型是否安全面向对象的风格可以通过直接点方法对数据进行操作缺点 序列化与反序列化消耗资源太大反序列化时会将数据结构与数据内容都序列化GC操作频繁RDD要频繁的创建和销毁务必会产生很多的GC操作Datafream在RDD之上引入一层schema与off-head多个RDD每行的数据结构都一致spark就可以通过schema来识别数据结构在反序列化的时候可以只反序列化数据而结构就可以省略掉了Dataset综合了RDD与Datafream的优点并引入encoding数据再进行序列化时ancoding出来的字节码和off-head互通这样就可以按需读取数据
三者之间的转换rdd - df toDFrdd - ds toDSdf - ds as[]ds - df toDFds - rdd RDDdf - rdd RDD十七、简述介绍sparkStreaming窗口函数的原理
窗口函数就是在原来定义的sparkStreaming计算批次大小的基础上在进行封转每次计算多个批次的数据同时还需要传递一个滑动步长的参数用来设置当前任务完成之后下次从什么地方开始计算。十八、SparkStreaming精准一次消费
1. 手动维护偏移量
2. 处理完业务数据后在进行提交偏移量的操作
极端条件下如果在提交偏移量断网或停电会造成spark程序第二次启动时重复消费问题所以在涉及到金额或精确度非常高的场景会使用事务保持精准一次消费。