在spark中,增加了机器的数量,但并没有显著提高性能

iqxoj9l9  于 2021-05-31  发布在  Hadoop
关注(0)|答案(0)|浏览(352)

环境

2核cpu,每台机器8g内存。
集群有三台相同的机器。

我还配置了hdfs(2个复制,32mb块大小)。我以独立模式部署它。

程序

这是我的程序,最简单的als应用程序。

import org.apache.spark.sql.{SaveMode, SparkSession}
import org.apache.spark.ml.recommendation.ALS

object ALSApp {
  def main(args: Array[String]): Unit = {
    val filePath = args(0)
    val outputPath = args(1)
    val spark = SparkSession.builder().appName("ALS").getOrCreate()
    val ratings = spark.read.format("csv")
      .option("header", "true")
      .option("inferSchema", "true")
      .load(filePath)

    val ALS = new ALS()
      .setMaxIter(5)
      .setRegParam(0.01)
      .setUserCol("userId")
      .setItemCol("movieId")
      .setRatingCol("rating")
      //.setImplicitPrefs(true)
    val model = ALS.fit(ratings)
    // Generate top 10 movie recommendations for each user
    val userRecs = model.recommendForAllUsers(10)
    // Generate top 10 user recommendations for each movie
    val movieRecs = model.recommendForAllItems(10)
    userRecs.write.mode(SaveMode.Overwrite).json(outputPath+"/user.json")
    movieRecs.write.mode(SaveMode.Overwrite).json(outputPath+"/movie.json")

    spark.stop()
  }
}

提交命令

./bin/spark-submit --master spark://big-data-1:7077 --class ALSApp --executor-memory 4G custom/experiment.jar hdfs://big-data-1:9000/custom/ratings_25000000.csv hdfs://big-data-1:9000/output

测试

输入文件大小:623mb
一台带有本地文件的计算机
用28分钟。
三台带本地文件的机器
用26分钟。
三台带hdfs的机器
用20分钟。

问题

为什么我增加了机器的数量却没有显著提高性能?当我看到spark提供的 Jmeter 板时,总是有一个执行器在运行。

但是在8080端口,三台机器都有资源分配。

有人能解释为什么会这样,问题出在哪里吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题