Spark有broadcast
变量(只读)和accumulator
变量,可以是节点更新,但不能读取.有没有办法 - 或者一种解决方法 - 来定义一个既可以更新又可以读取的变量?
这种读/写全局变量的一个要求是实现缓存.当文件作为rdd加载和处理时,执行计算.这些计算的结果 - 发生在并行运行的几个节点中 - 需要放在一个映射中,该映射具有正在处理的实体的一些属性的关键.当处理rdd中的后续实体时,将查询缓存.
Scala确实有ScalaCache
,它是缓存实现的外观,如Google Guava
.但是如何在Spark应用程序中包含和访问这样的缓存?
缓存可以定义为驱动程序应用程序中的一个变量,用于创建SparkContext
.但那会有两个问题:
实现和存储此类缓存的最佳方法是什么?
谢谢
那么,这样做的最好方法就是不做这一切.一般来说,Spark处理模型不提供任何保证
给定一段代码执行.此外,任何直接依赖于Spark架构的更新都不是精细的.
这些属性使Spark具有可扩展性和弹性,但同样这使得保持共享可变状态非常难以实现并且大部分时间完全无用.
如果你想要的只是一个简单的缓存,那么你有多个选择:
如果应用程序需要更复杂的通信,您可以尝试使用不同的消息传递工具来保持同步状态,但通常它需要复杂且可能很脆弱的代码.
归档时间: |
|
查看次数: |
7000 次 |
最近记录: |