【发布时间】:2015-10-06 00:54:14
【问题描述】:
我有一个非常强大的集群,有 3 个节点,每个节点有 24 个内核,总共 96gb RAM = 288gb。我尝试将 100gb 的 tsv 文件加载到 Spark 缓存中,并对数据进行一系列简单的计算,例如 sum(col20) by col2-col4 组合。我认为这是缓存使用的明确方案。
但在 Spark 执行期间,我发现尽管 RAM 空间很大,但缓存永远不会加载 100% 的数据。执行 1 小时后,我有 70% 的分区在缓存中,并且 170gb 中的 75gb 缓存使用量可用。看起来 Spark 以某种方式限制了它添加到缓存中的块/分区的数量,而不是在第一次操作时添加所有块/分区,并且从一开始就具有出色的性能。
我使用 MEMORY_ONLY_SER / Kryo(缓存大小约为磁盘数据大小的 110%)
是否有人有类似的经验或知道一些可能导致这种缓存行为的 Spark 配置/环境条件?
【问题讨论】:
-
你是如何提交工作的?
-
你的意思是我是否通过 spark-submit 运行这个工作?我是。顺便说一句,现在我将拆分大小从 400mb 减少到 200mb(将分区数从 250 增加到 500),这显着提高了“缓存率”(在循环中的第一次操作完成后提高到 80%)。但是,为什么不是 100%?))
-
不,你的 spark-submit 行是什么?
-
spark-submit --class co.comp.explore.EventsGroupByTwoFields --master spark://hadoop.namenode:7077 --name testJoin --num-executors 11 --driver-memory 22g - -executor-memory 22g --executor-cores 6 /path/to/jar/jarName.jar --inputPath hdfs://hadoop.namenode/res/Events_20150707/*/ --outputPathPrefix /path/to/local/out/文件夹/Events_2D_
标签: caching apache-spark