Как можно программно обнаружить, что его код работает в Google Cloud?

Я пытаюсь адаптировать свои задания Spark, которые в настоящее время выполняются в локальном кластере Hadoop. Я хочу изменить его так, чтобы он продолжал поддерживать запуск в локальной среде и в облаке Google.

Я думал о том, чтобы иметь способ определить, определена ли данная переменная среды, чтобы определить, работает ли код в облаке:

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

Я хотел знать, что будет за ENVIRONMENT_VARIABLE, который всегда определяется в облаке Google и доступен из экземпляра Dataproc? Я думал о PROJECT_ID ИЛИ BUCKET, какую такую ​​переменную вы обычно используете? Как вы обычно программно определяете, где выполняется ваш код? Спасибо


person The Phoenician    schedule 16.02.2019    source источник


Ответы (2)


Для этого вы можете использовать DATAPROC_VERSION. Если вы отправите следующее задание PySpark в Dataproc, оно напечатает из версии, которую вы используете (в моем случае 1.3):

#!/usr/bin/python
import pyspark, os
sc = pyspark.SparkContext()
print(os.getenv("DATAPROC_VERSION"))
person Guillem Xercavins    schedule 16.02.2019

Когда вы отправляете задание в 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)
person howie    schedule 21.02.2019