Delen via


PolyBase-fouten en mogelijke oplossingen

Van toepassing op:SQL Server

Dit artikel bevat veelvoorkomende foutscenario's en oplossingen voor PolyBase.

Zie Controleren en problemen met PolyBase oplossen voor meer informatie over het bewaken en oplossen van problemen met PolyBase.

Zie PolyBase controleren en problemen met PolyBase oplossen voor algemene locaties van logboekbestanden in Windows en Linux.

Foutberichten en mogelijke oplossingen

Sql Server 2022-update is mislukt vanwege een ongeldige kolomnaam (hoofdlettergevoelig)

Deze fout kan optreden wanneer de installatie van cumulatieve SQL Server-updates wordt toegepast op een server waarop de PolyBase-functie is geïnstalleerd en hoofdlettergevoelige sortering wordt gebruikt, is het gemelde foutbericht over de foutupgrade het volgende:

Voorbeeld van foutbericht: Error: 912, Severity: 21, State: 2. Script level upgrade for database 'master' failed because upgrade step 'polybase_database_upgrade.sql' encountered error 200, state 7, severity 25. This is a serious error condition which might interfere with regular operation and the database will be taken offline. If the error happened during upgrade of the 'master' database, it will prevent the entire SQL Server instance from starting. Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion.

Reden:

Tijdens de upgradeprocedure slaagt het SQL Server-script er niet in succesvol af te ronden vanwege hoofdlettergevoelige waarden.

Oplossing: Dit probleem wordt permanent opgelost in de aanstaande cumulatieve update.

Tijdelijke oplossing:

  1. Schakel traceringsvlag 902 in.
  2. Start SQL Server.
  3. Wijzig de sortering van de database 'DWConfiguration' van CS (hoofdlettergevoelig) in CI (niet hoofdlettergevoelig).
  4. Voer de upgrade opnieuw uit.
  5. Schakel de traceringsvlag 902 uit.
  6. Start SQL Server opnieuw op.
  7. Wijzig de sortering van de database 'DWConfiguration' terug van CI (hoofdletterongevoelig) naar CS (hoofdlettergevoelig).

Als alternatief voor de traceringsvlagmen, om te voorkomen dat het probleem zich voordoet vóór een cumulatieve update, controleert u of de DWConfiguration-database een hoofdlettergevoelige sortering (CS) gebruikt. Overweeg deze te wijzigen naar een hoofdletterongevoelige (CI) sortering, de cumulatieve update toe te passen, en vervolgens deze terug naar de oorspronkelijke configuratie te wijzigen.

Fout: '100001; Kan geen queryplan genereren"

De fout 'Kan queryplan niet genereren' kan optreden wanneer de SQL Server-database-engine is gepatcht naar ten minste cumulatieve update 8 (15.0.4073), maar de PolyBase-functie is niet bijgewerkt naar dezelfde build. Dit kan gebeuren wanneer u de PolyBase-functie toevoegt aan een bestaand SQL Server-exemplaar. Zie PolyBase-fout - 100001; voor meer informatie. Kan geen queryplan genereren.

Volg de installatie van de PolyBase-functie altijd op door de nieuwe functie naar hetzelfde versieniveau te upgraden. Installeer indien nodig servicepacks (SP's), cumulatieve updates (RU's) en/of algemene distributiereleases. Zie Bepalen van de versie, editie en updateniveau van SQL Server en de bijbehorende onderdelenom de versie, editie en update van PolyBase te bepalen.

Serviceaccountwijziging

Voorbeeld van foutbericht:

107035; Dms-autorisatie is mislukt vanwege [DOMAIN\user] is geen lid van de groep [PdwDataMovementAccess]
107017; Ongeldige DMS-controleheader:

Deze fout wordt waarschijnlijk veroorzaakt door het wijzigen van het PolyBase-serviceaccount. Als u de serviceaccounts voor de PolyBase Engine en PolyBase Data Movement-service wilt wijzigen, verwijdert en installeert u de functie PolyBase opnieuw.

Fouten met servicemachtigingen voor gegevensverplaatsing

Zie Machtigingen voor PolyBase-serviceaccounts en veelvoorkomende fouten waargenomen wanneer ze ontbreken voor meer informatie over het oplossen van problemen en het oplossen van machtigingsproblemen met de gegevensverplaatsingsdienst.

