RDD持久化、广播、累加器

本地部署DeepSeek-Coder-6.7B 离线版的完整指南:打造适配当前系统的AI助手 《DeepSeek-Coder-6.7B本地部署指南》详细介绍了如何离线部署这款专注于代码生成的AI模型。文章涵盖硬件要求(推荐8核CPU、32GB内存、NVIDIA RTX3080显卡)、软件依赖(Python3.8+、CUDA11.0+、PyTorch1.9+)以及具体安装步骤,包括模型下载、路径配置和GPU加速设置。重点说明如何通过输入系统配置文档和使用说明书,让模型生成适配特定系统的代码,并提供了参数调优和模型微调的方法。该指南旨在帮助开发者在本地安全高效地使用AI助手,实现代码自动生成与优化,提升 阅读详情

所有的节点host配置一样,可以互相访问
命令:scp /etc/hosts root@node1:/etc/hosts(node1,2,3,4)
常用的Action:reduce,count,saveTextFile,foreach,countByKey
如果想在命令终端中看到执行结果,就必须Collect
这里写图片描述
凡是Action级别的操作都会触发sc.runJob

sc
val numbers=sc.parallelize
val numbers =sc.parallelize(1 to 100)
numbers.reduce(_+_)
val result=numbers.map(2*_)
val data=result.collect
numbers
1 to 100
numbers.count
val topN=numbers.take(5)
val scores=Array(Tuple2(1,100),Tuple2(2,100),Tuple2(3,100),Tuple2(1,100),)
val content=scores.paralelize//转化成RDD
val data=content.countBykey
sc.textFile("/root/javacount.sh").flapMap().map.reduceByKey.saveAsFile("")

RDD缓存情况
1,某步骤计算特别耗时;
2,计算链条特别长的情况;
3,checkpoint所在的RDD也一定要持久化数据;
4,shuffle之后;网络传输,丢失重来
5,shuffle之前(框架默认帮助我们把数据持久化到本地磁盘)

StorageLevel
Memory_only_2在两台机器内存中缓存同样的东西,
Memory_only_ser节约内存,但是需要反序列化
MEMORY_AND_DISK主要是降低OOM的可能性

cache是persist的特例,只能缓存在内存
Cache之后一定不能立即有其它算子!

scala>sc.textFile("/data/putfile.txt").flatMap(_.split(" ")).map(word=> (word,1)).reduceByKey(_+_).count

scala>sc.textFile("/data/putfile.txt").flatMap(_.split(" ")).map(word=> (word,1)).reduceByKey(_+_).cache

scala>sc.textFile("/data/putfile.txt").flatMap(_.split(" ")).map(word=>(word,1)).reduceByKey(_+_).cache.count//此时变慢,主要是Cache之后一定不能立即有其它算子!

persist是lazy级别的
unpersist是eager级别的

为什么需要广播
大的变量:减少冗余,减少传输,每个task都要拷贝一份数据副本,一个excutor保存一份,(函数式编程,状态一致性,但耗内存)–》OOM
join:
shuffle:
同步:全局变量,只读,
广播是由Driver发给当前Application分配的所有Executor内存级别的全局只读变量,Executor中的线程池中的线程共享该全局变量,极大的减少了网络传输(否则的话每个Task都要传输一次该变量)并极大的节省了内存,当然也隐形的提高的CPU的有效工作
原因:每一task都需要一个全局变量,要是每个task都有一个全局变量的话,会产生OOM

这里写图片描述

val number =10
val broadcastNumber =sc.brodcast(number)//只能由sc广播

输出

org.apache.spark.broadcast.Broadcast[Int] = Broadcast(33)
val data=sc.parallelize(1 to 100)//task使用广播变量,所以要创建RDD
val bn = data.map(_* broadcastNumber.value)

累加器
Accumulator:对于Executor只能修改但不可读,只对Driver可读
记录集群状态,尤其全局唯一状态,
管理有点代价

val sum = sc.accumulator(0)
val data = sc.parallelize(0 to 5)
data.foreach(item => sum += item)
println(sum)

作业:
1.手动清除到persist内容
2。阅读累加器源码

196.Spark(三):RDD 行动算子,序列化,依赖关系,持久化,分区器,累加器广播变量 RDD 行动算子,序列化,依赖关系,持久化,分区器,累加器广播变量 阅读详情

相关推荐

Lumerical 教程目录,说明及个人感悟(共计138篇,持续更新中)

Lumerical---教程说明及个人感悟

u011699626的博客 1万+

Spark-RDD行动算子、累加器广播变量学习总结

combOp: (U, U) => U 分区间的处理逻辑。* (U, V) => U 分区内的聚合逻辑。// 1. 继承 AccumulatorV2,并设定泛型。// 如果没有相同的单词,那么在 map 中增加这个单词。// 如果有相同的单词,那么单词的数量加 1。// 查询 map 中是否存在相同的单词。// 向累加器中增加数据 (In)// 返回累加器的结果 (Out)// 2. 重写累加器的抽象方法。// 序列化成对象保存到文件。// 累加器是否为初始状态。// 两个 Map 的合并。

qq_30987939的博客 550

托利多3880E+称内程序!

托利多3880E+称内程序!解决电脑系统商品公斤单价 ,电子称标签单价只能打公斤价不能打市斤价格按住*号打开称,接着用软件传称,

Spark基础【RDD累加器广播变量、一个小案例】

使用累加器实现wordcount// 构建一个对象 val acc = new LongAccumulator}根据源码来看,自定义累加器的流程继承AccumulatorV2类定义泛型IN :输入数据的类型 StringOUT 输出数据的类型 Map[K, V]重写方法,6个(3【与计算相关】 + 3【与状态相关】)isZero:判断累加器是否为初始状态copy: 复制累加器reset: 重置累加器,原来的map中有数据,现在需要将其清空add: 从外部向累加器中添加数据。...

