PolyBase-Fehler und mögliche Lösungen

Gilt für:SQL Server

Dieser Artikel enthält allgemeine Fehlerszenarien und Lösungen für PolyBase.

Weitere Informationen zur Überwachung und Problembehandlung für PolyBase finden Sie unter Überwachung und Problembehandlung für PolyBase.

Die üblichen Speicherorte von PolyBase-Protokolldateien unter Windows und Linux finden Sie unter Überwachung und Problembehandlung für PolyBase.

Fehlermeldungen und mögliche Lösungen

Fehler beim Aktualisieren von SQL Server 2022 aufgrund eines ungültigen Spaltennamens (Groß-/Kleinschreibung beachten)

Dieser Fehler kann bei der Installation kumulativer Updates für SQL Server auf einem Server auftreten, auf dem das PolyBase-Feature installiert ist und eine Groß-/Kleinschreibung beachtende Sortierung verwendet wird. Die gemeldete Upgrade-Fehlermeldung lautet wie folgt:

Beispiel für Fehlermeldung: 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.

Grund:

Während des Upgradevorgangs kann das SQL Server-Skript aufgrund von Werten, bei denen die Groß-/Kleinschreibung beachtet wird, nicht erfolgreich abgeschlossen werden.

Lösung: Dieses Problem wird im bevorstehenden kumulativen Update dauerhaft behoben.

Problemumgehung:

  1. Trace-Flag 902 aktivieren.
  2. Starten Sie SQL Server.
  3. Ändern Sie die Sortierung der Datenbank „DWConfiguration“ von CS (Groß-/Kleinschreibung beachten) zu CI (Groß-/Kleinschreibung nicht beachten).
  4. Führen Sie das Upgrade noch einmal aus.
  5. Deaktivieren Sie die Ablaufverfolgungskennzeichnung 902.
  6. Starten Sie SQL Server neu.
  7. Ändern Sie die Kollation der Datenbank „DWConfiguration“ wieder von CI (ohne Berücksichtigung der Groß-/Kleinschreibung) in CS (mit Berücksichtigung der Groß-/Kleinschreibung).

Als Alternative zu den Trace-Flags können Sie, bevor Sie ein kumulatives Update installieren, überprüfen, ob die Datenbank „DWConfiguration“ eine Sortierung mit Berücksichtigung der Groß-/Kleinschreibung (CS) verwendet, um zu verhindern, dass das Problem auftritt. Erwägen Sie, die Kollation in eine Kollation ohne Berücksichtigung der Groß-/Kleinschreibung (CI) zu ändern, das kumulative Update anzuwenden und sie anschließend wieder auf die ursprüngliche Kollation zurückzuändern.

Fehler: „100001;Fehler beim Generieren des Abfrageplans“

Der Fehler „Fehler beim Generieren des Abfrageplans“ kann auftreten, wenn die SQL Server-Datenbank-Engine auf mindestens Kumulatives Update 8 (15.0.4073) gepatcht wurde, das PolyBase-Feature aber nicht auf denselben Build aktualisiert wurde. Dies kann vorkommen, wenn das PolyBase-Feature zu einer vorhandenen SQL Server-Instanz hinzugefügt wird. Weitere Informationen finden Sie unter PolyBase-Fehler – 100001;Fehler beim Generieren des Abfrageplans.

Bringen Sie nach der Installation des PolyBase-Features die neue Funktion immer auf denselben Versionsstand. Installieren Sie bei Bedarf Service Packs (SPs), kumulative Updates (CUs) und/oder allgemeine Vertriebsversionen (General Distribution Releases, GDRs). Informationen zum Bestimmen der Version PolyBase finden Sie unter Ermitteln von Version, Edition und Updateebene von SQL Server und zugehöriger Komponenten.

Änderung des Dienstkontos

Beispiel für Fehlermeldung:

107035: Fehler bei DMS-Autorisierung, da [DOMÄNE\Benutzer] nicht Mitglied der Gruppe [PdwDataMovementAccess] ist
107017: Ungültiger DMS-Steuerungsheader:

