环境
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端口,三台机器都有资源分配。
有人能解释为什么会这样,问题出在哪里吗?
暂无答案!
目前还没有任何答案,快来回答吧!