Dela via


Felsöka biblioteksinstallationsfel

Om du vill göra kod från tredje part eller lokalt skapad kod tillgänglig för dina program kan du installera ett bibliotek på en av dina serverlösa Apache Spark-pooler. De paket som anges i filen requirements.txt laddas ned från PyPi vid tidpunkten för poolens start. Den här kravfilen används varje gång en Spark-instans skapas från Spark-poolen. När ett bibliotek har installerats för en Spark-pool är det tillgängligt för alla sessioner som använder samma pool.

I vissa fall kan det hända att ett bibliotek inte visas i Apache Spark-poolen. Det här fallet inträffar ofta när det finns ett fel i den angivna requirements.txt-filen eller de angivna biblioteken. När ett fel inträffar i biblioteksinstallationsprocessen återgår Apache Spark-poolen till bibliotek som anges i Synapse-baskörningen.

Målet med det här dokumentet är att beskriva vanliga problem och att hjälpa dig att felsöka installationsfel för bibliotek.

Framtvinga uppdatering av Apache Spark-poolen

När du uppdaterar biblioteken i Apache Spark-poolen hämtas ändringarna när poolen har startats om. Om du har aktiva jobb fortsätter de här jobben att köras på den ursprungliga versionen av Spark-poolen.

Du kan tvinga ändringarna att tillämpas genom att välja alternativet Framtvinga nya inställningar. Den här inställningen avslutar alla aktuella sessioner för den valda Spark-poolen. När sessionerna har avslutats måste du vänta tills poolen startas om.

Lägga till Python-bibliotek

Spåra installationsförlopp

Ett systemreserverat Spark-jobb startas varje gång en pool uppdateras med en ny uppsättning bibliotek. Med hjälp av det här Spark-jobbet kan du övervaka biblioteksinstallationens status. Om installationen misslyckas på grund av bibliotekskonflikter eller andra problem återgår Spark-poolen till sitt tidigare tillstånd eller standardtillståndet.

Användarna kan även granska installationsloggarna för att identifiera beroendekonflikter eller se vilka bibliotek som installerades under pooluppdateringen.

Så här visar du dessa loggar:

  1. Gå till listan med Spark-program på fliken Övervakare.
  2. Välj det Spark-systemprogramjobb som motsvarar din pooluppdatering. Dessa systemjobb körs under namnet SystemReservedJob-LibraryManagement. Skärmbild som visar det systemreserverade biblioteksjobbet.
  3. Växla för att visa drivrutins- och stdout-loggarna.
  4. I resultatet visas loggarna som är relaterade till installationen av dina paket. Skärmbild som visar resultat av det systemreserverade biblioteksjobbet.

Spåra installationsfel

I vissa fall kan användarna också granska de fullständiga installationsloggarna som är tillgängliga på Spark-historikservern för att identifiera komplicerade beroendekonflikter. Loggarna som är tillgängliga via Spark-användargränssnittet kan trunkeras och det är användbart att komma åt de fullständiga installationsloggarna via Spark-historikservern i komplexa installationsscenarier för bibliotek.

Så här visar du de fullständiga installationsloggarna:

  1. Gå till listan med Spark-program på fliken Övervakare.
  2. Välj det Spark-systemprogramjobb som motsvarar den misslyckade pooluppdateringen. Dessa systemjobb körs under namnet SystemReservedJob-LibraryManagement. Skärmbild som visar det misslyckade systemreserverade biblioteksjobbet.
  3. Välj det markerade serveralternativet För Spark-historik som öppnar sidan Med Information om Spark-historikservern på en ny flik. Skärmbild som visar information om det misslyckade systemreserverade biblioteksjobbet.
  4. På den här sidan visas två försök, välj Försök 1 enligt nedan. Skärmbild som visar information om utförare på sidan för Spark-historikservern för det systemreserverade biblioteksjobbet som misslyckades.
  5. I det övre navigeringsfältet på serversidan för Spark-historik växlar du till fliken Körbara filer . Skärmbild som visar jobbinformation på sidan för Spark-historikservern för det systemreserverade biblioteksjobbet som misslyckades.
  6. Ladda ned stdout- och stderr-loggfilerna om du vill få åtkomst till fullständiga bibliotekshanteringsutdata och felloggar. Skärmbild som visar sidan för Spark-historikservern för det systemreserverade biblioteksjobbet som misslyckades.