Dieser Fehler ist wahrscheinlich auf eine Änderung des PolyBase-Dienstkontos zurückzuführen. Deinstallieren Sie das PolyBase-Feature, und installieren Sie es erneut, um die Dienstkonten für die PolyBase-Engine und den PolyBase-Datenverschiebungsdienst zu ändern.

Berechtigungsfehler beim Datenverschiebungsdienst

Weitere Informationen zur Behandlung und Behebung von Berechtigungsproblemen mit dem Datenverschiebungsdienst finden Sie unter PolyBase Service Account Permissions and Common Errors Observed When They Are Missing (PolyBase-Dienstkontoberechtigungen und häufige Fehler bei fehlenden Berechtigungen).

Windows-Authentifizierungsfehler

Weitere Informationen zur Behandlung und Behebung von Berechtigungsproblemen im Zusammenhang mit einem Fehler bei der Windows-Authentifizierung finden Sie unter PolyBase Service Account Permissions and Common Errors Observed When They Are Missing (PolyBase-Dienstkontoberechtigungen und häufige Fehler bei fehlenden Berechtigungen).

Die Abfrage „Remote Query“ kann nicht ausgeführt werden

Beispiel für Fehlermeldung:

Meldung 7320, Ebene 16, Status 110, Zeile 14
Die Abfrage „Remote Query“ kann beim OLE DB-Anbieter „SQLNCLI11“ für den verknüpften Server „(null)“ nicht ausgeführt werden. Abfrage abgebrochen: Beim Lesen einer externen Quelle wurde der maximale Ablehnungsschwellenwert (0 Zeilen) erreicht: 1 abgelehnte Zeile von insgesamt 1 verarbeiteten Zeile. (/nation/sensors.ldjson.txt)Spaltenordinal: 0, Erwarteter Datentyp: INT, Fehlerhafter Wert: {"id":"S2740036465E2B","time":"2016-02-26T16:59:02.9300000Z","temp":23.3,"hum":0.77,"wind":17,"press":1032,"loc":[-76.90914996169623,38.8929314364726]} (Spaltenkonvertierungsfehler), Fehler: Fehler beim Konvertieren des Datentyps NVARCHAR in INT.

Beachten Sie, dass es Ableitungen dieses Fehlers geben kann. Der Name der ersten abgelehnten Datei wird in SQL Server Management Studio (SSMS) mit beanstandeten Datentypen oder Werten angezeigt.

Mögliche Ursache:
Der Grund dieses Fehlers ist, dass jede Datei ein anderes Schema hat. Die PolyBase-DDL der externen Tabelle liest, wenn sie auf ein Verzeichnis zeigt, rekursiv alle Dateien in diesem Verzeichnis. Wenn eine Spalte oder ein Datentyp nicht übereinstimmt, wird diese Fehlermeldung möglicherweise in SSMS angezeigt.

Mögliche Lösung:
Wenn die Daten für jede Tabelle aus einer einzelnen Datei stammen, verwenden Sie den Dateinamen im Abschnitt LOCATION, dem das Verzeichnis der externen Dateien vorangestellt ist. Wenn es pro Tabelle mehrere Dateien gibt, legen Sie jeden Satz von Dateien in verschiedenen Verzeichnissen in Azure Blob Storage ab. Verweisen Sie LOCATION auf das Verzeichnis statt auf eine bestimmte Datei. Diese Lösung wird empfohlen.

Beispiel:

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...);

Hinweis

SQL Server Native Client (SNAC) wird nicht ausgeliefert mit:

  • SQL Server 2022 (16.x) und höhere Versionen
  • SQL Server Management Studio 19 und spätere Versionen

Der SQL Server Native Client (SQLNCLI oder SQLNCLI11) und der Microsoft OLE DB-Legacyanbieter für SQL Server (SQLOLEDB) werden für neue Anwendungsentwicklungen nicht empfohlen.

Für neue Projekte verwenden Sie einen der folgenden Treiber:

Informationen zu SQLNCLI, das als Komponente der SQL Server-Datenbank-Engine (Versionen 2012 bis 2019) verfügbar ist, finden Sie in dieser Ausnahme für den Supportlebenszyklus.

