Как программно определить, что его код работает в Google Cloud? - PullRequest
0 голосов
/ 16 февраля 2019

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 21 февраля 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)
0 голосов
/ 16 февраля 2019

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

#!/usr/bin/python
import pyspark, os
sc = pyspark.SparkContext()
print(os.getenv("DATAPROC_VERSION"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...