Windows-verificatiefout

Zie Voor meer informatie over het oplossen van problemen met machtigingen met betrekking tot een fout in Windows-verificatie, PolyBase-serviceaccountmachtigingen en veelvoorkomende fouten die worden waargenomen wanneer ze ontbreken.

Kan de query 'Externe query' niet uitvoeren

Voorbeeld van foutbericht:

Msg 7320, Niveau 16, Staat 110, Regel 14
Kan de query 'Externe query' niet uitvoeren op OLE DB-provider 'SQLNCLI11' voor gekoppelde server (null). Query is afgebroken: de maximumdrempel voor weigeren (0 rijen) is bereikt tijdens het lezen van een externe bron: 1 rijen zijn geweigerd uit totaal 1 rijen verwerkt. (/natie/sensors.ldjson.txt)Kolomnummer: 0, Verwacht datatype: INT, Onjuiste waarde: {"id":"S2740036465E2B","time":"2016-02-26T16:59:02.9300000Z","temp":23.3,"hum":0.77,"wind":17,"press":1032,"loc":[-76.90914996169623,38.8929314364726]} (Kolomconversiefout), Fout: Fout bij het converteren van gegevenstype NVARCHAR naar INT.

Houd er rekening mee dat er mogelijk afleidingen van deze fout zijn. De naam van het eerste geweigerde bestand verschijnt in SQL Server Management Studio (SSMS) met foutieve gegevenstypen of -waarden.

Mogelijke reden:
De reden hiervoor is dat elk bestand een ander schema heeft. De externe tabel PolyBase DDL wanneer naar een map wordt verwezen recursief alle bestanden in die map leest. Wanneer een kolom of gegevenstype niet overeenkomt, kan deze fout worden weergegeven in SSMS.

Mogelijke oplossing:
Als de gegevens voor elke tabel uit één bestand bestaan, gebruikt u de bestandsnaam in de sectie LOCATION, voorafgegaan door de map van de externe bestanden. Als er meerdere bestanden per tabel zijn, plaatst u elke set bestanden in verschillende mappen in Azure Blob Storage. Wijs LOCATION naar de map in plaats van een bepaald bestand. Deze oplossing wordt aanbevolen.

Example:

Create External Table foo
(col1 int)WITH (LOCATION='/bar/foobar.txt',DATA_SOURCE…); OR
Create External Table foo
(col1 int) WITH (LOCATION = '/bar/', DATA_SOURCE…);

Opmerking

SQL Server Native Client (SNAC) wordt niet geleverd met:

  • SQL Server 2022 (16.x) en latere versies
  • SQL Server Management Studio 19 en latere versies

De SQL Server Native Client (SQLNCLI of SQLNCLI11) en de verouderde Microsoft OLE DB-provider voor SQL Server (SQLOLEDB) worden niet aanbevolen voor de ontwikkeling van nieuwe toepassingen.

Gebruik een van de volgende stuurprogramma's voor nieuwe projecten:

Voor SQLNCLI die als onderdeel van SQL Server Database Engine (versies 2012 tot en met 2019) wordt geleverd, raadpleegt u deze uitzondering voor de levenscyclus van ondersteuning.

Kerberos-ondersteuning

SQL Server is geconfigureerd voor toegang tot een ondersteund Hadoop-cluster. Kerberos-beveiliging wordt niet afgedwongen in Hadoop Cluster.

Bij het selecteren uit de externe tabel, wordt de volgende fout geretourneerd:

Msg 105019, Niveau 16, Staat 1, Regel 55
De toegang tot EXTERNAL TABLE is mislukt vanwege een interne fout: 'Java-uitzondering die is gegenereerd bij het aanroepen van HdfsBridge_Connect: Fout [Kan LoginClass niet instantiëren] is opgetreden tijdens het openen van een extern bestand.'
Msg 7320, Niveau 16, Status 110, Regel 55
Kan de query 'Externe query' niet uitvoeren op OLE DB-provider 'SQLNCLI11' voor gekoppelde server (null). De toegang tot EXTERNAL TABLE is mislukt vanwege een interne fout: 'Java-uitzondering die is gegenereerd bij het aanroepen van HdfsBridge_Connect: Fout [Kan LoginClass niet instantiëren] is opgetreden tijdens het openen van een extern bestand.'

