Apache 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,您通常使用哪

我正在尝试调整目前在本地Hadoop集群上运行的Spark作业。我想对其进行修改,使其能够继续支持本地运行和在谷歌云上运行

我想有一种方法来检测是否定义了给定的环境变量,以确定代码是否在云中运行:

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)