В Spark увеличьте количество машин, но существенно не улучшите производительность - PullRequest
0 голосов
/ 29 апреля 2020

Среда

2-ядерный ЦП, 8 ГБ памяти для каждой машины.

В кластере три одинаковые машины.

enter image description here

И я также настраиваю HDFS (2 репликации, размер блока 32 МБ). Я развернул его в автономном режиме.

Программа

Вот моя программа, самое простое приложение 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

Тесты

Размер входного файла: 623 МБ

Один компьютер с локальным файлом

Использование 28 минут.

Три машины с локальным файлом

Использование 26 минут.

Три машины с HDFS

Использование 20 минут.

Вопросы

Почему я увеличил количество машин, но существенно не улучшил производительность? Когда я вижу панель мониторинга, предоставляемую Spark, всегда работает один исполнитель.

enter image description here

Но в порту 8080 все три машины имеют распределение ресурсов. enter image description here

Кто-нибудь может объяснить, почему это происходит и в чем проблема?

...