Bij analyse van het DWEngine serverlogboek toont zich de volgende fout:

[Thread:16432] [EngineInstrumentation:EngineQueryErrorEvent] (Fout, hoog):
De toegang tot EXTERNAL TABLE is mislukt vanwege een interne fout: 'Java-uitzondering die is opgetreden bij het aanroepen van HdfsBridge_Connect: Fout [com.microsoft.polybase.client.KerberosSecureLogin] is opgetreden tijdens het openen van een extern bestand.' Microsoft.SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: EXTERNAL TABLE toegang is mislukt vanwege een interne fout: 'Java-exceptie opgetreden bij aanroep naar HdfsBridge_Connect: Fout [com.microsoft.polybase.client.KerberosSecureLogin] trad op bij het openen van een extern bestand.' >--- Microsoft.SqlServer.DataWarehouse.DataMovement.Common.ExternalAccess.HdfsAccessException: Java-uitzondering gegenereerd bij aanroep naar HdfsBridge_Connect: Fout [com.microsoft.polybase.client.KerberosSecureLogin] is opgetreden tijdens het openen van een extern bestand.

Mogelijke reden:
Kerberos is niet ingeschakeld in Hadoop-cluster, maar Kerberos-beveiliging is ingeschakeld in core-site.xml, yarn-site.xmlof de hdfs-site.xml zich standaard onder Program Files\Microsoft SQL Server\MSSQL13. MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf. In Linux bevinden de bestanden zich standaard in /var/opt/mssql/binn/polybase/hadoop/conf/.

Mogelijke oplossing:
Plaats commentaar bij de Kerberos-beveiligingsgegevens in de bovengenoemde bestanden.

Zie Problemen met PolyBase kerberos-connectiviteit oplossen voor meer informatie over het oplossen van problemen met PolyBase en Kerberos.

Interne queryprocessorfout

Als u een query uitvoert op een externe tabel, wordt de volgende fout geretourneerd:

Msg 8680, Niveau 17, Condities 5, Regel 118
Interne queryprocessorfout: er is een onverwachte fout opgetreden tijdens de verwerking van een externe queryfase.

Het DWEngine-serverlogboek bevat de volgende berichten:

[Thread:5216] [ControlNodeMessenger:ErrorEvent] (Fout, hoog): ***** DMS-systeem heeft verbroken knooppunten:
[Thread:5216] [ControlNodeMessenger:ErrorEvent] (Fout, hoog): ***** DMS-systeem heeft verbroken knooppunten:
[Thread:5216] [ControlNodeMessenger:ErrorEvent] (Fout, hoog): ***** DMS-systeem heeft verbroken knooppunten:

Mogelijke reden:
De reden voor deze fout kan zijn dat SQL Server niet opnieuw is opgestart na het configureren van PolyBase.

Mogelijke oplossing:
Start SQL Server opnieuw op. Controleer het DWEngine-serverlogboek om te bevestigen dat er na het opnieuw opstarten geen DMS-verbinding is verbroken.

Gebruiker die nodig is voor HDFS-toegang

Scenario:
SQL Server is verbonden met een niet-beveiligd Hadoop-cluster (Kerberos is niet ingeschakeld). PolyBase is geconfigureerd om berekeningen naar Hadoop-cluster te pushen.

Voorbeeld query:

select count(*) from foo WITH (FORCE EXTERNALPUSHDOWN);

Er wordt een foutbericht geretourneerd dat er ongeveer als volgt uitziet:

Msg 105019, Niveau 16, Status 1, Regel 1
EXTERNE TABEL-toegang is mislukt vanwege interne fout: 'Java-uitzondering gegenereerd bij aanroep naar JobSubmitter_PollJobStatus: Fout [java.net.ConnectException: Call From big1506sql2016/172.16.1.4 to 0.0.0.0:10020 failed on connection exception: java.net ConnectException: Connection geweigerd: verbinding geweigerd: geen verdere informatie; Zie voor meer informatie: http://wiki.apache.org/hadoop/ConnectionRefused] is opgetreden tijdens het openen van een extern bestand.'
OLE DB-provider 'SQLNCLI11' voor gekoppelde server (null)' retourneert bericht 'Niet-opgegeven fout'.
Msg 7421, Niveau 16, Status 2, Regel 1
Kan de rijenset niet ophalen van OLE DB-provider 'SQLNCLI11' voor gekoppelde server (null). .