Kerberos-Unterstützung

SQL Server ist für den Zugriff auf einen unterstützten Hadoop-Cluster konfiguriert. Die Kerberos-Sicherheit wird in Hadoop-Clustern nicht erzwungen.

Wenn Sie Daten in der externen Tabelle auswählen, wird der folgende Fehler zurückgegeben:

Meldung 105019, Ebene 16, Status 1, Zeile 55
EXTERNAL TABLE Zugriff aufgrund eines internen Fehlers fehlgeschlagen: 'Java-Ausnahme beim Aufruf von HdfsBridge_Connect ausgelöst: Fehler [LoginClass kann nicht instanziiert werden] ist beim Zugriff auf die externe Datei aufgetreten.'
Meldung 7320, Ebene 16, Status 110, Zeile 55
Die Abfrage „Remote Query“ kann beim OLE DB-Anbieter „SQLNCLI11“ für den verknüpften Server „(null)“ nicht ausgeführt werden. EXTERNAL TABLE Zugriff aufgrund eines internen Fehlers fehlgeschlagen: 'Java-Ausnahme beim Aufruf von HdfsBridge_Connect ausgelöst: Fehler [LoginClass kann nicht instanziiert werden] beim Zugriff auf die externe Datei aufgetreten.'

Die Untersuchung des DWEngine-Serverprotokolls ergibt folgenden Fehler:

[Thread:16432] [EngineInstrumentation:EngineQueryErrorEvent] (Fehler, hoch):
EXTERNAL TABLE Zugriff fehlgeschlagen aufgrund eines internen Fehlers: 'Java-Ausnahme beim Aufruf von HdfsBridge_Connect ausgelöst: Fehler [com.microsoft.polybase.client.KerberosSecureLogin] ist beim Zugriff auf die externe Datei aufgetreten.' Microsoft. SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: EXTERNAL TABLE Fehler beim Zugriff aufgrund eines internen Fehlers: 'Java Ausnahme ausgelöst beim Aufruf von HdfsBridge_Connect: Fehler [com.microsoft.polybase.client.KerberosSecureLogin] beim Zugriff auf externe Datei aufgetreten.' --->Microsoft.SqlServer.DataWarehouse.DataMovement.Common.ExternalAccess.HdfsAccessException: Java-Ausnahme bei Aufruf von HdfsBridge_Connect ausgelöst: Fehler [com.microsoft.polybase.client.KerberosSecureLogin] beim Zugriff auf externe Datei aufgetreten.

Mögliche Ursache:
Kerberos ist im Hadoop-Cluster nicht aktiviert, aber die Kerberos-Sicherheit ist in der Datei „core-site.xml“, „yarn-site.xml“ oder „hdfs-site.xml“ aktiviert, die sich standardmäßig unter „Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf“ befindet. Unter Linux befinden sich die Dateien standardmäßig in /var/opt/mssql/binn/polybase/hadoop/conf/.

Mögliche Lösung:
Kommentieren Sie die Kerberos-Sicherheitsinformationen aus den oben genannten Dateien aus.

Weitere Informationen zur Problembehandlung bei PolyBase und Kerberos finden Sie unter Problembehandlung: PolyBase-Kerberos-Konnektivität.

Interner Fehler des Abfrageprozessors

Beim Abfragen einer externen Tabelle wird der folgende Fehler zurückgegeben:

Meldung 8680, Ebene 17, Status 5, Zeile 118
Interner Fehler des Abfrageprozessors: Unerwarteter Fehler beim Abfrageprozessor bei der Verarbeitung einer Remoteabfragephase.

Das DWEngine-Serverprotokoll enthält die folgenden Meldungen:

[Thread:5216] [ControlNodeMessenger:ErrorEvent] (Fehler, Hoch): ***** DMS-System hat die Verbindung zu Knoten verloren :
[Thread:5216] [ControlNodeMessenger:ErrorEvent] (Fehler, hoch): ***** DMS-System hat die Verbindung zu Knoten verloren :
[Thread:5216] [ControlNodeMessenger:ErrorEvent] (Fehler, Hoch): ***** DMS-System hat die Verbindung zu Knoten verloren :

