Jika template alur kerja Anda akan dijalankan beberapa kali dengan nilai yang berbeda, Anda dapat menghindari keharusan mengedit alur kerja setiap kali dengan menentukan parameter dalam template (membuat parameter template). Kemudian, Anda dapat meneruskan nilai yang berbeda untuk parameter setiap kali Anda menjalankan template.
Kolom yang Dapat Diberi Parameter
Kolom template alur kerja Managed Service untuk Apache Spark berikut dapat diberi parameter:
- Label
- URI File
- Nama cluster terkelola. Managed Service untuk Apache Spark akan menggunakan nama yang diberikan pengguna sebagai awalan nama, dan menambahkan karakter acak untuk membuat nama cluster yang unik. Cluster akan dihapus pada akhir alur kerja.
- Properti tugas
- Argumen tugas
- Variabel skrip (di HiveJob, SparkSqlJob, dan PigJob)
- Class utama (di HadoopJob dan SparkJob)
- Zona (di ClusterSelector)
- Jumlah Instance (
numInstances) dalam grup instance master atau pekerja.
Atribut parameter
Parameter template alur kerja ditentukan dengan atribut wajib dan opsional berikut:
- name (wajib)
- Nama variabel gaya unix. Nama ini akan digunakan sebagai kunci saat memberikan nilai untuk parameter nanti.
- fields (wajib)
- Daftar kolom yang akan diganti oleh parameter ini (lihat Kolom yang Dapat Diberi Parameter untuk daftar kolom yang dapat diberi parameter). Setiap kolom ditentukan sebagai "jalur kolom" (lihat Sintaksis Jalur Kolom untuk mengetahui sintaksis yang akan digunakan untuk menentukan jalur kolom). Perhatikan bahwa kolom hanya boleh muncul dalam daftar jalur kolom maksimal satu parameter.
- description (opsional)
- Deskripsi singkat parameter.
- validation (opsional)
- Aturan yang digunakan untuk memvalidasi nilai parameter, yang dapat berupa salah satu dari:
- daftar nilai yang diizinkan
- daftar ekspresi reguler yang harus cocok dengan nilai.
- daftar nilai yang diizinkan
Sintaksis jalur kolom
Jalur kolom memiliki sintaksis yang mirip dengan
FieldMask.
Misalnya, jalur kolom yang mereferensikan kolom zona pemilih cluster template alur kerja akan ditentukan sebagai placement.clusterSelector.zone.
Jalur kolom dapat mereferensikan kolom menggunakan sintaksis berikut:
Nama cluster terkelola:
- placement.managedCluster.clusterName
Nilai dalam peta dapat direferensikan berdasarkan kunci, misalnya:
- labels['key']
- placement.clusterSelector.clusterLabels['key']
- placement.managedCluster.labels['key']
- jobs['step-id'].labels['key']
Tugas dalam daftar tugas dapat direferensikan berdasarkan step-id.
- jobs['step-id'].hadoopJob.mainJarFileUri
- jobs['step-id'].hiveJob.queryFileUri
- jobs['step-id'].pySparkJob.mainPythonFileUri
- jobs['step-id'].hadoopJob.jarFileUris[0]
- jobs['step-id'].hadoopJob.archiveUris[0]
- jobs['step-id'].hadoopJob.fileUris[0]
jobs['step-id'].pySparkJob.pythonFileUris[0]
Item dalam kolom berulang dapat direferensikan berdasarkan indeks berbasis nol, misalnya:
jobs['step-id'].sparkJob.args[0]
Contoh lainnya:
jobs['step-id'].hadoopJob.args[0]
jobs['step-id'].hadoopJob.mainJarFileUri
jobs['step-id'].hadoopJob.properties['key']
jobs['step-id'].hiveJob.scriptVariables['key']
placement.clusterSelector.zone
Anda tidak dapat membuat parameter peta dan kolom berulang secara keseluruhan. Hanya nilai peta individual dan item individual dalam kolom berulang yang dapat direferensikan. Misalnya, jalur kolom berikut tidak valid:
placement.clusterSelector.clusterLabels
jobs['step-id'].sparkJob.args
Membuat parameter template alur kerja
Anda membuat parameter template alur kerja dengan menentukan parameter template menggunakan Dataproc API atau Google Cloud CLI.
Perintah gcloud
Anda dapat menentukan parameter template alur kerja dengan membuat, atau mengekspor menggunakan Google Cloud CLI dan mengedit, file YAML template alur kerja, lalu mengimpor file dengan Google Cloud CLI untuk membuat atau memperbarui template. Lihat Menggunakan file YAML untuk mengetahui informasi selengkapnya.
Contoh 1: Contoh template cluster terkelola yang diberi parameter
Berikut adalah contoh file YAML template alur kerja cluster terkelola teragen-terasort dengan empat parameter yang ditentukan: CLUSTER, NUM_ROWS, GEN_OUT, dan SORT_OUT. Dua versi tercantum: satu SEBELUM dan yang lainnya SETELAH pemberian parameter.
Sebelum
placement:
managedCluster:
clusterName: my-managed-cluster
config:
gceClusterConfig:
zoneUri: us-central1-a
jobs:
- hadoopJob:
args:
- teragen
- '10000'
- hdfs:///gen/
mainJarFileUri: file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
stepId: teragen
- hadoopJob:
args:
- terasort
- hdfs:///gen/
- hdfs:///sort/
mainJarFileUri: file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
prerequisiteStepIds:
- teragen
stepId: terasort
Setelah
placement:
managedCluster:
clusterName: 'to-be-determined'
config:
gceClusterConfig:
zoneUri: us-central1-a
jobs:
- hadoopJob:
args:
- teragen
- '10000'
- hdfs:///gen/
mainJarFileUri: file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
stepId: teragen
- hadoopJob:
args:
- terasort
- hdfs:///gen/
- hdfs:///sort/
mainJarFileUri: file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
prerequisiteStepIds:
- teragen
stepId: terasort
parameters:
- description: The managed cluster name prefix
fields:
- placement.managedCluster.clusterName
name: CLUSTER
- description: The number of rows to generate
fields:
- jobs['teragen'].hadoopJob.args[1]
name: NUM_ROWS
validation:
values:
values:
- '1000'
- '10000'
- '100000'
- description: Output directory for teragen
fields:
- jobs['teragen'].hadoopJob.args[2]
- jobs['terasort'].hadoopJob.args[1]
name: GEN_OUT
validation:
regex:
regexes:
- hdfs:///.*
- description: Output directory for terasort
fields:
- jobs['terasort'].hadoopJob.args[2]
name: SORT_OUT
validation:
regex:
regexes:
- hdfs:///.*
Contoh 2: Contoh template alur kerja pemilih cluster
Berikut adalah contoh file YAML template alur kerja pemilih cluster teragen-terasort cluster-selector workflow yang diberi parameter dengan tiga parameter yang ditentukan: CLUSTER, NUM_ROWS, dan OUTPUT_DIR.
placement:
clusterSelector:
clusterLabels:
goog-dataproc-cluster-name: 'to-be-determined'
jobs:
- stepId: teragen
hadoopJob:
args:
- 'teragen'
- 'tbd number of rows'
- 'tbd output directory'
parameters:
- name: CLUSTER
fields:
- placement.clusterSelector.clusterLabels['goog-dataproc-cluster-name']
- name: NUM_ROWS
fields:
- jobs['teragen'].hadoopJob.args[1]
- name: OUTPUT_DIR
fields:
- jobs['teragen'].hadoopJob.args[2]
Setelah membuat atau mengedit file YAML yang menentukan template alur kerja dengan parameter template, gunakan perintah gcloud berikut untuk mengimpor file YAML guna membuat atau memperbarui template yang diberi parameter.
gcloud dataproc workflow-templates import template-ID or template-name \ --region=region \ --source=template.yaml
Anda dapat meneruskan
WorkflowTemplate
id atau resource template yang sepenuhnya memenuhi syarat name
("projects/projectId/regions/region/workflowTemplates/template_id") ke perintah. Jika resource template dengan nama template yang sama ada, resource tersebut akan ditimpa (diperbarui) dan nomor versinya akan bertambah. Jika a
template dengan nama template yang sama tidak ada, template tersebut akan dibuat.
Rest API
Anda dapat menentukan satu atau beberapa WorkflowTemplate.parameters dalam workflowTemplates.create atau workflowTemplates.update API.
Berikut adalah contoh permintaan workflowTemplates.create untuk membuat template alur kerja teragen-terasort dengan empat parameter yang ditentukan: CLUSTER, NUM_ROWS, GEN_OUT, dan SORT_OUT.
POST https://dataproc.googleapis.com/v1/projects/my-project/locations/us-central1/workflowTemplates
{
"id": "my-template",
"jobs": [
{
"stepId": "teragen",
"hadoopJob": {
"mainJarFileUri": "file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar",
"args": [
"teragen",
"10000",
"hdfs:///gen/"
]
}
},
{
"stepId": "terasort",
"prerequisiteStepIds": [
"teragen"
],
"hadoopJob": {
"mainJarFileUri": "file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar",
"args": [
"terasort",
"hdfs:///gen/",
"hdfs:///sort/"
]
}
}
],
"parameters": [
{
"name": "CLUSTER",
"fields": [
"placement.managedCluster.clusterName"
],
"description": "The managed cluster name prefix"
},
{
"name": "NUM_ROWS",
"fields": [
"jobs['teragen'].hadoopJob.args[1]"
],
"description": "The number of rows to generate",
"validation": {
"values": {
"values": [
"1000",
"10000",
"100000"
]
}
}
},
{
"name": "GEN_OUT",
"fields": [
"jobs['teragen'].hadoopJob.args[2]",
"jobs['terasort'].hadoopJob.args[1]"
],
"description": "Output directory for teragen",
"validation": {
"regex": {
"regexes": [
"hdfs:///.*"
]
}
}
},
{
"name": "SORT_OUT",
"fields": [
"jobs['terasort'].hadoopJob.args[2]"
],
"description": "Output directory for terasort",
"validation": {
"regex": {
"regexes": [
"hdfs:///.*"
]
}
}
}
],
"placement": {
"managedCluster": {
"clusterName": "to-be-determined",
"config": {
"gceClusterConfig": {
"zoneUri": "us-central1-a"
}
}
}
}
}
Meneruskan parameter ke template yang diberi parameter
Anda dapat meneruskan kumpulan nilai parameter yang berbeda setiap kali Anda menjalankan template alur kerja yang diberi parameter. Anda harus memberikan nilai untuk setiap parameter yang ditentukan dalam template.
Perintah gcloud
Anda dapat meneruskan peta nama parameter ke nilai ke
perintah gcloud dataproc workflow-templates instantiate dengan tanda --parameters. Semua nilai parameter yang ditentukan dalam template harus diberikan. Nilai yang diberikan akan menggantikan nilai yang ditentukan dalam template.
Contoh template cluster terkelola yang diberi parameter
gcloud dataproc workflow-templates instantiate my-template \ --region=region \ --parameters=CLUSTER=cluster,NUM_ROWS=1000,GEN_OUT=hdfs:///gen_20180601/,SORT_OUT=hdfs:///sort_20180601
Contoh template pemilih cluster yang diberi parameter
gcloud dataproc workflow-templates instantiate \
--parameters CLUSTER=my-cluster,NUM_ROWS=10000,OUTPUT_DIR=hdfs://some/dir
Rest API
Anda dapat meneruskan peta
parameters dari parameter names ke values
ke Managed Service untuk Apache Spark
workflowTemplates.instantiate
API. Semua nilai parameter yang ditentukan dalam template harus diberikan. Nilai yang diberikan akan menggantikan nilai yang ditentukan dalam template.
Contoh:
POST https://dataproc.googleapis.com/v1/projects/my-project/regions/us-central1/workflowTemplates/my-template:instantiate
{
"parameters": {
"CLUSTER": "clusterA",
"NUM_ROWS": "1000",
"GEN_OUT": "hdfs:///gen_20180601/",
"SORT_OUT": "hdfs:///sort_20180601/"
}
}