Hadoop Yarn-logboekfout:

Het instellen van de taak is mislukt: org.apache.hadoop.security.AccessControlException: Machtiging geweigerd: user=pdw_user, access=WRITE, inode="/user":hdfs:hdfs:drwxr-xr-x bij org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:265) bij org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:251) bij org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:232) org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:176) bij org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5525)

Mogelijke reden:
Als Kerberos is uitgeschakeld, gebruikt PolyBase pdw_user als de gebruiker voor toegang tot HDFS en het verzenden van MapReduce-taken.

Mogelijke oplossing:
Maak pdw_user op Hadoop en geef deze voldoende machtigingen voor de mappen die tijdens de mapreduce-verwerking worden gebruikt. Zorg er ook voor dat pdw_user de eigenaar is van de MAP /user/pdw_user HDFS.

Hieronder ziet u een voorbeeld van hoe u een thuisdirectory maakt en machtigingen toewijst aan pdw_user:

sudo -u hdfs hadoop fs -mkdir /user/pdw_user
sudo -u hdfs hadoop fs -chown pdw_user /user/pdw_user

Zorg er daarna voor dat pdw_user lees-, schrijf- en uitvoermachtigingen heeft voor de map /user/pdw_user. Zorg ervoor dat de map /tmp 777 machtigingen heeft.

Zie Problemen met PolyBase kerberos-connectiviteit oplossen voor meer informatie over het oplossen van problemen met PolyBase en Kerberos.

Java-geheugenfout vanwege UTF-8

Scenario:
SQL Server PolyBase is ingesteld met Hadoop Cluster of Azure Blob Storage. Elke selectiequery mislukt met de volgende fout:

Msg 106000, niveau 16, staat 1, regel 1
Java-heapruimte

Mogelijke reden:
Ongeldige invoer kan leiden tot een fout in het geheugen van java. Het bestand heeft mogelijk geen UTF-8-indeling. DMS probeert het hele bestand als één rij te lezen omdat het rijscheidingsteken niet kan worden gedecodeerd, waardoor er een Java heap space-fout optreedt.

Mogelijke oplossing:
Converteer het bestand naar de UTF-8-indeling omdat PolyBase momenteel UTF-8-indeling vereist voor bestanden met tekstscheidingstekens.

Hadoop-connectiviteitsconfiguratie

Als u SQL Server PolyBase configureert om verbinding te maken met Azure Blob Storage, wordt het volgende foutbericht in SQL Server geretourneerd:

Msg 105019, niveau 16, staat 1, regel 74
EXTERNE TABEL-toegang is mislukt vanwege interne fout: 'Java-uitzondering die is gegenereerd bij aanroep naar HdfsBridge_Connect: Fout [Geen bestandssysteem voor schema: wasbs] is opgetreden tijdens het openen van een extern bestand.'

Mogelijke reden:
Hadoop-connectiviteit is niet ingesteld op de configuratiewaarde voor toegang tot Azure Blob Storage.

Mogelijke oplossing:
Stel de Hadoop-connectiviteit in op een waarde (bij voorkeur 7) die Azure Blob Storage ondersteunt en SQL Server opnieuw start. Zie PolyBase-connectiviteitsconfiguratie voor een lijst met connectiviteitswaarden en ondersteunde typen.

Fout bij het maken van tabel als selecteren

Scenario:
Gegevens exporteren naar Azure Blob Storage of het Hadoop-bestandssysteem met behulp van PolyBase en de syntaxis CREATE EXTERNAL TABLE AS SELECT (CETAS) vanuit SQL Server mislukt met het volgende foutbericht:

Msg 156, Niveau 15, Staat 1, Regel 177
Onjuiste syntaxis in de buurt van het trefwoord 'WITH'.
Msg 319, Niveau 15, Staat 1, Regel 177
Onjuiste syntaxis in de buurt van het trefwoord 'with'. Als deze instructie een algemene tabelexpressie, een xmlnamespaces-component of een contextcomponent voor het bijhouden van wijzigingen is, moet de vorige instructie worden beëindigd met een puntkomma.