Mögliche Ursache:
Die Ursache dieses Fehlers könnte sein, dass SQL Server nach dem Konfigurieren von PolyBase nicht neu gestartet wurde.

Mögliche Lösung:
Starten Sie SQL Server neu. Prüfen Sie das DWEngine-Serverprotokoll, um sicherzustellen, dass nach dem Neustart keine DMS-Verbindungsabbrüche erfolgen.

Benutzer für HDFS-Zugriff erforderlich

Szenario:
SQL Server ist mit einem ungesicherten Hadoop-Cluster verbunden (Kerberos ist nicht aktiviert). PolyBase ist für die Übertragung der Berechnung an den Hadoop-Cluster konfiguriert.

Beispielabfrage:

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

Es wird eine Fehlermeldung ähnlich der folgenden zurückgegeben:

Meldung 105019, Ebene 16, Status 1, Zeile 1
EXTERNAL TABLEZugriff aufgrund eines internen Fehlers fehlgeschlagen: 'Java-Ausnahme beim Aufruf von JobSubmitter_PollJobStatus ausgelöst: Fehler [java.net.ConnectException: Call From big1506sql2016/172.16.1.4 to 0.0.0.0:10020 failed on connection exception: java.net ConnectException: Connection refused: no further information; Weitere Informationen finden Sie hier: http://wiki.apache.org/hadoop/ConnectionRefused] beim Zugriff auf externe Datei aufgetreten.'
Der OLE DB-Anbieter SQLNCLI11 für Verbindungsserver „(null)“ hat die Meldung „Nicht spezifizierter Fehler“ zurückgegeben.
Meldung 7421, Ebene 16, Status 2, Zeile 1
Das Rowset kann nicht vom OLE DB-Anbieter 'SQLNCLI11 für den Verbindungsserver „(null)“ abgerufen werden. .

Hadoop Yarn-Protokollfehler:

Fehler beim Einrichten des Auftrags: org.apache.hadoop.security.AccessControlException: Berechtigung verweigert: user=pdw_user, access=WRITE, inode="/user":hdfs:hdfs:drwxr-xr-x at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:265) bei org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:251) bei org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:232) org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:176) bei org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5525)

Mögliche Ursache:
Wenn Kerberos deaktiviert ist, verwendet PolyBase pdw_user als Benutzer für den Zugriff auf HDFS und das Senden von MapReduce-Aufträgen.

Mögliche Lösung:
Erstellen Sie pdw_user in Hadoop, und erteilen Sie diesem Benutzer die erforderlichen Berechtigungen für die Verzeichnisse, die während der MapReduce-Verarbeitung verwendet werden. Stellen Sie außerdem sicher, dass pdw_user der Besitzer des HDFS-Verzeichnisses „/user/pdw_user“ ist.

Im Folgenden finden Sie ein Beispiel dafür, wie Sie das Home-Verzeichnis erstellen und pdw_user Berechtigungen zuweisen:

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

Stellen Sie danach sicher, dass pdw_user Lese-, Schreib- und Ausführungsberechtigungen für das Verzeichnis „/user/pdw_user“ hat. Stellen Sie sicher, dass das Verzeichnis „/tmp“ die Berechtigung 777 hat.

Weitere Informationen zur Problembehandlung bei PolyBase und Kerberos finden Sie unter Problembehandlung: PolyBase-Kerberos-Konnektivität.

Java-Arbeitsspeicherfehler aufgrund von UTF-8

Szenario:
SQL Server PolyBase wurde mit Hadoop-Cluster oder Azure Blob Storage eingerichtet. SELECT-Abfragen schlagen mit folgendem Fehler fehl:

Meldung 106000, Ebene 16, Status 1, Zeile 1
Java-Heap-Speicher

Mögliche Ursache:
Unzulässige Eingaben können den Java-Fehler „Zu wenig Arbeitsspeicher“ verursachen. Die Datei hat möglicherweise nicht das UTF-8-Format. DMS versucht, die gesamte Datei als eine Zeile zu lesen, da das Zeilentrennzeichen nicht decodiert werden kann, was zu einem Java- Heapspeicherfehler führt.

