当前位置:首页 » 文件管理 » spark缓存

spark缓存

发布时间: 2022-02-07 07:27:32

‘壹’ spark sql 会自动进行cache吗

1.几种缓存数据的方法
例如有一张Hive表叫做activity
1.CACHE TABLE
//缓存全表
sqlContext.sql("CACHE TABLE activity")

//缓存过滤结果
sqlContext.sql("CACHE TABLE activity_cached as select * from activity where ...")

CACHE TABLE是即时生效(eager)的,如果你想等到一个action操作再缓存数据可以使用CACHE LAZY TABLE,这样操作会直到一个action操作才被触发,例如count(*)
sqlContext.sql("CACHE LAZY TABLE ...")

取消hive表缓存数据
sqlContext.sql("UNCACHE TABLE activity")

‘贰’ Spark中cache和persist的区别

通过观察RDD.scala源代码即可知道cache和persist的区别:

def persist(newLevel: StorageLevel): this.type = {
if (storageLevel != StorageLevel.NONE && newLevel != storageLevel) {
throw new UnsupportedOperationException( "Cannot change storage level of an RDD after it was already assigned a level")
}
sc.persistRDD(this)
sc.cleaner.foreach(_.registerRDDForCleanup(this))
storageLevel = newLevel
this
}
/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)

/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def cache(): this.type = persist()

可知:
1)RDD的cache()方法其实调用的就是persist方法,缓存策略均为MEMORY_ONLY;
2)可以通过persist方法手工设定StorageLevel来满足工程需要的存储级别;
3)cache或者persist并不是action;
附:cache和persist都可以用unpersist来取消

‘叁’ Spark做缓存时缓存在哪里

缓存在executor内存里

‘肆’ sparksql缓存表能做广播变量吗

共享变量
通常情况下,当向Spark操作(如map,rece)传递一个函数时,它会在一个远程集群节点上执行,它会使用函数中所有变量的副本。这些变量被复制到所有的机器上,远程机器上并没有被更新的变量会向驱动程序回传。在任务之间使用通用的,支持读写的共享变量是低效的。尽管如此,Spark提供了两种有限类型的共享变量,广播变量和累加器。

广播变量
广播变量允许程序员将一个只读的变量缓存在每台机器上,而不用在任务之间传递变量。广播变量可被用于有效地给每个节点一个大输入数据集的副本。Spark还尝试使用高效地广播算法来分发变量,进而减少通信的开销。
Spark的动作通过一系列的步骤执行,这些步骤由分布式的洗牌操作分开。Spark自动地广播每个步骤每个任务需要的通用数据。这些广播数据被序列化地缓存,在运行任务之前被反序列化出来。这意味着当我们需要在多个阶段的任务之间使用相同的数据,或者以反序列化形式缓存数据是十分重要的时候,显式地创建广播变量才有用。

通过在一个变量v上调用SparkContext.broadcast(v)可以创建广播变量。广播变量是围绕着v的封装,可以通过value方法访问这个变量。举例如下:

scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)

scala> broadcastVar.value
res0: Array[Int] = Array(1, 2, 3)

在创建了广播变量之后,在集群上的所有函数中应该使用它来替代使用v.这样v就不会不止一次地在节点之间传输了。另外,为了确保所有的节点获得相同的变量,对象v在被广播之后就不应该再修改。

累加器
累加器是仅仅被相关操作累加的变量,因此可以在并行中被有效地支持。它可以被用来实现计数器和总和。Spark原生地只支持数字类型的累加器,编程者可以添加新类型的支持。如果创建累加器时指定了名字,可以在Spark的UI界面看到。这有利于理解每个执行阶段的进程。(对于python还不支持)
累加器通过对一个初始化了的变量v调用SparkContext.accumulator(v)来创建。在集群上运行的任务可以通过add或者"+="方法在累加器上进行累加操作。但是,它们不能读取它的值。只有驱动程序能够读取它的值,通过累加器的value方法。
下面的代码展示了如何把一个数组中的所有元素累加到累加器上:

scala> val accum = sc.accumulator(0, "My Accumulator")
accum: spark.Accumulator[Int] = 0

scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)
...
10/09/29 18:41:08 INFO SparkContext: Tasks finished in 0.317106 s

scala> accum.value
res2: Int = 10

