Поделиться через


Управление заданиями Apache Flink® в HDInsight в кластерах AKS

Важный

Azure HDInsight на AKS было завершено 31 января 2025 г. Узнайте больше с этим объявлением.

Необходимо перенести рабочие нагрузки в Microsoft Fabric или эквивалентный продукт Azure, чтобы избежать резкого завершения рабочих нагрузок.

Важный

Эта функция сейчас доступна в предварительной версии. Дополнительные условия использования для предварительных версий Microsoft Azure включают дополнительные юридические термины, применимые к функциям Azure, которые находятся в бета-версии, в предварительной версии или в противном случае еще не выпущены в общую доступность. Сведения об этой конкретной предварительной версии см. в Azure HDInsight в предварительной версии AKS. Для вопросов или предложений функций отправьте запрос на AskHDInsight с подробными сведениями и следуйте за дополнительными обновлениями в Azure HDInsight Community.

HDInsight в AKS предоставляет функцию для управления заданиями Apache Flink® непосредственно через портал Azure (удобный интерфейс) и ARM REST API.

Эта функция позволяет пользователям эффективно контролировать и отслеживать свои задания Apache Flink, не требуя глубоких знаний на уровне кластера.

Преимущества

  • упрощенное управление заданиями. При собственной интеграции Apache Flink на портале Azure пользователи больше не требуют обширных знаний о кластерах Flink для отправки, управления и мониторинга заданий.

  • User-Friendly REST API: HDInsight на AKS предоставляет удобные интерфейсы ARM REST API для управления и отправки заданий Flink. Пользователи могут отправлять задания Flink из любой службы Azure с помощью этих REST API.

  • Легкие обновления заданий и управление состоянием. Встроенная интеграция с порталом Azure предоставляет удобный интерфейс для обновления заданий и их восстановления до последнего сохраненного состояния (savepoint). Эта функция обеспечивает непрерывность и целостность данных на протяжении всего жизненного цикла задания.

  • автоматизация задания Flink с помощью проводника Azure. С помощью HDInsight на AKS пользователи Flink имеют доступ к удобному API REST ARM, что позволяет легко интегрировать операции задания Flink в проводник Azure. Независимо от того, запускаете ли вы новые задания, обновляете выполняемые задания или выполняете различные операции задания, этот упрощенный подход устраняет действия вручную. Он позволяет эффективно управлять кластером Flink.

Необходимые условия

Перед отправкой заданий на портале или REST API есть некоторые предварительные требования.

  • Создайте каталог в основной учетной записи хранения кластера для отправки jar-файла задания.

  • Если пользователь хочет сохранить точки сохранения, создайте каталог в учетной записи хранения для точек сохранения заданий.

    снимок экрана: структура каталогов.

Ключевые функции и операции

  • Новая подача заданий: пользователи могут легко отправлять новую Flink, устраняя необходимость сложных конфигураций или внешних инструментов.

  • Остановить и запустить задания с помощью точек сохранения: Пользователи могут корректно остановить и запустить задания Flink с предыдущего состояния (точка сохранения). Точки сохранения обеспечивают сохранение хода выполнения задания, обеспечивая простое возобновление работы.

  • обновления заданий: пользователь может обновить выполняемое задание после обновления jar-файла в учетной записи хранения. Это обновление автоматически принимает точку сохранения и запускает задание с новым jar-файлом.

  • обновления без отслеживания состояния. Выполнение нового перезапуска задания упрощается с помощью обновлений без отслеживания состояния. Эта функция позволяет пользователям инициировать чистый перезапуск с помощью обновленного jar-файла задания.

  • Управление точками сохранения: На любом этапе пользователи могут создавать точки сохранения для выполнения заданий. Эти точки сохранения можно перечислить и использовать для перезапуска задания с определенной контрольной точки по мере необходимости.

  • отмена: это отменяет задание окончательно.

  • Удалить: удалить запись журнала заданий.

Параметры управления заданиями в HDInsight на платформе AKS

HDInsight в AKS предоставляет способы управления заданиями Flink.

управление заданиями на портале Azure

Чтобы запустить задание Flink на портале, перейдите по следующим ссылкам:

Портал —> HDInsight на пуле кластеров AKS —> Кластер Flink —> Настройки —> Задания Flink