Mögliche Lösung:
Konvertieren Sie die Datei in das UTF-8-Format, da PolyBase derzeit das UTF-8-Format für Dateien mit Texttrennzeichen benötigt.

Konfiguration der Hadoop-Konnektivität

Das Konfigurieren von SQL Server PolyBase zum Herstellen einer Verbindung mit Azure Blob Storage gibt in SQL Server die folgende Fehlermeldung zurück:

Meldung 105019, Ebene 16, Status 1, Zeile 74
EXTERNAL TABLE Zugriff aufgrund eines internen Fehlers fehlgeschlagen: 'Java-Ausnahme beim Aufruf von HdfsBridge_Connect ausgelöst: Fehler [Kein Dateisystem für Schema: wasbs] ist beim Zugriff auf die externe Datei aufgetreten.'

Mögliche Ursache:
Die Hadoop-Konnektivität ist nicht auf den Konfigurationswert für den Zugriff auf Azure Blob Storage festgelegt.

Mögliche Lösung:
Legen Sie die Hadoop-Konnektivität auf einen Wert (vorzugsweise 7) fest, der Azure Blob Storage unterstützt, und starten Sie SQL Server neu. Eine Liste der Konnektivitätswerte und unterstützten Typen finden Sie unter Konfiguration der PolyBase-Netzwerkkonnektivität.

Fehler bei CREATE TABLE AS SELECT

Szenario:
Beim Versuch, Daten in Azure Blob Storage- oder Hadoop-Dateisystem mit PolyBase with CREATE EXTERNAL TABLE AS SELECT (CETAS)-Syntax aus SQL Server zu exportieren, schlägt die folgende Fehlermeldung fehl:

Meldung 156, Ebene 15, Status 1, Zeile 177
Falsche Syntax in der Nähe des Schlüsselworts WITH.
Meldung 319, Ebene 15, Status 1, Zeile 177
Falsche Syntax in der Nähe des WITH-Schlüsselworts. Falls diese Anweisung ein allgemeiner Tabellenausdruck, eine XMLNAMESPACES-Klausel oder eine CHANGE TRACKING CONTEXT-Klausel ist, muss die vorherige Anweisung mit einem Semikolon abgeschlossen werden.

Mögliche Ursache:
Beim Exportieren von Daten nach Hadoop oder Azure Blob Storage über PolyBase werden nur die Daten exportiert, nicht die Spaltennamen (Metadaten), wie im CREATE EXTERNAL TABLE Befehl definiert.

Mögliche Lösung:
Erstellen Sie zuerst die externe Tabelle, und verwenden Sie INSERT dann INTO SELECT, um in den externen Speicherort zu exportieren. Ein Codebeispiel finden Sie unter PolyBase-Abfrageszenarien.

Fehler beim Erstellen einer externen Tabelle aus Azure Blob Storage

Szenario:
Der dedizierte SQL-Pool (vormals SQL DW) wurde für den Import von Daten aus Azure-Blobspeicher eingerichtet. Das Erstellen einer externen Tabelle schlägt mit der folgenden Meldung fehl.

Meldung 105019, Ebene 16, Status 1, Zeile 34
Externer TABLE-Zugriff fehlgeschlagen aufgrund eines internen Fehlers: 'Java-Ausnahme beim Aufruf von HdfsBridge_IsDirExist ausgelöst. Java-Ausnahmemeldung:com.microsoft.azure.storage.StorageException: Der Server konnte die Anforderung nicht authentifizieren. Stellen Sie sicher, dass der Wert des Headers „Authorization“ ordnungsgemäß gebildet wird, einschließlich der Signatur: Fehler [com.microsoft.azure.storage.StorageException: Server konnte die Anforderung nicht authentifizieren. Stellen Sie sicher, dass der Wert des Autorisierungsheaders, einschließlich der Signatur, korrekt ist.] beim Zugriff auf die externe Datei aufgetreten.'

