Не удается параметризовать какое-либо значение в разделе placement.managedCluster.config

#google-cloud-dataproc

#google-cloud-dataproc

Вопрос:

Моя цель — создать шаблон рабочего процесса dataproc из кода python. Между тем я хочу иметь возможность параметризовать поле placement.managedCluster.config.gceClusterConfig.subnetworkUri во время создания экземпляра шаблона.

Я прочитал шаблон из файла json, например:

 {
  "id": "bigquery-extractor",
  "placement": {
    "managed_cluster": {
      "config": {
        "gce_cluster_config": {
          "subnetwork_uri": "some-subnet-name"
        },
        "software_config" : {
          "image_version": "1.5"
        }
      },
      "cluster_name": "some-name"
    }
  },
  "jobs": [
    {
      "pyspark_job": {
        "args": [
          "job_argument"
        ],
        "main_python_file_uri": "gs:///path-to-file"
      },
      "step_id": "extract"
    }
  ],
  "parameters": [
    {
      "name": "CLUSTER_NAME",
      "fields": [
        "placement.managedCluster.clusterName"
      ]
    },
    {
      "name": "SUBNETWORK_URI",
      "fields": [
        "placement.managedCluster.config.gceClusterConfig.subnetworkUri"
      ]
    },
    {
      "name": "MAIN_PY_FILE",
      "fields": [
        "jobs['extract'].pysparkJob.mainPythonFileUri"
      ]
    },
    {
      "name": "JOB_ARGUMENT",
      "fields": [
        "jobs['extract'].pysparkJob.args[0]"
      ]
    }
  ]
}
 

фрагмент кода, который я использую:

         options = ClientOptions(api_endpoint="{}-dataproc.googleapis.com:443".format(region))
        client = dataproc.WorkflowTemplateServiceClient(client_options=options)
        template_file = open(path_to_file, "r")
        template_dict = eval(template_file.read())
        print(template_dict)

        template = dataproc.WorkflowTemplate(template_dict)

        full_region_id = "projects/{project_id}/regions/{region}".format(project_id=project_id, region=region)
        try:
            client.create_workflow_template(
                parent=full_region_id,
                template=template
            )
        except AlreadyExists as err:
            print(err)
            pass
 

когда я пытаюсь запустить этот код, я получаю следующую ошибку:

google.api_core.исключения.InvalidArgument: 400 Недопустимый путь к полю placement.managed_cluster.configuration.gce_cluster_config.subnetwork_uri: Поле gce_cluster_config не существует.

Это поведение такое же, и если я попытаюсь параметризовать placement.managedCluster.config.softwareConfig.imageVersion , я получу

google.api_core.исключения.InvalidArgument: 400 Недопустимый путь к полю placement.managed_cluster.configuration.software_config.image_version: поле software_config не существует.

Но если я исключу какое-либо поле placement.managedCluster.config из parameters списка с карты, шаблон будет создан успешно.

Я не нашел никаких ограничений на параметризацию этих полей. Есть ли оно? Или я просто делаю что-то не так?

Комментарии:

1. Пожалуйста, рассмотрите возможность подачи запроса функции Dataproc здесь со списком полей, которые вы хотите сделать параметризуемыми. Мы намеренно придерживались того, что мы разрешили.

2. Привет @tix, я не видел, чтобы это поле не разрешалось параметризовать, и уже выдал запрос на ошибку вместо запроса функции: issuetracker.google.com/issues/177190639

Ответ №1:

В этом документе перечислены поля, которые можно параметризовать. Кажется, что параметризуется только managedCluster.name of managedCluster :

Имя управляемого кластера. Dataproc будет использовать пользовательское имя в качестве префикса имени и добавлять случайные символы для создания уникального имени кластера. Кластер удаляется в конце рабочего процесса.

Я не managedCluster.config вижу возможности параметризации.

Комментарии:

1. Скорее всего, вы правы. Я принимаю этот ответ. Интересно, почему не все поля в шаблоне могут быть параметризованы, поскольку это template .