снимок экрана показывает, как запустить задание `flink`.

  • Новое задание: Для отправки нового задания загрузите JAR-файлы задания в аккаунт хранения и создайте каталог для точки сохранения. Заполните шаблон с необходимыми конфигурациями и отправьте задание.

    Снимок экрана показывает, как создать новое задание.

    подробности о недвижимости :

    Свойство Описание Значение по умолчанию Обязательный
    Имя задания Уникальное имя задания. Это отображается на портале. Имя задания должно быть в нижнем регистре. Да
    Путь к JAR-файлу Путь к хранилищу для jar-файла задания. Пользователи должны создать каталог в хранилище кластера и отправить jar-файл задания. Да
    Класс для начинающих Класс записи для задания, из которого запускается выполнение задания. Да
    Аргументы Аргумент для основной программы задачи. Разделите все аргументы пробелами. Нет
    параллелизм Параллельность выполнения задания в Flink. 2 Да
    savepoint.directory Каталог точек сохранения для задания. Рекомендуется пользователям создать новый каталог для точки сохранения задания в учетной записи хранения. abfs://<container>@<account>/<deployment-ID>/savepoints Нет

    После запуска задания состояние задания на портале ВЫПОЛНЯЕТСЯ.

  • Stop: Задание остановки не требует каких-либо параметров, пользователь может остановить задание, выбрав действие.

    снимок экрана: как пользователь может остановить задание.

    После остановки задания его статус на портале изменится на ОСТАНОВЛЕНО.

  • : Начало: Это действие запускает задание из точки сохранения. Чтобы запустить задание, выберите остановленное задание и запустите его.

    снимок экрана показывает, как пользователь начинает задание.

    Заполните шаблон потока необходимыми параметрами и запустите его. Пользователям необходимо выбрать точку сохранения, с которой пользователь хочет запустить задание. По умолчанию оно принимает последнюю успешную точку сохранения.

    Снимок экрана показывает, как заполняется шаблон потока.

    информация о недвижимости:

    Свойство Описание Значение по умолчанию Обязательный
    Аргументы Аргумент основной программы задания. Все аргументы должны быть разделены пробелами. Нет
    Последняя точка сохранения Последнее успешное сохранение точки перед остановкой задания. Это будет использоваться по умолчанию, если не выбрана точка сохранения. Не редактируемый
    Имя точки сохранения Пользователи могут перечислить доступную точку сохранения для задания и выбрать ее, чтобы запустить задание. Нет

    После запуска задания состояние задания на портале будет RUNNING.

  • Обновление : Обновление помогает перезапустить задания с обновленным кодом работы. Пользователям необходимо обновить последний jar-файл задачи в месте хранения и затем обновить задачу на портале. Это обновление останавливает задание с помощью точки сохранения, а затем снова запускает его с последним jar.

    снимок экрана: как перезапустить задания с обновленным кодом задания.

    Шаблон для обновления работы.

    снимок экрана: шаблон для обновления задания.

    После обновления задания состояние задания на портале — "ВЫПОЛНЕНИЕ".

  • обновление без состояния: это задание похоже на обновление, но вновь начинается с последним кодом.

    Снимок экрана показывает повторный запуск задания с новейшим кодом.

    Шаблон для обновления работы.

    Шаблон для обновления безгосударственной работы на снимке экрана.

    Подробности о недвижимости:

    Свойство Описание Значение по умолчанию Обязательный
    Аргументы Аргумент основной программы задания. Разделите все аргументы пробелами. Нет

    После обновления задания состояние задания на портале выполняется.

  • Savepoint: Сделать точку сохранения для задания Flink.

    снимок экрана: точка сохранения для задания Flink.

    Процесс создания точки сохранения требует много времени. Состояние действия задания отображается как в процессе выполнения.

    снимок экрана показывает статус действия задания.

  • Отмена: это задание помогает пользователю отменить задание.

    снимок экрана: как пользователь может завершить задание.

  • Delete: Удалить данные задания с портала.

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

  • Просмотр сведений о задании: Чтобы просмотреть сведения о задании, пользователь может щелкнуть на название задания, которое содержит информацию о задании и результат последнего действия.

    снимок экрана: просмотр сведений о задании.

    Для любого неудачного действия этот json-файл задания предоставляет подробные исключения (exceptions) и причины сбоя.

