spark 如何将训练任务平均分配给执行者?
how spark distribute training tasks to evenly across executors?
我已经设置了一个 spark 独立集群,有 4 个 worker(每个有 4 个核心)和 1 个 master。每个都有window10个操作系统。我提交了 spark 的 ML 示例:multilayer_perceptron_classification.py 到我们的 spark 独立集群。
但它正在将所有任务执行给一名工人的一名执行者。
enter image description here
multilayer_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()
我不知道为什么 运行 只有一台电脑。我想知道训练算法最初是否是串行结构的,或者我错过了 spark 集群的一些配置。(我认为 spark 集群进行分布式训练但不是)请帮助我。先感谢您。
检查分区数(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)
相关问题:
我已经设置了一个 spark 独立集群,有 4 个 worker(每个有 4 个核心)和 1 个 master。每个都有window10个操作系统。我提交了 spark 的 ML 示例:multilayer_perceptron_classification.py 到我们的 spark 独立集群。 但它正在将所有任务执行给一名工人的一名执行者。 enter image description here
multilayer_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()
我不知道为什么 运行 只有一台电脑。我想知道训练算法最初是否是串行结构的,或者我错过了 spark 集群的一些配置。(我认为 spark 集群进行分布式训练但不是)请帮助我。先感谢您。
检查分区数(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)
相关问题: