我已经开始学习 Spark,目前正在使用 Spark 运行 WordCount 实验(计算文本文件中每个单词的出现次数)。 该文件放置在网络安装的共享文件系统中。 我有一个包含1 个主节点和 5 个执行器的集群(每个集群都有:处理器 AMD Opteron 1.7 Ghz、24 个核心、48GB RAM、250GB 存储)。
我暂时保留了Spark的默认配置(例如spark.executor.memory = 512m)
我注意到,第一次运行程序时,执行时间较长,而第二次、第三次运行时,执行时间会减少。 例如,对于 40GB 文件,执行时间为:
- 第一次执行:419.769396 s
- 第二次执行:176.242206 s
- 第三次执行:134.411345 s
- 第四次执行:126.052158 s
- 第五次执行:126.287600 秒
我正在运行它:
> ./spark-submit --class com.spark.example.WordCount --master spark://master:7077 wordCountOriginal.jar /data/input40GB
WordCount的代码与Spark提供的示例完全相同。
我不明白为什么第一次执行和下一次执行之间有这么大的差异。我认为缓存是答案,但从我读到的 Spark 缓存同一执行中的中间结果,但这里有不同的执行。
提前致谢!
最佳答案
为了消除执行时间上的这些差异,每次执行后我都会停止主节点和节点,并手动清除操作系统缓存。经过更多调查后,我认为 Spark 仅在服务器运行时处理内存缓存和从缓存中删除数据,并且它使用 LRU(最近最少使用)策略从缓存中删除数据。如果没有手动清除缓存,我仍然看到执行时间减少的模式。
关于java - Apache Spark 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30645426/