Устранение ошибок установки библиотек

Чтобы сделать написанный сторонними или собственными разработчиками код доступным для приложений, можно установить библиотеку на одном из бессерверных пулов Apache Spark. Пакеты, перечисленные в файле requirements.txt, загружаются из PyPi во время запуска пула. Этот файл требований используется при каждом создании экземпляра Spark из пула Spark. После установки библиотеки для пула Spark она становится доступной для всех сеансов, использующих один и тот же пул.

В некоторых случаях библиотека не появляется в пуле Apache Spark. Такая ситуация часто возникает при возникновении ошибки в предоставленном файле requirements.txt или указанных библиотеках. При возникновении ошибки в процессе установки библиотеки пул Apache Spark вернется к библиотекам, указанным в базовой среде выполнения Synapse.

Цель этого документа — описать распространенные проблемы и упростить отладку ошибок при установке библиотеки.

Принудительное обновление пула Apache Spark

При обновлении библиотек в пуле Apache Spark эти изменения вступят в силу после перезапуска пула. Если у вас есть активные задания, они продолжат выполняться в исходной версии пула Spark.

Можно принудительно применить изменения, установив флажок Принудительно применить новые параметры. Это приведет к завершению всех текущих сеансов для выбранного пула Spark. После завершения сеансов необходимо будет дождаться перезапуска пула.

Добавление библиотек Python

Отслеживание хода выполнения установки

Зарезервированное системное задание Spark запускается каждый раз при обновлении пула с использованием нового набора библиотек. Это задание Spark помогает отслеживать состояние установки библиотек. Если установка завершается сбоем из-за конфликтов с библиотекой или других проблем, пул Spark вернется к предыдущему состоянию или состоянию по умолчанию.

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

Для просмотра этих журналов выполните следующие действия.

  1. Перейдите в список приложений Spark на вкладке Монитор.
  2. Выберите системное задание приложения Spark, соответствующее обновлению пула. Эти системные задания выполняются под заголовком SystemReservedJob-LibraryManagement. Снимок экрана: задание библиотеки, зарезервированное системой.
  3. Переключитесь на просмотр журналов driver и stdout.
  4. В окне результатов вы увидите журналы, связанные с установкой пакетов. Снимок экрана: результаты задания библиотеки, зарезервированного системой.

Отслеживание ошибок установки

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

Чтобы просмотреть полные журналы установки, выполните следующие действия.

  1. Перейдите в список приложений Spark на вкладке Монитор.
  2. Выберите системное задание приложения Spark, которое соответствует проблемному обновлению пула. Эти системные задания выполняются под заголовком SystemReservedJob-LibraryManagement. Снимок экрана: выделено проблемное задание библиотеки, зарезервированное системой.
  3. Выберите выделенный вариант Сервер журнала Spark, чтобы открыть страницу сведений о сервере журнала Spark в новой вкладке. Снимок экрана, где выделены сведения о проблемном задании библиотеки, зарезервированном системой.
  4. На этой странице отображаются 2 попытки. Выберите Попытка 1, как показано ниже. Снимок экрана, где выделены сведения об исполнителе на странице сервера журнала Spark с информацией о проблемном задании библиотеки, зарезервированном системой.
  5. В строке навигации в верхней части страницы сервера журнала Spark переключитесь на вкладку Исполнители. Снимок экрана, где выделены сведения о задании на странице сервера журнала Spark с информацией о проблемном задании библиотеки, зарезервированном системой.
  6. Скачайте файлы журнала stdout и stderr, где собраны полные выходные данные и сообщения об ошибках., связанные с управлением библиотекой. Снимок экрана, где выделена страница сервера журнала Spark с информацией о проблемном задании библиотеки, зарезервированном системой.

Проверка разрешений

Чтобы установить и обновить библиотеки, необходимо иметь разрешения Участник данных BLOB-объектов хранилища или Владелец данных BLOB-объектов хранилища в основной учетной записи Azure Data Lake Storage 2-го поколения, связанной с рабочей областью Azure Synapse Analytics.

