Автоматическое отключение кластера Google DataProc после завершения всех заданий

google-cloud-platform google-cloud-dataproc

706 просмотра

6 ответа

Как программно отключить кластер Google DataProc автоматически после завершения всех заданий?

DataProc обеспечивает создание, мониторинг и управление ( https://cloud.google.com/dataproc/docs/resources/faq ). Но я не могу понять, как удалить кластер.

Автор: Sreenath Chothar Источник Размещён: 17.05.2019 02:52

Ответы (6)


0 плюса

Есть пара программируемых способов автоматического выключения кластера:

  1. Позвоните в REST API напрямую
  2. Используйте gcloudCLI

Любой из них может быть использован (вызван) после завершения вашей работы.

Подробнее здесь: https://cloud.google.com/dataproc/docs/guides/manage-cluster#delete_a_cluster

Автор: Graham Polley Размещён: 08.05.2017 01:19

0 плюса

Вы можете сделать это с помощью кода Scala: - Создать кластер - Выполнить все задания - Когда задания завершены Удалить кластер

Для этого вы можете работать с Scala Future. Если у вас много заданий, вы можете запускать их параллельно:

val gcpJarBucket = "gs://test_dataproc/dataproc/Dataproc.jar"
val jobs = Seq("package.class1","package.class2")
val projectName: String = "automat-dataproc"
val clusterName: String = "your-cluster-name"

 val timeout = 180 minute

  // Working directory
  implicit val wd = pwd


  val future = Future {
    println("Creating the spark cluster...")
    % gcloud("dataproc", "clusters", "create", clusterName, "--subnet", "default", "--zone", "europe-west1-b", "--master-machine-type", "n1-standard-4", "--master-boot-disk-size", "50", "--num-workers", "3", "--worker-machine-type", "n1-standard-4", "--worker-boot-disk-size", "50", "--project", projectName)
    println("Creating the spark cluster...DONE")
  }.flatMap { _ => {
    Future.sequence {
      jobs.map { jobClass =>
        Future {
          println(s"Launching the spark job from the class $jobClass...")
          % gcloud("dataproc", "jobs", "submit", "spark", s"--cluster=$clusterName", s"--class=$jobClass", "--region=global", s"--jars=$gcpJarBucket")
          println(s"Launching the spark job from the class $jobClass...DONE")
        }
      }
    }

  }}

Try{ Await.ready(future, timeout) }.recover{ case exp => println(exp) }
  % bash("-c", s"printf 'Y\n' | gcloud dataproc cl
Автор: G.Saleh Размещён: 27.02.2018 09:22

0 плюса

Это зависит от языка. Лично я использую Python (pyspark), и приведенный здесь код работал нормально для меня:

https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/dataproc/submit_job_to_cluster.py

Возможно, вам придется адаптировать код к вашей цели и выполнить предварительные шаги, указанные в файле README ( https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/dataproc ), например, включить API и установить пакеты в requirements.txt.

В основном, используя функцию, wait_for_jobвы ждете, пока работа не будет завершена, и delete_cluster, как следует из названия, кластер, который вы ранее создали, удаляется. Я надеюсь это тебе поможет.

Автор: Gaspar Avit Ferrero Размещён: 15.01.2019 12:01

0 плюса

Для достижения этой цели у вас есть три варианта:

  1. Задайте --max-idleсвойство во время создания кластера (см. Https://stackoverflow.com/a/54239034/3227693 ).

  2. Используйте шаблоны рабочих процессов Dataproc для управления жизненным циклом кластера. Он может автоматически создавать кластер для выполнения заданий и удалять кластер после завершения всех заданий.

  3. Используйте полноценное решение для оркестровки в качестве Cloud Composer для управления жизненным циклом кластеров и заданий.

Автор: Igor Dvorzhak Размещён: 03.03.2019 08:58

0 плюса

Интерфейс gcloud beta dataprocCLI предлагает max-idleопцию. Это автоматически убивает кластер Dataproc после x бездействия (т.е. без выполнения заданий). Может использоваться следующим образом:

gcloud beta dataproc clusters create test-cluster \
    --project my-test-project \
    --zone europe-west1-b \
    --master-machine-type n1-standard-4 \
    --master-boot-disk-size 100 \
    --num-workers 2 \
    --worker-machine-type n1-standard-4 \
    --worker-boot-disk-size 100 \
    --max-idle 1h
Автор: Martijn Van de Grift Размещён: 17.01.2019 03:21

0 плюса

Вы можете удалить кластер, когда закончится приложение spark. Вот некоторые примеры:

private SparkApplication(String[] args) throws
                                        org.apache.commons.cli.ParseException,
                                        IOException,
                                        InterruptedException {

    // Your spark code here

    if (profile != null && profile.equals("gcp")) {
        DataProcUtil.deleteCluster(clusterName);
    }
}

А вот как вы удаляете свой кластер с помощью Java

 public static void deleteCluster(String clusterName) throws IOException, InterruptedException {

    logger.info("Try to delete cluster: {}....", clusterName);

    Process process = new ProcessBuilder("gcloud",
                                         "dataproc",
                                         "clusters",
                                         "delete",
                                         clusterName,
                                         "--async",
                                         "--quiet").start();

    int errCode = process.waitFor();
    boolean hasError = (errCode == 0 ? false : true);
    logger.info("Command executed, any errors? {}", hasError);
    String output;
    if (hasError) {
        output = output(process.getErrorStream());
    }
    else {
        output = output(process.getInputStream());
    }

    logger.info("Output: {}", output);

}

private static String output(InputStream inputStream) throws IOException {
    StringBuilder sb = new StringBuilder();

    try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) {

        String line;
        while ((line = br.readLine()) != null) {

            sb.append(line)
              .append(System.getProperty("line.separator"));

        }
    }
    return sb.toString();

}
Автор: howie Размещён: 04.03.2019 01:31
Вопросы из категории :
32x32