Apache spark 如何通过编程检测到他的代码正在谷歌云上运行?
我正在尝试调整目前在本地Hadoop集群上运行的Spark作业。我想对其进行修改,使其能够继续支持本地运行和在谷歌云上运行 我想有一种方法来检测是否定义了给定的环境变量,以确定代码是否在云中运行:Apache spark 如何通过编程检测到他的代码正在谷歌云上运行?,apache-spark,google-cloud-platform,google-cloud-dataproc,Apache Spark,Google Cloud Platform,Google Cloud Dataproc,我正在尝试调整目前在本地Hadoop集群上运行的Spark作业。我想对其进行修改,使其能够继续支持本地运行和在谷歌云上运行 我想有一种方法来检测是否定义了给定的环境变量,以确定代码是否在云中运行: def run_on_gcp(): return is_defined(os.env["ENVIRONMENT_VARIABLE"]) 我想知道一个总是在Google cloud上定义并且可以从Dataproc实例访问的环境变量是什么? 我在想PROJECT\u ID或BUCKET,您通常使用哪
def run_on_gcp():
return is_defined(os.env["ENVIRONMENT_VARIABLE"])
我想知道一个总是在Google cloud上定义并且可以从Dataproc实例访问的环境变量是什么?
我在想PROJECT\u ID
或BUCKET
,您通常使用哪种变量?您通常如何以编程方式检测代码运行的位置?谢谢为此,您可以使用DATAPROC\u版本
。如果将以下PySpark作业复制到Dataproc,它将打印出您正在使用的版本(在我的情况下为1.3):
#/usr/bin/python
导入pyspark,os
sc=pyspark.SparkContext()
打印(os.getenv(“DATAPROC_版本”))
向dataproc提交作业时,可以分配参数。例如配置文件名、集群名
CMD="--job mytestJob \
--job-args path=gs://tests/report\
profile=gcp \
cluster_name=${GCS_CLUSTER}"
gcloud dataproc jobs submit pyspark \
--cluster ${GCS_CLUSTER} \
--py-files ${PY_FILES} \
--async \
${PY_MAIN} \
-- ${CMD}
然后可以在程序中检测这些参数
environment = {
'PYSPARK_JOB_ARGS': ' '.join(args.job_args) if args.job_args else ''
}
job_args = dict()
if args.job_args:
job_args_tuples = [arg_str.split('=') for arg_str in args.job_args]
print('job_args_tuples: %s' % job_args_tuples)
job_args = {a[0]: a[1] for a in job_args_tuples}
print('\nRunning job %s ...\n environment is %s\n' % (args.job_name, environment))
os.environ.update(environment)