#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
.