Mögliche Ursache:
Beim Erstellen der datenbankbezogenen Anmeldeinformationen wurde ein falscher Azure Storage-Schlüssel verwendet.

Mögliche Lösung:
Löschen Sie alle zugehörigen Objekte (d. h. Datenquelle, Dateiformat) und löschen Sie anschließend die datenbankbezogene Anmeldeinformation und erstellen Sie sie dann mit dem richtigen Speicherschlüssel neu.

Großschreibung bei Kerberos-Konfiguration

Szenario:
SQL Server wurde mit einem Kerberos-fähigen Cloudera-Cluster eingerichtet. SQL Server wurde nach allen Konfigurationsänderungen neu gestartet. Die PolyBase-Engine und die PolyBase-Datenverschiebungsdienste werden nach dem Neustart ausgeführt. Die folgenden Fehlermeldungen werden zurückgegeben:

Datenquelle ohne konfigurierten Speicherort für den Job-Tracker:

org.apache.hadoop.fs.FileSystem: Anbieter org.apache.hadoop.fs.viewfs.ViewFileSystem konnte nicht instanziiert werden

Datenquelle mit konfiguriertem Job-Tracker-Speicherort:

Fehler [Kerberos-Bereich kann nicht abgerufen werden] beim Zugriff auf externe Datei aufgetreten

Mögliche Ursache:
Der Wert für die Eigenschaft „hadoop.security.authentication“ in der Datei „Coresite.xml“ lautet „kerberos“.

Mögliche Lösung:
Die Eigenschaft „hadoop.security.authentication“ in Coresite.xml muss als Wert KERBEROS (in Großbuchstaben) enthalten.

Weitere Informationen zur Problembehandlung bei PolyBase und Kerberos finden Sie unter Problembehandlung: PolyBase-Kerberos-Konnektivität.

In „Mapred-site.xml“ fehlen benötigte Werte

Szenario:
SQL Server oder APS wurde mit unterstütztem HDP-Cluster eingerichtet. Abfragen, die PUSHDOWN nicht benötigen, funktionieren, schlagen aber mit folgender Fehlermeldung fehl, wenn der Hinweis FORCE PUSHDOWN verwendet wird:

Meldung 7320, Ebene 16, Status 110, Zeile 35
Die Abfrage „Remote Query“ kann beim OLE DB-Anbieter „SQLNCLI11“ für den verknüpften Server „(null)“ nicht ausgeführt werden. EXTERNAL TABLE Zugriff aufgrund eines internen Fehlers fehlgeschlagen: 'Beim Aufruf von JobSubmitter_PollJobStatus wurde eine Java-Ausnahme ausgelöst: Fehler [org.apache.hadoop.ipc.RemoteException(java.lang.NullPointerException): java.lang.NullPointerException
bei org.apache.hadoop.mapreduce.v2.hs.HistoryClientService$HSClientProtocolHandler.getTaskAttemptCompletionEvents(HistoryClientService.java:277)
bei 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)
bei org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619)
bei org.apache.hadoop.ipc.RPC$Server.call(RPC.java:962)
bei org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2127)
bei org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2123)
bei java.security.AccessController.doPrivileged(Native Methode)
bei javax.security.auth.Subject.doAs(Subject.java:415)
bei org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
bei org.apache.hadoop.ipc.Server$Handler.run(Server.java:2121)
] ist beim Zugriff auf die externe Datei aufgetreten.'

Mögliche Ursache:
In der Datei „Mapred-site.xml“ fehlen einige benötigte Werte, die auf Zwischen- und Endergebnisse prüfen.

Mögliche Lösung:
Fügen Sie die folgenden Eigenschaften hinzu, und ordnen Sie die ordnungsgemäßen Werte entsprechend der Darstellung in Ambari in der Datei „mapred-site.xml“ in SQL Server zu.

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

Konfigurieren des Zugriffs nach Hostname

Szenario:
SQL Server wurde für den Zugriff auf einen unterstützten Hadoop-Cluster eingerichtet. Beim Erstellen einer externen Tabelle wird einer der folgenden Fehler zurückgegeben:

