Spark 应用程序中的压缩率

问题描述 投票:0回答:1

我正在使用 Spark 在集群中做一些基准测试。在各种各样的事情中,我想对通过序列化和压缩实现的平均大小减少有一个很好的近似。我在客户端部署模式下运行并与本地主机一起运行,并且厌倦了 spark 1.6 和 2.2 版本的外壳。

我想计算内存中的大小,然后计算磁盘上的大小,所以分数应该是我的答案。显然,我在获取磁盘大小方面没有问题,但我真的在为内存中的大小而苦苦挣扎。

由于我的 RDD 由双精度组成,它们在内存中各占 8 个字节,我尝试计算 RDD 中元素的数量并乘以 8,但这遗漏了很多东西。 第二种方法是使用“SizeEstimator”(https://spark.apache.org/docs/2.3.0/api/scala/index.html#org.apache.spark.util.SizeEstimator$ ), 但这给了我疯狂的结果!在 Spark 1.6 中,它是随机的 30、130 或 230(磁盘上的 47 MB),在 Spark 2.2 中,它从 30 开始,每次我执行它时它都会增加 0 或 1。我知道它说它不是非常准确,但我可以甚至找到一点一致性!我什至尝试只在内存中设置持久级别 rdd.persist(StorageLevel.MEMORY_ONLY) 但仍然没有改变。

有没有其他方法可以获得 RDD 的内存大小?还是我应该尝试另一种方法?我正在使用 rdd.SaveAsTextFile 写入磁盘,并通过 RandomRDDs.uniformRDD.

生成 rdd

编辑

示例代码:

val rdd = RandomRDDs.uniformRDD(sc, nBlocks, nThreads)
rdd.persist(StorageLevel.MEMORY_ONLY_SER)
println("RDD count: " + rdd.count)
rdd.saveAsObjectFile("file:///path/to/folder")

阅读

val rdd = sc.wholeTextFiles(name,nThreads)
rdd.count() //action so I'm sure the file is actually read

网页界面

apache-spark serialization compression benchmarking
1个回答
0
投票

尝试按照您提到的方式缓存 rdd,并检查 spark UI 的存储选项卡。

默认情况下,rdd 被反序列化并存储在内存中。如果你想序列化它然后专门使用带有选项 MEMORY_ONLY_SER 的持久化。内存消耗会更少。在磁盘中,数据总是以序列化的方式存储

检查一次 spark UI

© www.soinside.com 2019 - 2024. All rights reserved.