SparkConf没有读取spark-submit参数

时间:2015-11-19 19:06:44

标签: apache-spark pyspark

pyspark上的

SparkConf不会读取传递给spark-submit的配置参数。

我的python代码类似于

from pyspark import SparkContext, SparkConf

conf = SparkConf().setAppName("foo")
sc = SparkContext(conf=conf)

# processing code...

sc.stop()

我用

提交
PYSPARK_PYTHON="/opt/anaconda/bin/python" spark-submit foo.py \
--master local[4] --conf="spark.driver.memory=16g" --executor-memory 16g

但没有应用任何配置参数。也就是说,应用程序使用默认值local [*]表示master,1g表示驱动程序内存,1g表示执行程序内存。这一点得到了Spark GUI的证实。

但是,如果我使用pyspark提交应用程序,则会遵循配置参数:

PYSPARK_PYTHON="/opt/anaconda/bin/python" pyspark --master local[4] \
--conf="spark.driver.memory=8g"

请注意,--executor-memory 16g也已更改为--conf="spark.executor.memory=16g",因为前者也无效。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

我认为您需要从=移除--conf=符号。您的spark-submit脚本应为

PYSPARK_PYTHON="/opt/anaconda/bin/python" spark-submit foo.py \
--master local[4] --conf spark.driver.memory=16g --executor-memory 16g

请注意,spark-submit还支持使用标记--driver-memory 16G

设置驱动程序内存

答案 1 :(得分:2)

显然,论证的顺序很重要。最后一个参数应该是python脚本的名称。所以,电话应该是

class Bar 
{
public function test() {
    $this->testPrivate();
    $this->testPublic();
}

public function testPublic() {
    echo "Bar::testPublic\n";
}

private function testPrivate() {
    echo "Bar::testPrivate\n";
}
}

class Foo extends Bar 
{
public function testPublic() {
    echo "Foo::testPublic\n";
}

private function testPrivate() {
    echo "Foo::testPrivate\n";
}
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate 
            // Foo::testPublic
?>

或者,关注@ glennie-helles-sindholt的建议,

PYSPARK_PYTHON="/opt/anaconda/bin/python" spark-submit \
    --master local[4] --conf="spark.driver.memory=16g" --executor-memory 16g foo.py