如何将训练任务分布在执行者之间?

问题描述 投票:0回答:1

我已经建立了一个spark独立集群,其中包含4个worker(每个有4个内核)和1个master。每个都有窗口10操作系统。我提交了spark的ML示例:layered_perceptron_classification.py到我们的spark独立集群。但是它正在向一个工人的一个执行者执行所有任务。 enter image description here

layered_perceptron_classification.py代码是(代码使用Spark MLlib):

spark = SparkSession\
    .builder.appName("multilayer_perceptron_classification_example").getOrCreate()

data = spark.read.format("libsvm")\
    .load("C:/spark/spark-2.3.2-bin-hadoop2.7/data/mllib/sample_multiclass_classification_data1.txt")

splits = data.randomSplit([0.6, 0.4], 1234)
train = splits[0]   
test = splits[1] 

layers = [4, 500, 500, 500, 3]

trainer = MultilayerPerceptronClassifier(maxIter=100, layers=layers, blockSize=128, seed=1234)

model = trainer.fit(train)

result = model.transform(test)
predictionAndLabels = result.select("prediction", "label")
evaluator = MulticlassClassificationEvaluator(metricName="accuracy")
print("Test set accuracy = " + str(evaluator.evaluate(predictionAndLabels)))

spark.stop()

我不知道为什么它只运行一台计算机。我想知道训练算法是最初的串行结构还是我错过了火花簇的一些配置。(我认为火花簇做分布式训练但不是)请帮助我。先感谢您。

apache-spark apache-spark-mllib
1个回答
1
投票

检查分区数(data.rdd.partitions.size),最有可能是1.分区中Spark的并行化单位。 Spark不会使用比数据分区数更多的执行程序。

要解决此问题,请将sample_multiclass_classification_data1.txt中的数据拆分为多个文件或重新分区

num_partitions = 32
data = spark.read.format("libsvm")\
    .load("C:/spark/spark-2.3.2-bin-hadoop2.7/data/mllib/sample_multiclass_classification_data1.txt").repartition(num_partitions)

相关问题:Determining optimal number of Spark partitions based on workers, cores and DataFrame size

© www.soinside.com 2019 - 2024. All rights reserved.