Die Abfrage „Remote Query“ kann beim OLE DB-Anbieter „SQLNCLI11“ für den verknüpften Server „(null)“ nicht ausgeführt werden. 110802;Es ist ein interner DMS-Fehler aufgetreten, der zum Fehlschlagen dieses Vorgangs geführt hat. Details: Ausnahme: Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.DmsSqlNativeException, Meldung: SqlNativeBufferReader.Run, Fehler bei OdbcExecuteQuery: SqlState: 42000, NativeError: 8680, 'Fehler beim Aufruf von: SQLExecDirect(this->GetHstmt(), (SQLWCHAR *)statementText, SQL_NTS), SQL-Rückgabecode: -1 | SQL-Fehlerinformation: SrvrMsgState: 26, SrvrSeverity: 17, Fehler <1>: Fehlermeldung: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Interner Fehler des Abfrageprozessors: Beim Verarbeiten einer Remoteabfragephase ist im Abfrageprozessor ein unerwarteter Fehler aufgetreten. | Fehler beim Aufrufen von: pReadConn->ExecuteQuery(statementText, bufferFormat) | Status: FFFF, Nummer: 24, aktive Verbindungen: 8', Verbindungszeichenfolge: Driver={pdwodbc};APP=RCSmall-DmsNativeReader:WAD1D16HD2001\mpdwsvc (3600)-ODBC-PoolId1433;Trusted_Connection=yes;AutoTranslate=no;Server=\.\pipe\sql\query

[Thread:30544] [AbstractReaderWorker:ErrorEvent] (Fehler, hoch): QueryId QID2433 PlanId 6c3a4551-e54c-4c06-a5ed-a8733edac691 StepId 7:
Block konnte nicht abgerufen werden: BP-1726738607-192.168.225.121-1443123675290:blk_1159687047_86196509 file=/user/hive/warehouse/u_data/000000_0
Microsoft.SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: Block konnte nicht abgerufen werden: BP-1726738607-192.168.225.121-1443123675290:blk_1159687047_86196509 file=/user/hive/warehouse/u_data/000000_0
bei Microsoft.SqlServer.DataWarehouse.DataMovement.Common.ExternalAccess.HdfsBridgeReadAccess.Read(MemoryBuffer buffer, Boolean& isDone)
bei Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.DataReader.ExternalMoveBufferReader.Read()
bei Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.ExternalMoveReaderWorker.ReadAndSendData()
bei Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.ExternalMoveReaderWorker.Execute(Object status)

Mögliche Ursache:
Diese Fehlermeldung kann auftreten, wenn der Hadoop-Cluster mit einer Konfiguration eingerichtet wird, bei der die Datenknoten außerhalb des Clusters nur über den Hostnamen und nicht über die IP-Adresse zugänglich sind.

Mögliche Lösung:
Fügen Sie Folgendes zur Datei „hdfs-site.xml“ auf Clientseite (SQL Server) hinzu. Durch diese Konfiguration wird der Namensknoten gezwungen, einen URI für die Datenknoten mit dem Hostnamen anstelle der internen IP-Adresse zurückzugeben.

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

Die Ordnerstruktur verursacht zusätzlichen Speicheraufwand

Szenario:
SQL Server führt eine PolyBase-Abfrage für ein Verzeichnis mit einer großen Anzahl von Dateien (>30.000 Dateien unter dem Verzeichnispfad rekursiv) aus, und eine der folgenden Fehlermeldungen wird zurückgegeben:

Meldung 105019, Ebene 16, Status 1, Zeile 1
EXTERNAL TABLE Zugriff fehlgeschlagen aufgrund eines internen Fehlers: 'Java-Ausnahme, die beim Aufruf von HdfsBridge_GetFileNameByIndex ausgelöst wurde. Java-Ausnahmemeldung: Grenzwert für GC-Overhead überschritten: Beim Zugriff auf eine externe Datei ist der Fehler [Grenzwert für GC-Overhead überschritten] aufgetreten.'

