Как запустить создание кластера Dataproc, запустить задание, удалить кластер из облачной функции - PullRequest
0 голосов
/ 16 мая 2018

Я хотел бы запустить задание Dataproc в ответ на файлы журналов, поступающие в корзину GCS.Я также не хочу поддерживать постоянный кластер, так как новые файлы журналов поступают только несколько раз в день, и большую часть времени он будет простаивать.

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

Вы можете поместить ниже команды GCLOUD из сценария оболочки или команды Docker RUN для:

  1. Предоставление кластера Dataproc
  2. Выполнение задания Spark
  3. Удалить кластер Dataproc (обратите внимание на параметр --quite или -q для удаления)

    Предоставить кластер Dataproc: (занимает 5+ минут)

    Кластеры gcloud dataproc создают devops-poc-dataproc-кластер - подсеть по умолчанию --зона us-central1-a - тип машины-мастера n1-standard-1 - мастер-загрузочный диск-размер 200 --num-works 2 - тип рабочей машины n1-стандарт-2 - рабочий-загрузочный-диск-размер 200 - изображение-версия 1.3-deb9 --project gcp-project-212501 --service-account=service-id1@gcp-project-212501.iam.gserviceaccount.com

    Отправка задания Spark:

    Работа с сном 60 && gcloud dataproc submit 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 / output /

    УДАЛИТЬ Кластер Dataproc:

    кластеры gcloud dataproc удаляют -q devops-poc-dataproc-cluster

0 голосов
/ 16 мая 2018

Я могу использовать WorkflowTemplate API для управления жизненным циклом кластера.С Dataproc Workflows мне не нужно опрашивать ни кластер, ни создаваемую работу, ни какую-либо обработку ошибок.

Вот моя облачная функция.Установите на 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();
        });
    });
};

Убедитесь, что для функции «Выполнение» задано значение startWorkflow.

package.json:

{
  "name": "dataproc-workflow",
  "version": "1.0.0",
  "dependencies":{ "googleapis": "30.0.0"}
}
...