Mogelijke reden:
Wanneer u gegevens exporteert naar Hadoop of Azure Blob Storage via PolyBase, worden alleen de gegevens geëxporteerd, niet de kolomnamen (metagegevens) zoals gedefinieerd in de opdracht CREATE EXTERNAL TABLE.

Mogelijke oplossing:
Maak eerst de externe tabel en gebruik VERVOLGENS INSERT INTO SELECT om te exporteren naar de externe locatie. Zie PolyBase-queryscenario's voor een codevoorbeeld.

Externe tabel maken vanuit Azure Blob Storage mislukt

Scenario:
Toegewezen SQL-pool (voorheen SQL DW) is ingesteld voor het importeren van gegevens uit Azure Blob Storage. Het aanmaken van een externe tabel mislukt met het volgende bericht.

Msg 105019, niveau 16, staat 1, regel 34
Externe TABLE-toegang is mislukt vanwege interne fout: 'Java-uitzondering die wordt gegenereerd bij aanroep van HdfsBridge_IsDirExist. Java-uitzonderingsbericht:com.microsoft.azure.storage.StorageException: de server kan de aanvraag niet verifiëren. Zorg ervoor dat de waarde van de autorisatieheader juist is gevormd, inclusief de handtekening.: Fout [com.microsoft.azure.storage.StorageException: Server kan de aanvraag niet verifiëren. Zorg ervoor dat de waarde van de autorisatieheader juist is gevormd, inclusief de handtekening.] heeft plaatsgevonden tijdens het openen van een extern bestand.'

Mogelijke reden:
Er is een verkeerde Azure-opslagsleutel gebruikt om de database-specifieke referentie te maken.

Mogelijke oplossing:
Verwijder alle gerelateerde objecten (bijvoorbeeld gegevensbron, bestandsindeling) en verwijder vervolgens de databasereferentie met de juiste opslagsleutel en maak deze opnieuw.

Kerberos-configuratiehoofdletters

Scenario:
SQL Server is ingesteld met een Cloudera-cluster waarop Kerberos is ingeschakeld. SQL Server is opnieuw opgestart nadat alle configuratiewijzigingen zijn doorgevoerd. De PolyBase Engine- en PolyBase-services voor gegevensverplaatsing worden uitgevoerd na het opnieuw opstarten. De volgende foutberichten worden geretourneerd:

Gegevensbron die is geconfigureerd zonder locatie voor taaktracker:

org.apache.hadoop.fs.FileSystem: Provider org.apache.hadoop.fs.viewfs.ViewFileSystem kon niet worden geïnstantieerd

Gegevensbron geconfigureerd met locatie voor taaktracker:

Fout [Kan Kerberos realm niet ophalen] is opgetreden tijdens het openen van een extern bestand

Mogelijke reden:
De waarde voor de eigenschap "hadoop.security.authentication" zegt 'kerberos' in de Coresite.xml.

Mogelijke oplossing:
De eigenschap "hadoop.security.authentication" van Coresite.xml moet KERBEROS (in hoofdletters) als waarde zijn.

Zie Problemen met PolyBase kerberos-connectiviteit oplossen voor meer informatie over het oplossen van problemen met PolyBase en Kerberos.

Mapred-site.xml ontbrekende waarden

Scenario:
SQL Server of APS is ingesteld met ondersteund HDP-cluster. Queries waarvoor geen pushdown-werk is vereist, maar mislukken met het volgende bericht wanneer de hint 'FORCE PUSHDOWN' wordt gebruikt met de volgende foutberichten.

Msg 7320, niveau 16, staat 110, regel 35
Kan de query 'Externe query' niet uitvoeren op OLE DB-provider 'SQLNCLI11' voor gekoppelde server (null). EXTERNE TABEL-toegang is mislukt vanwege interne fout: 'Java-uitzondering die is gegenereerd bij aanroep naar JobSubmitter_PollJobStatus: Fout [org.apache.hadoop.ipc.RemoteException(java.lang.NullPointerException): java.lang.NullPointerException
at org.apache.hadoop.mapreduce.v2.hs.HistoryClientService$HSClientProtocolHandler.getTaskAttemptCompletionEvents(HistoryClientService.java:277)
at org.apache.hadoop.mapreduce.v2.api.impl.pb.service.MRClientProtocolPBServiceImpl.getTaskAttemptCompletionEvents(MRClientProtocolPBServiceImpl.java:173)
at org.apache.hadoop.yarn.proto.MRClientProtocol$MRClientProtocolService$2.callBlockingMethod(MRClientProtocol.java:283)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:962)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2127)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2123)
at java.security.AccessController.doPrivileged(Native Method)
op javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2121)
] is opgetreden tijdens het openen van een extern bestand.'

