如何以编程方式检测到他的代码正在Google Cloud上运行?

时间:2019-02-16 09:48:56

标签: apache-spark google-cloud-platform google-cloud-dataproc

我试图调整当前在本地Hadoop集群上运行的Spark作业。我想对其进行修改,以使其继续支持本地运行和Google云运行。

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

def run_on_gcp():
  return is_defined(os.env["ENVIRONMENT_VARIABLE"])

我想知道什么是ENVIRONMENT_VARIABLE,它总是在Google云上定义并且可以从Dataproc实例访问? 我在想PROJECT_IDBUCKET,您通常使用哪个变量?通常如何以编程方式检测代码在哪里运行?谢谢

2 个答案:

答案 0 :(得分:2)

为此,您可以使用if(TextUtils.isEmpty(news.getImage())) { // Load default image newsImageView.setImageResource(R.drawable.placeholder); } else { Picasso.get().load(news.getImage()).into(newsImageView); } 。如果您将submit下的PySpark作业{{}}到Dataproc,它将打印出您正在使用的版本(在我的情况下为1.3):

DATAPROC_VERSION

答案 1 :(得分:0)

将作业提交到dataproc时,可以分配args。例如配置文件名称,群集名称。

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}

然后,您可以在程序中检测这些args。

  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)