управление заданиями с помощью REST API

HDInsight в AKS поддерживает удобные API REST ARM для отправки заданий и управления заданиями. С помощью этого REST API Flink можно легко интегрировать операции задания Flink в Azure Pipeline. Независимо от того, запускаете ли вы новые задания, обновляете выполняемые задания или выполняете различные операции задания, этот упрощенный подход устраняет действия вручную и позволяет эффективно управлять кластером Flink.

Базовый формат URL-адреса для REST API

См. следующий URL-адрес для rest API, пользователи должны заменить подписку, группу ресурсов, пул кластеров, имя кластера и HDInsight в версии API AKS перед его использованием. https://management.azure.com/subscriptions/{{USER_SUBSCRIPTION}}/resourceGroups/{{USER_RESOURCE_GROUP}}/providers/Microsoft.HDInsight/clusterpools/{{CLUSER_POOL}}/clusters/{{FLINK_CLUSTER}}/runjob?api-version={{API_VERSION}}

С помощью этого REST API пользователи могут инициировать новые задания, остановить задания, запустить задания, создать точки сохранения, отменить задания и удалить задания. Текущая API_VERSION — 2023-06-01-preview.

Проверка подлинности REST API

Чтобы пройти проверку подлинности пользователей REST API Flink ARM, необходимо получить токен носителя или токен доступа для ресурса ARM. Чтобы выполнить проверку подлинности REST API Azure ARM (Azure Resource Manager) с помощью субъекта-службы, выполните следующие общие действия.

  • Создайте учетную запись службы.

    az ad sp create-for-rbac --name <your-SP-name>

  • Предоставьте владельцу разрешение на пакет обновления для flink кластера.

  • Вход с помощью учётной записи службы.

    az login --service-principal -u <client_id> -p <client_secret> --tenant <tenant_id>

  • Получение токена доступа.

    $token = az account get-access-token --resource=https://management.azure.com/ | ConvertFrom-Json

    $tok = $token.accesstoken

    Пользователи могут использовать токен в указанном URL-адресе.

    $data = Invoke-RestMethod -Uri $restUri -Method GET -Headers @{ Authorization = "Bearer $tok" }

Аутентификация с помощью управляемого удостоверения: пользователи могут использовать ресурсы, поддерживающие управляемое удостоверение, для вызова REST API задания. Дополнительные сведения см. в документации по управляемому удостоверению.

