如何从 Cloud Function 运行创建 Dataproc 集群、运行作业、删除集群
Posted
技术标签:
【中文标题】如何从 Cloud Function 运行创建 Dataproc 集群、运行作业、删除集群【英文标题】:How can I run create Dataproc cluster, run job, delete cluster from Cloud Function 【发布时间】:2018-05-15 21:14:48 【问题描述】:我想启动 Dataproc 作业以响应到达 GCS 存储桶的日志文件。我也不想让持久集群保持运行,因为新的日志文件每天只到达几次,而且大部分时间都是空闲的。
【问题讨论】:
【参考方案1】:此处提供本教程的更新版本:https://cloud.google.com/dataproc/docs/tutorials/workflow-function
我可以使用WorkflowTemplate API 为我管理集群生命周期。使用 Dataproc 工作流,我不必轮询要创建的集群、创建的作业或执行任何错误处理。
这是我的云函数。设置为Cloud Storage bucket
以触发Finalize/Create
事件:
index.js:
exports.startWorkflow = (event, callback) =>
const
google
= require('googleapis');
const region = 'global'
const zone = 'us-central1-a'
const clusterName = 'my-cluster'
const file = event.data;
console.log("Event: ", file);
if (!file.name)
throw "Skipped processing file!";
const queryFileUri = "gs://" + file.bucket + "/" + file.name
console.log("Creating auth client: ");
google.auth.getApplicationDefault(
(err, authClient, projectId) =>
if (authClient.createScopedRequired && authClient.createScopedRequired())
authClient = authClient.createScoped([
'https://www.googleapis.com/auth/cloud-platform',
'https://www.googleapis.com/auth/userinfo.email'
]);
const request =
parent: "projects/" + projectId + "/regions/" + region,
resource:
"placement":
"managedCluster":
"clusterName": clusterName,
"config":
"gceClusterConfig":
"zoneUri": zone, // Can be omitted if using regional endpoint (like us-central1-a, not global)
,
"jobs": [
"stepId": "step1",
"pigJob":
"queryFileUri": queryFileUri,
,
"prerequisiteStepIds": [],
]
;
const dataproc = google.dataproc(
version: 'v1beta2',
auth: authClient
);
dataproc.projects.regions.workflowTemplates.instantiateInline(
request, (err, result) =>
if (err)
throw err;
console.log(result);
callback();
);
);
;
确保将 Function to Execute 设置为 startWorkflow
。
package.json:
"name": "dataproc-workflow",
"version": "1.0.0",
"dependencies": "googleapis": "30.0.0"
【讨论】:
【参考方案2】:您可以将来自 shell 脚本或 Docker RUN 命令的 GCLOUD 命令放在下面:
-
预配 Dataproc 集群
执行 Spark 作业
删除 Dataproc 集群(注意要删除的 --quite 或 -q 选项)
Provision Dataproc 集群:(需要 5 分钟以上)
gcloud dataproc 集群创建 devops-poc-dataproc-cluster --subnet 默认 --zone us-central1-a --master-machine-type n1-standard-1 --master-boot-disk-size 200 -- num-workers 2 --worker-machine-type n1-standard-2 --worker-boot-disk-size 200 --image-version 1.3-deb9 --project gcp-project-212501 --service-account=service- id1@gcp-project-212501.iam.gserviceaccount.com
提交 Spark 作业:
sleep 60 && gcloud dataproc 作业提交 pyspark /dev_app/spark_poc/wordCountSpark.py --cluster=devops-poc-dataproc-cluster -- gs://gcp-project-212501-docker_bucket/input/ gs:// gcp-project-212501-docker_bucket/输出/
删除 Dataproc 集群:
gcloud dataproc 集群删除 -q devops-poc-dataproc-cluster
【讨论】:
以上是关于如何从 Cloud Function 运行创建 Dataproc 集群、运行作业、删除集群的主要内容,如果未能解决你的问题,请参考以下文章
如何访问 Cloud Function node.js10 中的 Secret Manager?
从 App Engine 运行时 Python 3.7 调用 Cloud Function [重复]
如何从 Cloud Function 调用其他 Cloud Firebase Functions
从 Cloud Function 本身获取 Cloud Function 名称