Jika template alur kerja akan dijalankan beberapa kali dengan nilai yang berbeda, Anda tidak perlu mengedit alur kerja setiap saat dengan menentukan parameter dalam template (membuat parameter template). Kemudian, Anda dapat meneruskan nilai yang berbeda untuk parameter setiap kali menjalankan template.
Kolom yang Dapat Diparameterisasi
Kolom template alur kerja Dataproc berikut dapat diberi parameter:
- Label
- URI File
- Nama cluster terkelola. Dataproc akan menggunakan nama yang diberikan pengguna sebagai awalan nama, dan menambahkan karakter acak untuk membuat nama cluster yang unik. Cluster akan dihapus di akhir alur kerja.
- Properti pekerjaan
- 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 diisi)
- Nama variabel gaya unix. Nama ini akan digunakan sebagai kunci saat memberikan nilai untuk parameter nanti.
- kolom (wajib diisi)
- Daftar kolom yang akan diganti oleh parameter ini (lihat Kolom yang Dapat Diparameterisasi untuk mengetahui daftar kolom yang dapat diberi parameter). Setiap kolom ditentukan sebagai "jalur kolom" (lihat Sintaksis Jalur Kolom untuk sintaksis yang akan digunakan untuk menentukan jalur kolom). Perhatikan bahwa kolom diizinkan untuk muncul paling banyak di daftar jalur kolom dari satu parameter.
- deskripsi (opsional)
- Deskripsi singkat parameter.
- validasi (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 mirip dalam sintaksis dengan FieldMask.
Misalnya, jalur kolom yang merujuk ke kolom zona dari pemilih cluster template alur kerja akan ditentukan sebagai placement.clusterSelector.zone
.
Jalur kolom dapat merujuk kolom menggunakan sintaksis berikut:
Nama cluster terkelola:
- placement.managedCluster.clusterName
Nilai di peta dapat direferensikan oleh kunci, misalnya:
- label['kunci']
- penempatan.clusterSelector.clusterLabels['key']
- penempatan.managedCluster.labels['kunci']
- job['step-id'].labels['key']
Tugas dalam daftar tugas dapat direferensikan oleh ID langkah.
- jobs['step-id'].hadoopJob.mainJarFileUri
- jobs['step-id'].hiveJob.queryFileUri
- job['step-id'].pySparkJob.mainPythonFileUri
- jobs['step-id'].hadoopJob.jarFileUris[0]
- job['step-id'].hadoopJob.archiveUris[0]
- jobs['step-id'].hadoopJob.fileUris[0]
jobs['step-id'].pySparkJob.pythonFileUris[0]
Item dalam kolom berulang dapat direferensikan oleh indeks berbasis nol, misalnya:
jobs['step-id'].sparkJob.args[0]
Contoh lainnya:
jobs['step-id'].hadoopJob.args[0]
jobs['step-id'].hadoopJob.mainJarFileUri
pekerjaan['step-id'].hadoopJob.properties['key']
pekerjaan['step-id'].hiveJob.scriptVariables['key']
placement.clusterSelector.zone
Peta dan kolom berulang tidak dapat diparameterisasi secara keseluruhan: saat ini, hanya nilai peta individual dan setiap item 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 dengan Dataproc API atau Google Cloud CLI.
Perintah gcloud
Anda dapat menentukan parameter template alur kerja dengan membuat atau mengekspor file YAML template alur kerja dengan Google Cloud CLI dan pengeditan, lalu mengimpor file tersebut menggunakan Google Cloud CLI untuk membuat atau memperbarui template. Baca cara Menggunakan file YAML untuk mengetahui informasi lebih lanjut.
Contoh 1: Contoh template cluster terkelola berparameter
Berikut adalah contoh file YAML template teragen-terasort alur kerja cluster terkelola dengan empat parameter yang ditentukan: CLUSTER, NUM_ROWS, GEN_OUT, dan SORT_OUT. Dua versi dicantumkan: satu SEBELUM dan yang lain parameterisasi SETELAH.
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 contoh file YAML template teragen-terasort alur kerja pemilih cluster berparameter 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 mendefinisikan template alur kerja dengan parameter template, gunakan perintah gcloud berikut untuk mengimpor file YAML guna membuat atau memperbarui template berparameter.
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/region/region/workflowTemplates/template_id") ke perintah. Jika ada resource template dengan nama template yang sama, resource tersebut akan ditimpa (diperbarui) dan nomor versinya akan bertambah. Jika tidak ada template dengan nama template yang sama, template tersebut akan dibuat.
Rest API
Anda dapat menentukan satu atau beberapa WorkflowTemplate.parameters di dalam permintaan API workflowTemplates.create atau workflowTemplates.update.
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 berparameter
Anda dapat meneruskan kumpulan parameter value yang berbeda setiap kali menjalankan template alur kerja berparameter. Anda harus memberikan nilai untuk setiap parameter yang ditentukan dalam template.
Perintah gcloud
Anda dapat meneruskan peta nama parameter ke value ke perintah gcloud dataproc Workflow-templates instantiate dengan flag --parameters
. Semua
parameter value yang ditentukan dalam template harus diberikan. Nilai yang diberikan akan menggantikan nilai yang ditentukan dalam template.
Contoh template cluster terkelola yang diparameterisasi
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 berparameter
gcloud dataproc workflow-templates instantiate \ --parameters CLUSTER=my-cluster,NUM_ROWS=10000,OUTPUT_DIR=hdfs://some/dir
Rest API
Anda dapat meneruskan peta parameters
parameter names
ke values
ke workflowTemplates.instantiate API Dataproc. Semua parameter value yang ditentukan dalam template harus disediakan. 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/" } }