Spark 在运行 LinearRegressionwithSGD 时未利用所有核心

Posted

技术标签:

【中文标题】Spark 在运行 LinearRegressionwithSGD 时未利用所有核心【英文标题】:Spark not utilizing all the core while running LinearRegressionwithSGD 【发布时间】:2015-10-20 18:30:53 【问题描述】:

我在本地机器上运行 Spark(16G,8 个 cpu 内核)。我试图在大小为 300MB 的数据集上训练线性回归模型。我检查了 CPU 统计信息以及正在运行的程序,它只执行一个线程。 文档说他们已经实现了 SGD 的分布式版本。 http://spark.apache.org/docs/latest/mllib-linear-methods.html#implementation-developer

from pyspark.mllib.regression import LabeledPoint, LinearRegressionWithSGD, LinearRegressionModel
from pyspark import SparkContext


def parsePoint(line):
  values = [float(x) for x in line.replace(',', ' ').split(' ')]
  return LabeledPoint(values[0], values[1:])

sc = SparkContext("local", "Linear Reg Simple")
data = sc.textFile("/home/guptap/Dropbox/spark_opt/test.txt")
data.cache()
parsedData = data.map(parsePoint)


model = LinearRegressionWithSGD.train(parsedData)

valuesAndPreds = parsedData.map(lambda p: (p.label,model.predict(p.features)))
MSE = valuesAndPreds.map(lambda (v, p): (v - p)**2).reduce(lambda x, y: x + y) / valuesAndPreds.count()
print("Mean Squared Error = " + str(MSE))


model.save(sc, "myModelPath")
sameModel = LinearRegressionModel.load(sc, "myModelPath")

【问题讨论】:

你是如何提交脚本的? @eliashah 我正在使用 pyspark-submit --master local[*] script_name.py 【参考方案1】:

我认为您想要做的是明确说明与本地上下文一起使用的核心数量。正如您从 cmets here 中看到的那样,"local"(这就是您正在做的事情)在一个线程上实例化一个上下文,而 "local[4]" 将使用 4 个内核运行。我相信您也可以使用"local[*]" 在系统上的所有内核上运行。

【讨论】:

感谢您的回答,我不是在检查线程,而是在监控让我感到困惑的进程。

以上是关于Spark 在运行 LinearRegressionwithSGD 时未利用所有核心的主要内容,如果未能解决你的问题,请参考以下文章

Spark 在 Yarn 上运行 Spark 应用程序

spark安装与运行模式

《Spark 官方文档》在Mesos上运行Spark

在不同版本的 spark 上远程运行 spark 应用程序

Spark学习之路 Spark 运行流程

在 EMR 集群中运行 Spark 应用程序时在哪里指定 Spark 配置