Mogelijke reden:
Mapred-site.xml ontbreken enkele benodigde waarden waarmee wordt gecontroleerd op tussenliggende en eindresultaten.

Mogelijke oplossing:
Voeg de volgende eigenschappen toe en koppel de juiste waarden zoals weergegeven in Ambari aan het mapred-site.xml-bestand op SQL Server.

<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/user</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/mr-history/done</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/mr-history/tmp</value>
</property>

Toegang configureren op hostnaam

Scenario:
SQL Server is ingesteld voor toegang tot een ondersteund Hadoop-cluster. Het creëren van een externe tabel resulteert in een van de volgende fouten:

Kan de query 'Externe query' niet uitvoeren op OLE DB-provider 'SQLNCLI11' voor gekoppelde server (null). 110802; Er is een interne DMS-fout opgetreden waardoor deze bewerking is mislukt. Details: Uitzondering: Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.DmsSqlNativeException, Bericht: SqlNativeBufferReader.Run, fout in OdbcExecuteQuery: SqlState: 42000, NativeError: 8680, 'Error calling: SQLExecDirect(this-GetHstmt >(), (SQLWCHAR *)statementText, SQL_NTS), SQL return code: -1 | SQL-foutinformatie: SrvrMsgState: 26, SrvrSeverity: 17, Fout <1>: ErrorMsg: [Microsoft][ODBC-stuurprogramma 13 voor SQL Server][SQL Server]Interne queryprocessorfout: de queryprocessor heeft een onverwachte fout aangetroffen tijdens de verwerking van een externe queryfase. Fout bij aanroepen: pReadConn->ExecuteQuery(statementText, bufferFormat) | status: FFFF, nummer: 24, actieve verbindingen: 8', Verbindingsreeks: Driver={pdwodbc}; APP=RCSmall-DmsNativeReader:WAD1D16HD2001\mpdwsvc (3600)-ODBC-PoolId1433; Trusted_Connection=ja; AutoTranslate=nee; Server=\.\pipe\sql\query

[Thread:30544] [AbstractReaderWorker:ErrorEvent] (Fout, hoog): QueryId QID2433 PlanId 6c3a4551-e54c-4c06-a5ed-a8733edac691 StepId 7:
Kan blok niet verkrijgen: BP-1726738607-192.168.225.121-1443123675290:blk_1159687047_86196509 file=/user/hive/warehouse/u_data/000000_0
Microsoft.SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: Kan blok niet verkrijgen: BP-1726738607-192.168.225.121-1443123675290:blk_1159687047_86196509 file=/user/hive/warehouse/u_data/00000_0
at Microsoft.SqlServer.DataWarehouse.DataMovement.Common.ExternalAccess.HdfsBridgeReadAccess.Read(MemoryBuffer buffer, Boolean& isDone)
at Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.DataReader.ExternalMoveBufferReader.Read()
at Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.ExternalMoveReaderWorker.ReadAndSendData()
at Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.ExternalMoveReaderWorker.Execute(Object status)

Mogelijke reden:
Dit foutbericht kan worden weergegeven wanneer het Hadoop-cluster is ingesteld in een configuratie waarin gegevensknooppunten alleen toegankelijk zijn buiten het cluster met behulp van de hostnaam en niet het IP-adres.

Mogelijke oplossing:
Voeg het volgende toe aan hdfs-site.xml bestand aan de clientzijde (SQL Server). Met deze configuratie wordt afgedwongen dat het naamknooppunt een URI retourneert voor de gegevensknooppunten met de hostnaam in plaats van het interne IP-adres.

<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
</property>

Mappenorganisatie veroorzaakt overtollige geheugenoverhead

Scenario:
SQL Server voert een PolyBase-query uit op een map met een groot aantal bestanden (>30.000 bestanden onder het pad van de map recursief) en een van de volgende foutberichten wordt geretourneerd:

