java - Apache Spark 性能

标签 java caching apache-spark

我已经开始学习 Spark,目前正在使用 Spark 运行 WordCount 实验(计算文本文件中每个单词的出现次数)。 该文件放置在网络安装的共享文件系统中。 我有一个包含1 个主节点和 5 个执行器的集群(每个集群都有:处理器 AMD Opteron 1.7 Ghz、24 个核心、48GB RAM、250GB 存储)。

我暂时保留了Spark的默认配置(例如spark.executor.memory = 512m)

我注意到,第一次运行程序时,执行时间较长,而第二次、第三次运行时,执行时间会减少。 例如,对于 40GB 文件,执行时间为:

  1. 第一次执行:419.769396 s
  2. 第二次执行:176.242206 s
  3. 第三次执行:134.411345 s
  4. 第四次执行:126.052158 s
  5. 第五次执行: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/

相关文章:

java - 使用 Leveled Compaction 的低 TTL,我应该减少 gc_grace_seconds 以提高读取性能而不影响删除复制吗?

asp.net - 在 ASP.NET 中缓存所有用户

caching - 通过缓存电子表格值提高脚本性能

python - 从 2.3.1 升级到 Spark2.4.2 但 mongodb 连接器停止工作

java - VLCJ 保存媒体播放器捕获

Java 与 ArrayList 的多项式乘法

java - 在Java中获取主机名的推荐方法

linux - 在 Linux 上使用 DRBD 设置 block 级缓存

apache-spark - spark 中 worker 的 WebUI 访问

java - LogisticRegressionModel.predict 中的要求失败