weixin_43923463的博客 644

Spark学习--4、键值对RDD数据分区、累加器广播变量、SparkCore实战(Top10热门品类)

键值对RDD数据分区、累加器广播变量、SparkCore实战(Top10热门品类)

星光不问赶路人,岁月不负有心人 541

Spark(13):RDD广播变量和累加器

/ 自定义累加器// 1. 继承 AccumulatorV2,并设定泛型// 2. 重写累加器的抽象方法// 累加器是否为初始状态// 复制累加器// 重置累加器// 向累加器中增加数据 (In)// 查询 map 中是否存在相同的单词// 如果有相同的单词,那么单词的数量加 1// 如果没有相同的单词,那么在 map 中增加这个单词// 合并累加器// 两个 Map 的合并innerMap// 返回累加器的结果 (Out)注:其他Spark相关系列文章链接由此进 ->

yang_shibiao的博客 584

Spark——(RDD分区,RDD分区器,广播变量,累加器

对于给定的key,计算其hashCode,并除以分区的个数取余,如果余数小于0,则用 余数+分区的个数,最后返回的值就是这个key所属的分区ID。水塘采样:从包含n个项目的集合S中选取k个样本,其中n为一很大或未知的数量,尤其适用于不能把所有n个项目都存放到主内存的情况;数据重组需要规则,最常见的就是基于 Hash 的分区,此外还有一种复杂的基于抽样Range 分区方法;自定义分区器:Spark允许用户通过自定义的Partitioner对象,灵活的来控制RDD的分区方式。通过textFile创建。

qq_43408367的博客 482

RDD持久化Spark广播累加器笔记

RDD持久化:操作RDD时如何准确保存结果,cache和persist,checkpoint。 Spark广播:构建算法时,对降低网络传输的数据量,提高内存使用效率,加快程序运行速度很重要。 Spark累加器:全局的指针步减变量,只能增加累加器的内容,Executor中不能读累加器,Driver中可以读累加器。 一、RDD持久化...

weixin_41074929的博客 571

Spark RDD持久化广播变量和累加器

https://blog.csdn.net/matrix_google/article/details/83304063 https://wjrsbu.smartapps.cn/zhihu/article?id=61555283&isShared=1&hostname=baiduboxapp&_swebfr=1 Spark RDD持久化 RDD持久化工作原理 Spark非常重要的一个功能特性就是可以将RDD持久化在内存中。当对RDD执行持久化操作时,每个节点都会将自己操.

hellojoy的博客 331

Spark IMF传奇行动第18课:RDD持久化广播累加器总结

昨晚听了王家林老师的Spark IMF传奇行动第18课:RDD持久化广播累加器作业是unpersist试验,阅读累加器源码看内部工作机制: scala> val rdd = sc.parallelize(1 to 1000) rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at para...

103

Spark RDD持久化(缓存、检查点、广播变量和累加器

RDD持久化1:缓存 RDD缓存机制 缓存数据至内存/磁盘,可大幅度提升Spark应用性能。 cache=persist(MEMORY) persist 缓存策略:StorageLevel MEMORY_ONLY(默认) MEMORY_AND_DISK DISK_ONLY … 缓存应用场景 从文件加载数据后,因为重新获取文件成本较高; 经过较多的算子变换之后,重新计算成本较高; 单个非常消耗资源的算子之后。 注意事项 cache()或persist()遇到Action

qq_43012693的博客 364

SparkRDD持久化广播累加器

RDD持久化广播累加器实质上分别涉及了RDD的数据如何保存,RDD在构建高效算法的时候涉及了persist或者checkpoint,以及广播累加器,通过spark-shell可以试验一些小功能,spark-shell本身是spark的发行包推出的一个程序,通过这个程序可以直接写代码,spark-shell会把代码直接进行运行。1.1.RDD持久化实...

weixin_33845477的博客 152

Spark持久化操作,共享变量,broadcast广播变量,accumulator累加器Spark RDD的分区与依赖关系(七)

Spark中最重要的功能之一是跨操作在内存中持久化(或缓存)数据集。当您持久化RDD时,每个节点将其计算的任何分区存储在内存中,并在该数据集(或从该数据集派生的数据集)上的其他操作中重用这些分区。这使得未来的行动更快(通常超过10倍)。缓存是迭代算法和快速交互使用的关键工具。可以使用persist()或cache()方法将RDD标记为持久化。第一次在动作中计算时,它将保存在节点的内存中。Spark的缓存是容错的——如果RDD的任何分区丢失,它将使用最初创建它的转换自动重新计算。

大数据爱好者的博客 1519

RDD持久化/缓存/容错机制/宽窄依赖/生成和划分Stage/累加器广播变量

RDD持久化/缓存/容错机制/宽窄依赖/生成和划分Stage/累加器广播变量 1、RDD持久化/缓存 Rdd数据持久化什么作用? 1、对多次使用的rdd进行缓存,缓存到内存,当后续频繁使用时直接在内存中读取缓存的数据,不需要重新计算。 2、将RDD结果写入硬盘(容错机制),当RDD丢失数据时,或依赖的RDD丢失数据时,可以使用持久化到硬盘的数据恢复。 持久化/缓存(内存) 缓存方法 Pers...

汉子一枚 1711
上一篇: RDD实战
下一篇: Spark基础排序+二次排序(java+scala)
靖-Drei
博客等级 码龄15年 113粉丝 165原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值