Meldung 105019, Ebene 16, Status 1, Zeile 1
EXTERNAL TABLEFehler beim Zugriff aufgrund eines internen Fehlers: 'Java Ausnahme, die beim Aufruf von HdfsBridge_GetDirectoryFiles ausgelöst wurde. Java-Ausnahmemeldung: Java heap space: Fehler [Java heap space] ist beim Zugriff auf eine externe Datei aufgetreten.'

Mögliche Ursache:
Bei der Verarbeitung eines Pfads zählt PolyBase alle Dateien unter diesem Pfad auf. Es gibt einen festen Arbeitsspeicheroverhead in Verbindung mit der Datenstruktur, die zur Darstellung der Dateien verwendet wird. Bei einer großen Anzahl von Dateien macht sich dieser Overhead bemerkbar und kann schließlich den gesamten der JVM zur Verfügung stehenden Arbeitsspeicher beanspruchen.

Mögliche Lösung:
Ordnen Sie die Daten in mehreren Verzeichnissen neu an, sodass jedes Verzeichnis eine Teilmenge von Dateien enthält. Zerlegen Sie dann die Abfrage in mehrere, die jeweils auf einen Teil des ursprünglichen Pfads angewendet werden, und materialisieren Sie die Tabellen als SQL Server-Tabellen (ehe Sie sie verknüpfen).

Beispiel: Angenommen, die Daten Ihrer externen Tabelle befinden sich an folgendem Speicherort: Orders/file1.txt,...,file30000.txt.

Ändern Sie das Layout so, dass die Daten in einer herkömmlichen Dateipartitionsstruktur in „Orders/JJJJ/MM/TT/file1.txt“ angeordnet sind. Verweisen Sie Ihre externe Tabelle auf einen niedrigeren Verzeichnispfad wie Monat(MM) oder Tag(TT), und importieren Sie die Dateien stückweise in SQL Server-Tabellen. Fügen Sie sie dann als Teil einer Tabelle hinzu. Selbst wenn Sie anfangs die richtige Verzeichnisstruktur hatten, befolgen Sie Schritt 2, um mit so vielen Dateien arbeiten zu können, ohne dass der JVM-Arbeitsspeicher knapp wird.

Unerwartete Zeichen in Konfigurationsdateien

Szenario:
Einrichten von SQL Server oder APS mit einem Hadoop-Cluster, wofür yarn-site.xml, hdfs-site.xml und andere Konfigurationsdateien geändert werden müssen. Die folgende SQL Server-Fehlermeldung wird beobachtet:

Meldung 105019, Ebene 16, Status 1, Zeile 1
Microsoft. SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: EXTERNAL TABLE Der Zugriff ist aufgrund eines internen Fehlers fehlgeschlagen: 'Java Ausnahme, die beim Aufruf von HdfsBridge_Connect ausgelöst wurde. Java-Ausnahmemeldung: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.: Fehler [com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.] beim Zugriff auf die externe Datei aufgetreten.' --->

Mögliche Ursache:
Dies kann passieren, wenn Sie Text von einer Website oder aus einem Chatfenster kopiert und in Konfigurationsdateien eingefügt haben. Es ist möglich, dass sich in den Konfigurationsdateien unerwünschte/ nicht druckbare Zeichen befinden.

Mögliche Lösung:
Öffnen Sie die Dateien mit einem anderen Texteditor als Notepad, suchen Sie nach diesen Zeichen, und entfernen Sie diese. Starten Sie die erforderlichen Dienste neu.

Die Abfrage einer Delta-Tabelle kann mit den Fehlern 2571 und 16513 fehlschlagen.

Szenario:
Beim Abfragen einer externen Delta-Tabelle tritt möglicherweise der folgende Fehler auf:

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.

Mögliche Ursache:
Dies kann passieren, weil es einen Abfragehinweis QUERYTRACEON gibt, der der Metadatenabfrage für die Delta-Datei hinzugefügt werden kann und für dessen Ausführung die Serverrolle sysadmin erforderlich ist.

Mögliche Lösung:
Wenn dies auftritt, können Sie das Problem beheben, indem Sie die Traceflag 14073 global aktivieren. Dadurch wird verhindert, dass der Abfragehinweis hinzugefügt wird.

Siehe auch