Чтобы проверить наличие этих разрешений, можно выполнить следующий код:

from pyspark.sql.types import StructType,StructField, StringType, IntegerType
data2 = [("James","Smith","Joe","4355","M",3000),
    ("Michael","Rose","Edward","40288","F",4000)
  ]

schema = StructType([ \
    StructField("firstname",StringType(),True), \
    StructField("middlename",StringType(),True), \
    StructField("lastname",StringType(),True), \
    StructField("id", StringType(), True), \
    StructField("gender", StringType(), True), \
    StructField("salary", IntegerType(), True) \
  ])
 
df = spark.createDataFrame(data=data2,schema=schema)

df.write.csv("abfss://<<ENTER NAME OF FILE SYSTEM>>@<<ENTER NAME OF PRIMARY STORAGE ACCOUNT>>.dfs.core.windows.net/validate_permissions.csv")

Если появляется сообщение об ошибке, вероятно, отсутствуют необходимые разрешения. Сведения о том, как получить необходимые разрешения, см. в следующем документе: Назначение разрешений Участник данных BLOB-объектов хранилища или Владелец данных BLOB-объектов хранилища.

Кроме того, если вы используете конвейер, MSI рабочей области должен также иметь разрешения "Владелец данных BLOB-объектов хранилища" или "Участник данных BLOB-объектов хранилища". Чтобы узнать, как предоставить удостоверению рабочей области это разрешение, перейдите по ссылке: Предоставление разрешений управляемому удостоверению рабочей области.

Проверка файла конфигурации среды

Для обновления среды Conda можно использовать файл конфигурации среды. Эти допустимые форматы файлов для управления пулом Python перечислены в разделе Спецификации среды.

Важно отметить следующие ограничения:

  • Файл требований не должен содержать лишних пустых строк или символов.
  • Среда выполнения Synapse включает набор библиотек, предварительно устанавливаемых на каждый бессерверный пул Apache Spark. Пакеты, которые были предварительно установлены в базовую среду выполнения, нельзя удалить.
  • Изменение версии PySpark, Python, Scala/Java, .NET или Spark не поддерживается.
  • Библиотеки, у которых областью действия является сеанс Python, поддерживают файлы только с расширением YML.

Проверка файлов Wheel

Бессерверные пулы Synapse Apache Spark основаны на дистрибутиве Linux. При скачивании и установке файлов Wheel непосредственно из PyPI необходимо выбрать версию, созданную на платформе Linux и работающую в той же версии Python, что и пул Spark.

Важно!

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

Проверка конфликтов зависимостей

В общем случае управление разрешениями конфликтов зависимостей Python может оказаться непростой задачей. Чтобы упростить отладку конфликтов зависимостей, можно создать собственную виртуальную среду на основе среды выполнения Synapse и подтверждать изменения.

Воссоздание среды и подтверждение обновлений:

  1. Скачайте шаблон, чтобы локально воссоздать среду выполнения Synapse. Между шаблоном и реальной средой Synapse возможны небольшие различия.

  2. Создайте виртуальную среду, выполнив следующие инструкции. Эта среда позволяет создать изолированную установку Python с указанным списком библиотек.

    conda myenv create -f environment.yml
    conda activate myenv
    
  3. Используйте pip install -r <provide your req.txt file> для обновления виртуальной среды с помощью указанных пакетов. Если установка приводит к ошибке, то возможен конфликт между предварительно установленной базовой средой выполнения Synapse и указаниями в предоставленном файле требований. Эти конфликты зависимостей необходимо разрешить для получения обновленных библиотек на бессерверном пуле Apache Spark.

Важно!

Проблемы могут возникнуть при использовании pip и conda вместе. При одновременном использовании pip и conda советуем следовать этим рекомендациям.

Дальнейшие шаги