[Документация Yandex Cloud](../../index.md) > [Yandex Data Processing](../index.md) > [Пошаговые инструкции](index.md) > Задания (jobs) > Задания PySpark

# Управление заданиями PySpark

## Создать задание {#create}

{% note info %}

Если кластер Yandex Data Processing [подключен к кластеру Apache Hive™ Metastore](../../metadata-hub/operations/metastore/data-processing-connect.md), добавьте свойство `spark:spark.sql.hive.metastore.sharedPrefixes` со значением `com.amazonaws,ru.yandex.cloud` в кластер Yandex Data Processing. Тогда задания PySpark будут успешно выполнены. Задать свойство можно при [создании](cluster-create.md) или [изменении](cluster-update.md) кластера Yandex Data Processing.

{% endnote %}

Чтобы создать задание PySpark:

{% list tabs group=instructions %}

- Консоль управления {#console}

    1. В [консоли управления](https://console.yandex.cloud) выберите каталог.
    1. [Перейдите](https://console.yandex.cloud/link/data-proc) в сервис **Yandex Data Processing**.
    1. Нажмите на имя нужного кластера и выберите вкладку **Задания**.
    1. Нажмите кнопку **Создать задание**.
    1. (Опционально) Укажите имя задания.
    1. В поле **Тип задания** выберите `PySpark`.
    1. В поле **Main python файл** укажите путь к основному PY-файлу приложения в формате:

        | Размещение файла                                                | Формат пути                                          |
        |-----------------------------------------------------------------|------------------------------------------------------|
        | Файловая система инстанса                                       | `file:///<путь_к_файлу>`                             |
        | Распределенная файловая система кластера                        | `hdfs:///<путь_к_файлу>`                             |
        | [Бакет Object Storage](../../storage/concepts/bucket.md) | `s3a://<имя_бакета>/<путь_к_файлу>`                  |
        | Интернет                                                        | `http://<путь_к_файлу>` или `https://<путь_к_файлу>` |
        
        Допускается использование архивов стандартных для Linux форматов: `zip`, `gz`, `xz`, `bz2` и т. д.
        
        Сервисному аккаунту кластера необходим доступ на чтение ко всем файлам в бакете. Пошаговые инструкции по настройке доступа к Object Storage приведены в разделе [Редактирование ACL бакета](../../storage/operations/buckets/edit-acl.md).

    1. (Опционально) Укажите пути к PY-файлам, если они используются.
    1. Укажите аргументы задания.

       Если аргумент, переменная или свойство состоит из нескольких частей, разделенных пробелом, указывайте каждую часть отдельно. При этом важно сохранить порядок объявления аргументов, переменных и свойств.
       
       Например, аргумент `-mapper mapper.py` должен быть преобразован в два аргумента `-mapper` и `mapper.py`, стоящих последовательно.

    1. (Опционально) Укажите пути к JAR-файлам, если они используются.
    1. (Опционально) Задайте продвинутые настройки:

        * Укажите пути к необходимым файлам и архивам.
        * В поле **Настройки** укажите [свойства компонентов](../concepts/settings-list.md) в виде пары `ключ-значение`.

    1. Нажмите кнопку **Создать задание**.

- CLI {#cli}

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

    По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

    Чтобы создать задание:

    1. Посмотрите описание команды CLI для создания заданий типа `PySpark`:

        ```bash
        yc dataproc job create-pyspark --help
        ```

    1. Создайте задание (в примере приведены не все доступные параметры):

        ```bash
        yc dataproc job create-pyspark \
           --cluster-name=<имя_кластера> \
           --name=<имя_задания> \
           --main-python-file-uri=<путь_к_основному_py-файлу_приложения> \
           --python-file-uris=<пути_к_дополнительным_py-файлам> \
           --jar-file-uris=<пути_к_jar-файлам> \
           --archive-uris=<пути_к_архивам> \
           --properties=<свойства_компонентов> \
           --args=<аргументы> \
           --packages=<Maven_координаты_jar-файлов> \
           --repositories=<дополнительные_репозитории> \
           --exclude-packages=<пакеты_для_исключения>
        ```

        Где: 
        
        * `--properties` — свойства компонентов в виде пары `ключ-значение`.
        * `--args` — аргументы, передаваемые заданию.
        * `--packages` — Maven координаты jar-файлов в формате `groupId:artifactId:version`.
        * `--repositories` — дополнительные репозитории для поиска `packages`.
        * `--exclude-packages` — пакеты в формате `groupId:artifactId`, которые надо исключить.

        Пути к необходимым для выполнения задания файлам передавайте в формате:

        | Размещение файла                                                | Формат пути                                          |
        |-----------------------------------------------------------------|------------------------------------------------------|
        | Файловая система инстанса                                       | `file:///<путь_к_файлу>`                             |
        | Распределенная файловая система кластера                        | `hdfs:///<путь_к_файлу>`                             |
        | [Бакет Object Storage](../../storage/concepts/bucket.md) | `s3a://<имя_бакета>/<путь_к_файлу>`                  |
        | Интернет                                                        | `http://<путь_к_файлу>` или `https://<путь_к_файлу>` |
        
        Допускается использование архивов стандартных для Linux форматов: `zip`, `gz`, `xz`, `bz2` и т. д.
        
        Сервисному аккаунту кластера необходим доступ на чтение ко всем файлам в бакете. Пошаговые инструкции по настройке доступа к Object Storage приведены в разделе [Редактирование ACL бакета](../../storage/operations/buckets/edit-acl.md).

    Идентификатор и имя кластера можно получить со [списком кластеров в каталоге](cluster-list.md#list).

- API {#api}

    Воспользуйтесь методом API [create](../api-ref/Job/create.md) и передайте в запросе:

    * идентификатор кластера в параметре `clusterId`;
    * имя задания в параметре `name`;
    * свойства задания в параметре `pysparkJob`.

    Идентификатор кластера можно получить со [списком кластеров в каталоге](cluster-list.md#list).

{% endlist %}

## Отменить задание {#cancel}

{% note info %}

Задания в статусах `ERROR`, `DONE` или `CANCELLED` отменить нельзя. Чтобы узнать статус задания, получите [список заданий](#list) в кластере.

{% endnote %}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://console.yandex.cloud) выберите каталог.
  1. [Перейдите]((https://console.yandex.cloud/link/data-proc) в сервис **Yandex Data Processing**.
  1. Нажмите на имя нужного кластера и выберите вкладку **Задания**.
  1. Нажмите на имя нужного задания.
  1. В правом верхнем углу страницы нажмите кнопку **Отменить**.
  1. В открывшемся окне выберите **Отменить**.

- CLI {#cli}

  Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

  По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

  Чтобы отменить задание, выполните команду:

  ```bash
  yc dataproc job cancel <имя_или_идентификатор_задания> \
    --cluster-name=<имя_кластера>
  ```

  Идентификатор и имя задания можно получить со [списком заданий в кластере](#list), имя кластера — со [списком кластеров в каталоге](cluster-list.md#list).

- API {#api}

  Воспользуйтесь методом API [cancel](../api-ref/Job/cancel.md) и передайте в запросе:
  * Идентификатор кластера в параметре `clusterId`.
  * Идентификатор задания в параметре `jobId`.

  Идентификатор кластера можно получить со [списком кластеров в каталоге](cluster-list.md#list), идентификатор задания — со [списком заданий в кластере](#list).

{% endlist %}

## Получить список заданий {#list}

{% list tabs group=instructions %}

- Консоль управления {#console}

    1. В [консоли управления](https://console.yandex.cloud) выберите каталог.
    1. [Перейдите]((https://console.yandex.cloud/link/data-proc) в сервис **Yandex Data Processing**.
    1. Нажмите на имя нужного кластера и выберите вкладку **Задания**.

- CLI {#cli}

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

    По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

    Чтобы получить список заданий, выполните команду:

    ```bash
    yc dataproc job list --cluster-name=<имя_кластера>
    ```

    Идентификатор и имя кластера можно получить со [списком кластеров в каталоге](cluster-list.md#list).

- API {#api}

    Воспользуйтесь методом API [list](../api-ref/Job/list.md) и передайте в запросе идентификатор кластера в параметре `clusterId`.

    Идентификатор кластера можно получить со [списком кластеров в каталоге](cluster-list.md#list).

{% endlist %}

## Получить общую информацию о задании {#get-info}

{% list tabs group=instructions %}

- Консоль управления {#console}

    1. В [консоли управления](https://console.yandex.cloud) выберите каталог.
    1. [Перейдите]((https://console.yandex.cloud/link/data-proc) в сервис **Yandex Data Processing**.
    1. Нажмите на имя нужного кластера и выберите вкладку **Задания**.
    1. Нажмите на имя нужного задания.

- CLI {#cli}

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

    По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

    Для получения общей информации о задании выполните команду:

    ```bash
    yc dataproc job get \
       --cluster-name=<имя_кластера> \
       --name=<имя_задания>
    ```

    Идентификатор и имя кластера можно получить со [списком кластеров в каталоге](cluster-list.md#list).

- API {#api}

    Воспользуйтесь методом API [get](../api-ref/Job/get.md) и передайте в запросе:

    * Идентификатор кластера в параметре `clusterId`. Его можно получить со [списком кластеров в каталоге](cluster-list.md#list)
    * Идентификатор задания в параметре `jobId`. Его можно получить со [списком заданий в кластере](#list).

{% endlist %}

## Получить логи выполнения задания {#get-logs}

{% note info %}

Вы можете просматривать логи выполнения заданий и искать в них информацию с помощью сервиса [Yandex Cloud Logging](../../logging/index.md). Подробнее в разделе [Работа с логами](logging.md).

{% endnote %}

{% list tabs group=instructions %}

- Консоль управления {#console}

    1. В [консоли управления](https://console.yandex.cloud) выберите каталог.
    1. [Перейдите]((https://console.yandex.cloud/link/data-proc) в сервис **Yandex Data Processing**.
    1. Нажмите на имя нужного кластера и выберите вкладку **Задания**.
    1. Нажмите на имя нужного задания.

- CLI {#cli}

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

    По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

    Чтобы получить логи выполнения задания, выполните команду:

    ```bash
    yc dataproc job log \
       --cluster-name=<имя_кластера> \
       --name=<имя_задания>
    ```

    Идентификатор и имя кластера можно получить со [списком кластеров в каталоге](cluster-list.md#list).

- API {#api}

    Воспользуйтесь методом API [listLog](../api-ref/Job/listLog.md) и передайте в запросе:

    * Идентификатор кластера в параметре `clusterId`. Его можно получить со [списком кластеров в каталоге](cluster-list.md#list).
    * Идентификатор задания в параметре `jobId`. Его можно получить со [списком заданий в кластере](#list).

{% endlist %}