尽管上面的例子使用了内置支持的累加器类型Int,但是开发人员也可以通过继承AccumulatorParam类来创建它们自己的累加器类型。AccumulatorParam接口有两个方法:
zero方法为你的类型提供一个0值。
addInPlace方法将两个值相加。
假设我们有一个代表数学vector的Vector类。我们可以向下面这样实现:

object VectorAccumulatorParam extends AccumulatorParam[Vector] {
def zero(initialValue: Vector): Vector = {
Vector.zeros(initialValue.size)
}
def addInPlace(v1: Vector, v2: Vector): Vector = {
v1 += v2
}
}

// Then, create an Accumulator of this type:
val vecAccum = sc.accumulator(new Vector(...))(VectorAccumulatorParam)
在Scala里,Spark提供更通用的累加接口来累加数据,尽管结果的类型和累加的数据类型可能不一致(例如,通过收集在一起的元素来创建一个列表)。同时,SparkContext..accumulableCollection方法来累加通用的Scala的集合类型。

累加器仅仅在动作操作内部被更新,Spark保证每个任务在累加器上的更新操作只被执行一次,也就是说,重启任务也不会更新。在转换操作中,用户必须意识到每个任务对累加器的更新操作可能被不只一次执行,如果重新执行了任务和作业的阶段。
累加器并没有改变Spark的惰性求值模型。如果它们被RDD上的操作更新,它们的值只有当RDD因为动作操作被计算时才被更新。因此,当执行一个惰性的转换操作,比如map时,不能保证对累加器值的更新被实际执行了。下面的代码片段演示了此特性:

val accum = sc.accumulator(0)
data.map { x => accum += x; f(x) }
//在这里,accum的值仍然是0,因为没有动作操作引起map被实际的计算.

‘伍’ spark缓存是文件大于物理内存是如何处理的

这种情况,要切换一下盘符输入e:,即可,并且路径已经是work了这个是dos的基础,与python倒是无关,不过会困扰你

‘陆’ 如何把spark sql的dataset缓存

SparkSession 是 SparkSQL 的入口,然后可以基于 sparkSession 来获取或者是读取源数据来生存 DataFrameReader,在 Spark 2.x 版本中已经没有 DataFrame 的 API,它变成了 DataSet[Row] 类型的数据。

‘柒’ 怎么清除Spark的缓存

spark缓存清理机制:
MetadataCleaner对象中有一个定时器,用于清理下列的元数据信息:
MAP_OUTPUT_TRACKER:Maptask的输出元信息SPARK_CONTEXT:persistentRdds中的rddHTTP_BROADCAST, http广播的元数据
BLOCK_MANAGER:blockmanager中存储的数据SHUFFLE_BLOCK_MANAGER:shuffle的输出数据BROADCAST_VARS:Torrent方式广播broadcast的元数

‘捌’ 到底spark 缓存机制怎么用

你是指自动储存的间隔时间吗到这里看看:工具--选项--保存--保存自动恢复里面有设置“自动恢复”的选项,你可以设置缓存时间,也可以设置保存的目录,

‘玖’ spark通过哪些参数组成缓存策略

你是指自动储存的间隔时间吗到这里看看:工具--选项--保存--保存
自动恢复
里面有设置“自动恢复”的选项,你可以设置缓存时间,也可以设置保存的目录,

‘拾’ spark中cache方法的参数有哪些

1,影响CPU的性能最大的是CPU的架构,就如Haswell架构对比Thuban架构,其性能差距很大。 2,然后到CPU的核心数,核心数越多,多任务越强。 3,最后到CPU频率和缓存大小,频率越高,缓存越大,性能越好。

热点内容
登录哪里修改无线密码 发布:2024-10-23 13:29:48 浏览:541
灰蛊解压 发布:2024-10-23 13:11:47 浏览:965
掏异物解压 发布:2024-10-23 13:02:29 浏览:781
缓存穿透bitmap 发布:2024-10-23 12:54:52 浏览:673
华三服务器设置固定ip 发布:2024-10-23 12:52:09 浏览:103
樱花校园模拟器id密码如何使用 发布:2024-10-23 12:42:11 浏览:874
百度编程地图 发布:2024-10-23 12:39:50 浏览:885
五年级简便算法 发布:2024-10-23 12:30:07 浏览:263
如何建立公司服务器 发布:2024-10-23 12:07:19 浏览:475
c语言有多难 发布:2024-10-23 12:00:23 浏览:239