Verifiera dina behörigheter

Om du vill installera och uppdatera bibliotek måste du ha behörigheten Storage Blob Data Contributor eller Storage Blob Data Owner för det primära Azure Data Lake Storage Gen2 Storage-kontot som är länkat till Azure Synapse Analytics-arbetsytan.

Om du vill verifiera att du har dessa behörigheter kan du köra följande kod:

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")

Om du får ett fel saknar du förmodligen de behörigheter som krävs. Information om hur du hämtar de behörigheter som krävs finns i det här dokumentet: Tilldela behörigheter för Storage Blob Data-deltagare eller Lagringsblobdataägare.

Om du kör en pipeline måste dessutom arbetsytans MSI ha behörighet som Storage Blob Data Owner eller Storage Blob Data Contributor. Information om hur du beviljar din arbetsyteidentitet den här behörigheten finns i: Bevilja behörigheter till arbetsytans hanterade identitet.

Kontrollera miljökonfigurationsfilen

En miljökonfigurationsfil kan användas för att uppgradera Conda-miljön. Det här godkända filformatet för Hantering av Python-pooler visas som miljöspecifikationer.

Observera följande begränsningar:

  • Innehållet i kravfilen får inte innehålla extra tomma rader eller tecken.
  • Synapse Runtime innehåller en uppsättning bibliotek som är förinstallerade på varje serverlös Apache Spark-pool. Paket som är förinstallerade på baskörningen kan inte tas bort eller avinstalleras.
  • Det går inte att ändra versionen PySpark, Python, Scala/Java, .NET eller Spark.
  • Python-bibliotek med sessionsomfång accepterar endast filer med ett YML-tillägg.

Validera hjulfiler

Synapse-serverlösa Apache Spark-pooler baseras på Linux-distributionen. När du laddar ned och installerar Wheel-filer direkt från PyPI bör du välja den version som bygger på Linux och körs på samma Python-version som Spark-poolen.

Viktigt!

Anpassade paket kan läggas till eller ändras mellan sessioner. Du måste dock vänta tills poolen och sessionen startas om för att se det uppdaterade paketet.

Sök efter beroendekonflikter

I allmänhet kan python-beroendematchning vara svårt att hantera. För att felsöka beroendekonflikter lokalt kan du skapa en egen virtuell miljö baserat på Synapse Runtime och verifiera dina ändringar.

Så här återskapar du miljön och validerar dina uppdateringar:

  1. Ladda ned mallen för att återskapa Synapse-körningen lokalt. Det kan finnas små skillnader mellan mallen och den faktiska Synapse-miljön.

  2. Skapa en virtuell miljö med hjälp av följande instruktioner. Med den här miljön kan du skapa en isolerad Python-installation med den angivna listan med bibliotek.

    conda myenv create -f environment.yml
    conda activate myenv
    
  3. Använd pip install -r <provide your req.txt file> för att uppdatera den virtuella miljön med dina angivna paket. Om installationen resulterar i ett fel kan det uppstå en konflikt mellan vad som är förinstallerat i Synapse-baskörningen och vad som anges i den angivna kravfilen. Dessa beroendekonflikter måste lösas för att kunna hämta de uppdaterade biblioteken i din serverlösa Apache Spark-pool.

Viktigt!

Problem kan uppstå när du använder pip och conda tillsammans. När du kombinerar pip och conda är det bäst att följa dessa rekommenderade metodtips.

Nästa steg