СПИСОК API и параметров

  • Новое задание: REST API для отправки нового задания в Flink.

    Выбор Ценность
    Метод ОПУБЛИКОВАТЬ
    URL-адрес https://management.azure.com/subscriptions/{{USER_SUBSCRIPTION}}/resourceGroups/{{USER_RESOURCE_GROUP}}/providers/Microsoft.HDInsight/clusterpools/{{CLUSER_POOL}}/clusters/{{FLINK_CLUSTER}}/runJob?api-version={{API_VERSION}}
    Заголовок Authorization = "Bearer $token"

    Текст запроса :

    { 
        "properties": { 
            "jobType": "FlinkJob", 
            "jobName": "<JOB_NAME>", 
            "action": "NEW", 
            "jobJarDirectory": "<JOB_JAR_STORAGE_PATH>", 
            "jarName": "<JOB_JAR_NAME>", 
            "entryClass": "<JOB_ENTRY_CLASS>", 
            “args”: ”<JOB_JVM_ARGUMENT>”
            "flinkConfiguration": { 
                "parallelism": "<JOB_PARALLELISM>", 
                "savepoint.directory": "<JOB_SAVEPOINT_DIRECTORY_STORAGE_PATH>" 
            } 
         } 
    }
    

    сведения о свойствах для тела JSON:

    Свойство Описание Значение по умолчанию Обязательный
    тип работы Тип задания. Это должно быть "FlinkJob" Да
    имя задачи Уникальное имя задания. Это отображается на портале. Имя задания должно быть написано с маленькой буквы. Да
    действие Он указывает тип операции в задании. Оно должно быть "NEW" всегда для запуска нового задания. Да
    jobJarDirectory Путь к хранилищу для jar-каталога задания. Пользователи должны создать каталог в хранилище кластера и отправить jar-файл задания. Да
    jarName Имя jar-файла для задания. Да
    entryClass Начальный класс для задания, с которого начинается выполнение задания. Да
    args Аргумент основной программы работы. Разделяйте аргументы с пробелом. Нет
    параллелизм Параллелизм задания Flink. 2 Да
    savepoint.directory Каталог точек сохранения для задачи. Рекомендуется создать новый каталог для сохранения заданий в учетной записи хранения. abfs://<container>@<account>/<deployment-ID>/savepoints Нет

    Пример:

    Invoke-RestMethod -Uri $restUri -Method POST -Headers @{ Authorization = "Bearer $tok" } -Body $jsonString -ContentType "application/json"

  • Остановить задание: REST API для остановки текущего выполняемого задания.

    Выбор Ценность
    Метод ОПУБЛИКОВАТЬ
    URL-адрес https://management.azure.com/subscriptions/{{USER_SUBSCRIPTION}}/resourceGroups/{{USER_RESOURCE_GROUP}}/providers/Microsoft.HDInsight/clusterpools/{{CLUSER_POOL}}/clusters/{{FLINK_CLUSTER}}/runJob?api-version={{API_VERSION}}
    Заголовок Authorization = "Bearer $token"

    Тело запроса

       {
          "properties": {
            "jobType": "FlinkJob",
            "jobName": "<JOB_NAME>",
            "action": "STOP"
          }
        }
    

    Сведения о свойстве для данных JSON:

    Свойство Описание Значение по умолчанию Обязательный
    типРаботы Тип задания. Это должно быть "FlinkJob" Да
    название задания Имя задания, которое используется для запуска задания Да
    действие Это должно быть: "STOP" Да

    Пример:

    Invoke-RestMethod -Uri $restUri -Method POST -Headers @{ Authorization = "Bearer $tok" } -Body $jsonString -ContentType "application/json"

  • Запуск задания: REST API для старта остановленного задания.

    Выбор Ценность
    Метод ПОСТ
    URL-адрес https://management.azure.com/subscriptions/{{USER_SUBSCRIPTION}}/resourceGroups/{{USER_RESOURCE_GROUP}}/providers/Microsoft.HDInsight/clusterpools/{{CLUSER_POOL}}/clusters/{{FLINK_CLUSTER}}/runJob?api-version={{API_VERSION}}
    Заголовок Authorization = "Bearer $token"

    тело запроса

       {
          "properties": {
             "jobType": "FlinkJob",
             "jobName": "<JOB_NAME>",
             "action": "START",
             "savePointName": "<SAVEPOINT_NAME>"
          }
        }
    

    Сведения о свойстве для тела JSON

    Свойство Описание Значение по умолчанию Обязательный
    тип работы Тип задания. Это должно быть "FlinkJob" Да
    jobName Имя задания, используемое для запуска задания. Да
    действие Должно быть "СТАРТ" Да
    savePointName Сохраните имя точки для запуска задания. Это необязательное свойство, по умолчанию операция начинается с последней успешной точки сохранения. Нет

    Пример :

    Invoke-RestMethod -Uri $restUri -Method POST -Headers @{ Authorization = "Bearer $tok" } -Body $jsonString -ContentType "application/json"

  • задание обновления: REST API для обновления текущего выполняемого задания.

    Выбор Ценность
    Метод ПОСТ
    URL-адрес https://management.azure.com/subscriptions/{{USER_SUBSCRIPTION}}/resourceGroups/{{USER_RESOURCE_GROUP}}/providers/Microsoft.HDInsight/clusterpools/{{CLUSER_POOL}}/clusters/{{FLINK_CLUSTER}}/runJob?api-version={{API_VERSION}}
    Заголовок Authorization = "Bearer $token"

    Тело запроса

      {
          "properties": {
              "jobType": "FlinkJob",
              "jobName": "<JOB_NAME>",
              "action": "UPDATE",
              “args” : “<JOB_JVM_ARGUMENT>”,
              "savePointName": "<SAVEPOINT_NAME>"
          }
      }
    
    

    Детали свойства для JSON текста:

    Свойство Описание Значение по умолчанию Обязательный
    тип работы Тип задания. Это должно быть "FlinkJob" Да
    название работы Имя задания, используемое для запуска задания. Да
    действие Оно всегда должно быть "UPDATE" при запуске нового задания. Да
    args Аргументы JVM задания Нет
    savePointName Сохраните имя точки для запуска задания. Это необязательное свойство, по умолчанию запуск операции использует последнюю успешную точку сохранения. Нет

    Пример:

    Invoke-RestMethod -Uri $restUri -Method POST -Headers @{ Authorization = "Bearer $tok" } -Body $jsonString -ContentType "application/json"

  • задание обновления без отслеживания состояния: REST API для обновления без отслеживания состояния.

    Выбор Ценность
    Метод ПОМЕСТИТЬ
    URL-адрес https://management.azure.com/subscriptions/{{USER_SUBSCRIPTION}}/resourceGroups/{{USER_RESOURCE_GROUP}}/providers/Microsoft.HDInsight/clusterpools/{{CLUSER_POOL}}/clusters/{{FLINK_CLUSTER}}/runJob?api-version={{API_VERSION}}
    Заголовок Authorization = "Bearer $token"

    Тело запроса

      {
          "properties": {
              "jobType": "FlinkJob",
              "jobName": "<JOB_NAME>",
              "action": "STATELESS_UPDATE",
              “args” : “<JOB_JVM_ARGUMENT>”
          }
      }
    

    данные о свойстве для тела JSON:

    Свойство Описание Значение по умолчанию Обязательный
    тип работы Тип задания. Это должно быть "FlinkJob" Да
    название_задания Имя задания, используемое для запуска задания. Да
    действие При запуске нового задания всегда используйте "STATELESS_UPDATE". Да
    args Аргументы JVM задания Нет

    Пример :

    Invoke-RestMethod -Uri $restUri -Method POST -Headers @{ Authorization = "Bearer $tok" } -Body $jsonString -ContentType "application/json"

  • Savepoint: REST API для активации точки сохранения для задания.

    Выбор Ценность
    Метод ПОСТ
    URL-адрес https://management.azure.com/subscriptions/{{USER_SUBSCRIPTION}}/resourceGroups/{{USER_RESOURCE_GROUP}}/providers/Microsoft.HDInsight/clusterpools/{{CLUSER_POOL}}/clusters/{{FLINK_CLUSTER}}/runJob?api-version={{API_VERSION}}
    Заголовок Authorization = "Bearer $token"

    Тело запроса

      {
          "properties": {
              "jobType": "FlinkJob",
              "jobName": "<JOB_NAME>",
              "action": "SAVEPOINT"
          }
      }
    

    Детали свойства для тела JSON:

    Недвижимость Описание Значение по умолчанию Обязательный
    тип работы Тип задания. Это должно быть "FlinkJob" Да
    имя задачи Имя задания, используемое для запуска задания. Да
    действие Должно всегда использоваться «SAVEPOINT» для запуска нового задания. Да

    Пример :

    Invoke-RestMethod -Uri $restUri -Method POST -Headers @{ Authorization = "Bearer $tok" } -Body $jsonString -ContentType "application/json"

  • Список точек сохранения: REST API для запроса всех точек сохранения из каталога точек сохранения.

    Выбор Ценность
    Метод ОПУБЛИКОВАТЬ
    URL-адрес https://management.azure.com/subscriptions/{{USER_SUBSCRIPTION}}/resourceGroups/{{USER_RESOURCE_GROUP}}/providers/Microsoft.HDInsight/clusterpools/{{CLUSER_POOL}}/clusters/{{FLINK_CLUSTER}}/runJob?api-version={{API_VERSION}}
    Заголовок Authorization = "Bearer $token"

    Тело запроса

      {
          "properties": {
              "jobType": "FlinkJob",
              "jobName": "<JOB_NAME>",
              "action": "LIST_SAVEPOINT"
          }
      }
    

    детали свойства для тела JSON:

    Свойство Описание Значение по умолчанию Обязательный
    Тип работы Тип задания. Это должно быть "FlinkJob" Да
    имя задания Имя задания, используемое для запуска задания Да
    действие Это должно быть "LIST_SAVEPOINT" Да

    Пример :

    Invoke-RestMethod -Uri $restUri -Method POST -Headers @{ Authorization = "Bearer $tok" } -Body $jsonString -ContentType "application/json"

  • Отмена: REST API для отмены задания.

    Выбор Ценность
    Метод ПОСТ
    URL-адрес https://management.azure.com/subscriptions/{{USER_SUBSCRIPTION}}/resourceGroups/{{USER_RESOURCE_GROUP}}/providers/Microsoft.HDInsight/clusterpools/{{CLUSER_POOL}}/clusters/{{FLINK_CLUSTER}}/runJob?api-version={{API_VERSION}}
    Заголовок Authorization = "Bearer $token"

    тело запроса

      {
          "properties": {
              "jobType": "FlinkJob",
              "jobName": "<JOB_NAME>",
              "action": "CANCEL"
          }
      }
    

    детали свойства для JSON-тела:

    Свойство Описание Значение по умолчанию Обязательный
    типРаботы Тип задания. Он должен быть FlinkJob Да
    название работы Имя задания, используемое для запуска задания. Да
    действие Оно должно быть ОТМЕНЕНО. Да

    Пример :

    Invoke-RestMethod -Uri $restUri -Method POST -Headers @{ Authorization = "Bearer $tok" } -Body $jsonString -ContentType "application/json"

  • Delete: Rest API для удаления задания.

    Выбор Ценность
    Метод ПОСТ
    URL-адрес https://management.azure.com/subscriptions/{{USER_SUBSCRIPTION}}/resourceGroups/{{USER_RESOURCE_GROUP}}/providers/Microsoft.HDInsight/clusterpools/{{CLUSER_POOL}}/clusters/{{FLINK_CLUSTER}}/runJob?api-version={{API_VERSION}}
    Заголовок Authorization = "Bearer $token"

    Тело запроса

      {
          "properties": {
              "jobType": "FlinkJob",
              "jobName": "<JOB_NAME>",
              "action": "DELETE"
          }
      }
    

    Подробности о свойстве для тела JSON:

    Недвижимость Описание Значение по умолчанию Обязательный
    тип работы Тип задания. Это должно быть "FlinkJob" Да
    имя работы Имя задания, используемое для запуска задания. Да
    действие Это должно быть удалено. Да

    Пример :

    Invoke-RestMethod -Uri $restUri -Method POST -Headers @{ Authorization = "Bearer $tok" } -Body $jsonString -ContentType "application/json"

  • Список заданий: REST API для перечисления всех заданий и статуса текущего действия.

    Выбор Ценность
    Метод ПОЛУЧИТЬ
    URL-адрес https://management.azure.com/subscriptions/{{USER_SUBSCRIPTION}}/resourceGroups/{{USER_RESOURCE_GROUP}}/providers/Microsoft.HDInsight/clusterpools/{{CLUSER_POOL}}/clusters/{{FLINK_CLUSTER}}/jobs?api-version={{API_VERSION}}
    Заголовок Authorization = "Bearer $token"

    выход:

    { 
      "value": [ 
          { 
              "id": "/subscriptions/{{USER_SUBSCRIPTION}}/resourceGroups/{{USER_RESOURCE_GROUP}}/providers/Microsoft.HDInsight/clusterpools/{{CLUSER_POOL}}/clusters/{{FLINK_CLUSTER}}/jobs/job1", 
              "properties": { 
                  "jobType": "FlinkJob", 
                  "jobName": "job1", 
                  "jobJarDirectory": "<JOB_JAR_STORAGE_PATH>", 
                  "jarName": "<JOB_JAR_NAME>", 
                  "action": "STOP", 
                  "entryClass": "<JOB_ENTRY_CLASS>", 
                  "flinkConfiguration": { 
                      "parallelism": "2", 
                      "savepoint.directory": "<JOB_SAVEPOINT_DIRECTORY_STORAGE_PATH>s" 
                  }, 
                  "jobId": "20e9e907eb360b1c69510507f88cdb7b", 
                  "status": "STOPPED", 
                  "jobOutput": "Savepoint completed. Path: <JOB_SAVEPOINT_DIRECTORY_STORAGE_PATH>s/savepoint-20e9e9-8a48c6b905e5", 
                  "actionResult": "SUCCESS", 
                  "lastSavePoint": "<JOB_SAVEPOINT_DIRECTORY_STORAGE_PATH>s/savepoint-20e9e9-8a48c6b905e5" 
          } 
       }
      ]
    }
    

Заметка

Когда любое действие выполняется, значение actionResult будет "IN_PROGRESS". При успешном завершении оно будет "SUCCESS", а в случае сбоя — "FAILED".

Ссылка