如何使用spark-submit将环境变量传递给集群模式中的spark驱动程序

时间:2016-06-17 17:30:15

标签: apache-spark environment-variables

spark-submit允许使用--conf spark.executorEnv.FOO=bar配置执行程序环境变量,Spark REST API允许使用environmentVariables字段传递一些环境变量。 不幸的是,我发现在群集模式下使用spark-submit提交驱动程序时,配置驱动程序的环境变量并不相似:

spark-submit --deploy-mode cluster myapp.jar

是否可以在群集模式下使用spark-submit设置驱动程序的环境变量?

5 个答案:

答案 0 :(得分:11)

至少YARN,这有效:

spark-submit --deploy-mode cluster --conf spark.yarn.appMasterEnv.FOO=bar myapp.jar

http://spark.apache.org/docs/latest/configuration.html#environment-variables中提到:

  

注意:在cluster模式下在YARN上运行Spark时,需要使用spark.yarn.appMasterEnv.[EnvironmentVariableName]文件中的conf/spark-defaults.conf属性设置环境变量。

我已经测试过它可以使用--conf的{​​{1}}标记传递,因此您无需编辑全局配置文件。

答案 1 :(得分:3)

您可以使用以下分类在执行程序和主节点上设置环境变量:

[   
  {
   "Classification": "yarn-env",
   "Properties": {},
   "Configurations": [
       {
         "Classification": "export",
         "Properties": {
             "VARIABLE_NAME": VARIABLE_VALUE,
         }
       }
   ]
 }
]

如果您只设置spark.yarn.appMasterEnv.FOO = "foo",则env变量不会出现在执行程序实例上。

答案 2 :(得分:2)

在集群模式下的Yarn,它通过使用--conf在spark-submit命令中添加环境变量来实现,如下所示 -

spark-submit --master yarn-cluster --num-executors 15 --executor-memory 52g --executor-cores 7 --driver-memory 52g --conf" spark.yarn。 appMasterEnv.FOO = /路径/富" --conf" spark.executorEnv.FOO2 = / path / foo2" app.jar

此外,您可以通过在conf / spark-defaults.conf文件中添加它们来实现。

答案 3 :(得分:0)

是的,这是可能的。您需要在spark-submit中发布哪些变量,就像您正在做的那样?

spark-submit --deploy-mode cluster myapp.jar

http://spark.apache.org/docs/latest/configuration.html获取变量并取决于您的优化使用这些变量。这个link也可能会有所帮助。

我曾经在集群模式下使用,但现在我在YARN中使用,所以我的变量如下:(希望有帮助)

hastimal@nm:/usr/local/spark$ ./bin/spark-submit --class  com.hastimal.Processing  --master yarn-cluster  --num-executors 15 --executor-memory 52g --executor-cores 7 --driver-memory 52g  --driver-cores 7 --conf spark.default.parallelism=105 --conf spark.driver.maxResultSize=4g --conf spark.network.timeout=300  --conf spark.yarn.executor.memoryOverhead=4608 --conf spark.yarn.driver.memoryOverhead=4608 --conf spark.akka.frameSize=1200  --conf spark.io.compression.codec=lz4 --conf spark.rdd.compress=true --conf spark.broadcast.compress=true --conf spark.shuffle.spill.compress=true --conf spark.shuffle.compress=true --conf spark.shuffle.manager=sort /users/hastimal/Processing.jar Main_Class /inputRDF/rdf_data_all.nt /output /users/hastimal/ /users/hastimal/query.txt index 2

在这里,我的jar是类的参数。

  

cc /inputData/data_all.txt / output / users / hastimal /   /users/hastimal/query.txt index 2

答案 4 :(得分:0)

您用

测试过
--conf spark.driver.FOO="bar"

然后通过

获得价值
spark.conf.get("spark.driver.FOO")