Msg 105019, Niveau 16, Staat 1, Lijn 1
EXTERNE TABEL-toegang is mislukt vanwege interne fout: 'Java-uitzondering die wordt gegenereerd bij aanroep van HdfsBridge_GetFileNameByIndex. Java-uitzonderingsbericht: GC-overheadlimiet is overschreden: Fout [GC-overheadlimiet overschreden] is opgetreden tijdens het openen van een extern bestand.'

Msg 105019, Niveau 16, Status 1, Regel 1
EXTERNE TABEL-toegang mislukte vanwege interne fout: 'Java-uitzondering opgetreden bij aanroep van HdfsBridge_GetDirectoryFiles. Java-uitzonderingsbericht: Java-heapruimte: Fout [Java heap-ruimte] is opgetreden tijdens het openen van een extern bestand.'

Mogelijke reden:
Bij het verwerken van een pad inventariseert PolyBase alle bestanden onder dat pad en is er vaste geheugenoverhead gekoppeld aan de gegevensstructuur die wordt gebruikt om de bestanden weer te geven. Met een groot aantal bestanden wordt deze overhead merkbaar en kan uiteindelijk alle geheugen worden verbruikt die beschikbaar is voor de JVM.

Mogelijke oplossing:
Rangschik de gegevens in meerdere mappen zodanig dat elke map een subset van bestanden bevat en vervolgens de query opsplitsen in meerdere mappen die op een deel van het oorspronkelijke pad tegelijk werken en de tabellen materialiseren als SQL Server-tabellen (voordat ze worden toegevoegd).

Voorbeeld: Stel dat uw externe tabelgegevens zich op de volgende locatie bevinden: Orders/file1.txt,...,file30K.txt.

Wijzig de indeling zodat de gegevens worden ingedeeld in een conventionele bestandspartitiestructuur in Orders/jjjj/mm/dd/file1.txt. Wijs uw externe tabel naar een lager mappad, zoals maand(mm) of dag(dd) en importeer de bestanden in SQL Server-tabellen in stukken en voeg ze vervolgens toe als onderdeel van één tabel. Zelfs als u de juiste mapstructuur hebt om mee te beginnen, volgt u stap 2 om met dat aantal bestanden te kunnen werken zonder dat er onvoldoende JVM-geheugen beschikbaar is.

Onverwachte tekens in configuratiebestanden

Scenario:
Het instellen van SQL Server of APS met een Hadoop-cluster, waarbij yarn-site.xml, hdfs-site.xmlen andere configuratiebestanden moeten worden gewijzigd. Het volgende SQL Server-foutbericht wordt waargenomen:

Msg 105019, Niveau 16, Staat 1, Regel 1
Microsoft.SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: EXTERNAL TABLE toegang mislukt door interne fout: 'Java-uitzondering opgeroepen bij een aanroep naar HdfsBridge_Connect. Java-uitzonderingsbericht: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Ongeldig byte 1 van 1-byte UTF-8-reeks.: Fout [com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Ongeldig byte 1 van 1-byte UTF-8-reeks.] heeft plaatsgevonden tijdens het openen van een extern bestand.' --->

Mogelijke reden:
Dit kan gebeuren als u tekst hebt gekopieerd en geplakt in configuratiebestanden vanuit een website of chatvenster. Het is mogelijk dat ongewenste/niet-afdrukbare tekens zich in de configuratiebestanden bevinden.

Mogelijke oplossing:
Open de bestanden in een andere teksteditor (anders dan Kladblok) en zoek deze tekens en verwijder ze. Start de benodigde services opnieuw op.

Delta-tabelquery kan mislukken met fouten 2571 en 16513

Scenario:
U kunt de volgende fout tegenkomen bij het uitvoeren van query's op een externe Delta-tabel:

Msg 2571, Level 14, State 3, Line 1
User '<user>' does not have permission to run DBCC TRACEON.
Msg 16513, Level 16, State 0, Line 1
Error reading external metadata.

Mogelijke reden:
Dit kan gebeuren omdat er een queryhint is die kan worden toegevoegd aan de QUERYTRACEON deltabestand-metagegevensquery en waarvoor de sysadmin serverrol moet worden uitgevoerd.

Mogelijke oplossing:
Als dit gebeurt, kunt u het probleem oplossen door traceringsvlag 14073 globaal in te schakelen. Hierdoor wordt voorkomen dat de queryhint wordt toegevoegd.

Zie ook