在 Dataproc 集群节点上设置环境变量
Setting environment variables on Dataproc cluster nodes
我想在我的 dataproc 集群的每个节点上设置一个环境变量,以便它可用于该集群上 运行 的 pyspark 作业。执行此操作的最佳方法是什么?
我想知道是否有一种方法可以使用 Compute Engine 元数据来实现(尽管我目前的研究表明 Compute Engine 元数据可以通过 Compute Engine 实例上的元数据服务器获得,而不是通过环境变量获得)。
除此之外,除了在 dataproc 初始化脚本中发出 export
命令外,我想不出其他方法。
任何人都可以提出任何其他替代方案吗?
Dataproc 中没有集群级别的 env 变量,但是大多数组件都有自己的 env 变量设置,您可以通过 dataproc Properties
OS级
Dataproc 没有对适用于所有进程的 OS 级自定义环境变量的 first-class 支持,但您可以通过添加环境变量 init actions 来实现它至 /etc/environment
。您可能需要在 init 操作中重新启动服务。
Hadoop 和 Spark 服务
对于Hadoop和Spark服务,您可以在创建集群时设置带有hadoop-env
或spark-env
前缀的属性,例如:
gcloud dataproc clusters create
--properties hadoop-env:FOO=hello,spark-env:BAR=world
...
有关详细信息,请参阅此 doc。
Spark 作业
Spark 允许在作业级别设置环境变量。对于 executors,你总是可以使用 spark.executorEnv.[Name]
来设置 env 变量,但是对于 drivers,根据你是否 运行集群模式或客户端模式的作业。
客户端模式(默认)
client模式下,创建集群时需要在spark-env.sh中设置driver env变量。您可以如上所述使用 --properties spark-env:[NAME]=[VALUE]
。
执行器环境变量可以在提交作业时设置,例如:
gcloud dataproc jobs submit spark \
--properties spark.executorEnv.BAR=world
...
或
spark-submit --conf spark.executorEnv.BAR=world ...
集群模式
在集群模式下,驱动env变量可以设置为spark.yarn.appMasterEnv.[NAME]
,例如:
gcloud dataproc jobs submit spark \
--properties spark.submit.deployMode=cluster,spark.yarn.appMasterEnv.FOO=hello,spark.executorEnv.BAR=world
...
或
spark-submit \
--deploy-mode cluster
--conf spark.yarn.appMasterEnv.FOO=hello \
--conf spark.executorEnv.BAR=world \
...
查看此doc了解更多详情。
你可以使用GCE元数据,然后一个startup-script-url
写入/etc/environment
。
gcloud dataproc clusters create NAME \
--metadata foo=bar,startup-script-url=gs://some-bucket/startup.sh \
...
gs://some-bucket/startup.sh
#!/usr/bin/env bash
ENV_VAR=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo" -H "Metadata-Flavor: Google")
echo "foo=${ENV_VAR}" >> /etc/environment
希望对您有所帮助...
我想在我的 dataproc 集群的每个节点上设置一个环境变量,以便它可用于该集群上 运行 的 pyspark 作业。执行此操作的最佳方法是什么?
我想知道是否有一种方法可以使用 Compute Engine 元数据来实现(尽管我目前的研究表明 Compute Engine 元数据可以通过 Compute Engine 实例上的元数据服务器获得,而不是通过环境变量获得)。
除此之外,除了在 dataproc 初始化脚本中发出 export
命令外,我想不出其他方法。
任何人都可以提出任何其他替代方案吗?
Dataproc 中没有集群级别的 env 变量,但是大多数组件都有自己的 env 变量设置,您可以通过 dataproc Properties
OS级
Dataproc 没有对适用于所有进程的 OS 级自定义环境变量的 first-class 支持,但您可以通过添加环境变量 init actions 来实现它至 /etc/environment
。您可能需要在 init 操作中重新启动服务。
Hadoop 和 Spark 服务
对于Hadoop和Spark服务,您可以在创建集群时设置带有hadoop-env
或spark-env
前缀的属性,例如:
gcloud dataproc clusters create
--properties hadoop-env:FOO=hello,spark-env:BAR=world
...
有关详细信息,请参阅此 doc。
Spark 作业
Spark 允许在作业级别设置环境变量。对于 executors,你总是可以使用 spark.executorEnv.[Name]
来设置 env 变量,但是对于 drivers,根据你是否 运行集群模式或客户端模式的作业。
客户端模式(默认)
client模式下,创建集群时需要在spark-env.sh中设置driver env变量。您可以如上所述使用 --properties spark-env:[NAME]=[VALUE]
。
执行器环境变量可以在提交作业时设置,例如:
gcloud dataproc jobs submit spark \
--properties spark.executorEnv.BAR=world
...
或
spark-submit --conf spark.executorEnv.BAR=world ...
集群模式
在集群模式下,驱动env变量可以设置为spark.yarn.appMasterEnv.[NAME]
,例如:
gcloud dataproc jobs submit spark \
--properties spark.submit.deployMode=cluster,spark.yarn.appMasterEnv.FOO=hello,spark.executorEnv.BAR=world
...
或
spark-submit \
--deploy-mode cluster
--conf spark.yarn.appMasterEnv.FOO=hello \
--conf spark.executorEnv.BAR=world \
...
查看此doc了解更多详情。
你可以使用GCE元数据,然后一个startup-script-url
写入/etc/environment
。
gcloud dataproc clusters create NAME \
--metadata foo=bar,startup-script-url=gs://some-bucket/startup.sh \
...
gs://some-bucket/startup.sh
#!/usr/bin/env bash
ENV_VAR=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/foo" -H "Metadata-Flavor: Google")
echo "foo=${ENV_VAR}" >> /etc/environment
希望对您有所帮助...