gpt4 book ai didi

apache-spark - 为什么 persist(StorageLevel.MEMORY_AND_DISK) 给出与 HBase 的 cache() 不同的结果?

转载 作者:行者123 更新时间:2023-12-05 07:30:57 24 4
gpt4 key购买 nike

我问这个问题听起来可能很天真,但这是我最近在项目中遇到的一个问题。需要对此有更好的了解。

df.persist(StorageLevel.MEMORY_AND_DISK)

每当我们在 HBase 读取上使用这种持久化时 - 相同的数据会一次又一次地返回给流作业的其他后续批处理,但 HBase 会为每个批处理运行更新。

HBase读取代码:

val df = sqlContext.read.options(Map(HBaseTableCatalog.tableCatalog -> schema)).format(dbSetup.dbClass).load().persist(StorageLevel.MEMORY_AND_DISK)

我用 cache() 替换了 persist(StorageLevel.MEMORY_AND_DISK) 并且它按预期从 HBase 表返回更新的记录。

我们尝试使用 persist(StorageLevel.MEMORY_AND_DISK) 的原因是为了确保内存中的存储空间不会变满,并且我们不会在执行过程中重新进行所有转换特定流的。

Spark 版本 - 1.6.3HBase 版本 - 1.1.2.2.6.4.42-1

有人可以向我解释一下并帮助我更好地理解吗?

最佳答案

正如您提到的,您正在寻找一个“为什么”的原因,因此我要回答这个问题,否则这个问题将仍然没有答案,因为现在没有合理的理由运行 spark 1.6.3 来感知特定 HBASE 版本会发生什么.

在内部,当您使用 cache() 时,spark 会调用 persist() 并且它在 RDD 上的行为与在数据集(或数据帧)上的行为不同。在 RDD 上,它使用 MEMORY_ONLY,在数据集上使用 MEMORY_AND_DISK。我看不到你(完全)编码的内容,但总的来说,我可以说,你不应该面对缓存和持久化这两种方式之间的区别,你的问题只是一个顺便说一句,版本不兼容,或者仅仅是 Apache 未修复的错误。

有几个地方要检查看看哪里出了问题

在此链接中https://spark.apache.org/releases/spark-release-1-6-3.html你会发现代码的维护在分支 1.6 中进行,所以这是找到代码的地方 https://github.com/apache/spark/blob/branch-1.6/core/src/main/scala/org/apache/spark/CacheManager.scala

希望对您有所帮助。

关于apache-spark - 为什么 persist(StorageLevel.MEMORY_AND_DISK) 给出与 HBase 的 cache() 不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52032904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com