VK Cloud logo
Обновлена 11 апреля 2024 г. в 15:15

Базовая работа с заданиями SparkBeta

Задания Spark можно отправлять на кластер разными способами:

  • Для приложений Spark, у которых нет зависимостей, достаточно передать код приложения в манифесте задания. Этот подход будет показан далее.
  • Для приложений Spark, которые требуют дополнительные артефакты для своей работы, необходимо вручную добавить нужные артефакты в бакет Cloud Storage и отредактировать манифест задания. Этот подход показан на примере работы с ClickHouse.

Для примера будет использоваться приложение, которое вычисляет приближенное значение числа π.

Подготовительные шаги

  1. Установите библиотеку Cloud ML Platform.

  2. Создайте токен доступа. Этот токен нужен для работы с библиотекой.

    Подойдет токен как с ролью Администратор, так и с ролью Пользователь.

  3. Создайте кластер Spark.

    Параметры кластера выберите на свое усмотрение.

  4. Получите информацию о кластерах Spark в проекте, выполнив скрипт:

    from mlplatform_client import MLPlatformREFRESH_TOKEN = "<значение токена доступа>"mlp = MLPlatform(REFRESH_TOKEN)print(mlp.get_clusters())

    Будет выведена подробная информация о кластерах.

  5. Найдите и запишите идентификатор созданного кластера (содержится в поле id).

1. Создайте файл с кодом приложения Spark

Это приложение вычисляет приближенное значение числа π методом Монте-Карло, распределяя вычисления по узлам кластера Spark.

2. Отправьте задание Spark на кластер

Отправьте задание на кластер, выполнив скрипт:

from mlplatform_client import MLPlatform   REFRESH_TOKEN = "<значение токена доступа>"CLUSTER_ID = "<идентификатор кластера>"PY_FILE = "calculate-pi.py"JOB_NAME = "pi-spark-job"   mlp = MLPlatform(REFRESH_TOKEN)   spark_job_manifest = mlp.get_default_manifest(CLUSTER_ID, JOB_NAME)spark_job_info = mlp.spark_submit_job(CLUSTER_ID, spark_job_manifest, PY_FILE)   print(spark_job_info)

Будет выведена информация об отправленном задании, например:

Job: pi-spark-job, status: SUBMITTED, created_at: ...

Манифест для задания Spark по умолчанию не содержит в себе сведений о том, где расположены файлы, необходимые для работы приложения Spark.

Для работы приложения, которое вычисляет число π, требуется только один исполняемый файл, никаких дополнительных артефактов не используется.

В таком простом случае не нужно размещать исполняемый файл приложения Spark в бакете Object Storage, а затем править манифест по умолчанию, чтобы добавить в манифест необходимые сведения.

Достаточно передать имя исполняемого файла при отправке задания на кластер:

spark_job_info = mlp.spark_submit_job(CLUSTER_ID, spark_job_manifest, PY_FILE)

Библиотека Cloud ML Platform сама скорректирует манифест так, чтобы можно было выполнить код из указанного файла.

3. Отслеживайте состояние задания Spark

  1. Убедитесь, что в логах задания появился результат вычисления числа π. Если результат не появился, запустите скрипт для получения логов еще раз: могут быть выведены промежуточные логи работы на момент, когда задание еще не завершилось.

    from mlplatform_client import MLPlatformREFRESH_TOKEN = "<значение токена доступа>"CLUSTER_ID = "<идентификатор кластера>"JOB_NAME = "pi-spark-job"mlp = MLPlatform(REFRESH_TOKEN)logs = mlp.spark_job_logs(CLUSTER_ID, JOB_NAME)print(logs)
  2. (Опционально) Получите информацию о событиях в кластере. Она позволяет узнать текущее состояние кластера и заданий, например при поиске проблем.

    from mlplatform_client import MLPlatformREFRESH_TOKEN = "<значение токена доступа>"CLUSTER_ID = "<идентификатор кластера>"mlp = MLPlatform(REFRESH_TOKEN)events = mlp.spark_events(CLUSTER_ID)print(events)

Удалите неиспользуемые ресурсы

Если созданные ресурсы вам больше не нужны, удалите их:

  1. Удалите кластер Spark.
  2. Удалите реестр Docker для этого кластера Spark.
  3. Удалите токен доступа.