Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Tento článek obsahuje běžné chybové scénáře a řešení pro PolyBase.
Další informace o monitorování a řešení potíží s PolyBase najdete v tématu Monitorování a řešení potíží s PolyBase.
Běžná umístění souborů protokolu PolyBase ve Windows a Linuxu najdete v tématu Monitorování a řešení potíží s PolyBase.
Chybové zprávy a možná řešení
Aktualizace SQL Serveru 2022 selhala kvůli neplatnému názvu sloupce (rozlišují se malá a velká písmena)
K této chybě může dojít při instalaci kumulativních aktualizací SQL Serveru na serveru s nainstalovanou funkcí PolyBase a kolací s rozlišováním velkých a malých písmen, nahlášená zpráva o upgradu chyby je následující:
Příklad chybové zprávy: 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.
Důvod:
Během postupu upgradu se skript SQL Serveru nepodaří úspěšně dokončit kvůli hodnotám citlivým na malá a velká písmena.
Řešení: Tento problém bude trvale opraven v nadcházející kumulativní aktualizaci.
Alternativní řešení:
- Povolte příznak trasování 902.
- Spusťte SQL Server.
- Změňte kolaci databáze DWConfiguration z CS (rozlišují se malá a velká písmena) na CI (nerozlišují se malá a velká písmena).
- Znovu spusťte upgrade.
- Zakažte trasovací příznak 902.
- Restartujte SQL Server.
- Změňte kolaci databáze 'DWConfiguration' zpět z "CI" (bez rozlišování malých a velkých písmen) na "CS" (s rozlišováním malých a velkých písmen).
Jako alternativu k používaným trasovacím příznakům, abyste zabránili problému před kumulativní aktualizací, zkontrolujte, zda databáze DWConfiguration používá kolaci s rozlišováním velkých a malých písmen (CS). Zvažte změnu na řazení nerozlišující velká a malá písmena (CI), použijte kumulativní aktualizaci, a poté změňte zpět na tu původní hodnotu.
Chyba: "100001; Nepodařilo se vygenerovat plán dotazu.
K chybě "Nepodařilo se vygenerovat plán dotazů" může dojít v případě, že je databázový stroj SQL Serveru opravený na aspoň kumulativní aktualizaci 8 (15.0.4073), ale funkce PolyBase nebyla aktualizována na stejné sestavení. K tomu může dojít při přidání funkce PolyBase do existující instance SQL Serveru. Další informace naleznete v tématu Chyba PolyBase – 100001; Generování plánu dotazu se nezdařilo.
Vždy pokračujte instalací funkce PolyBase tak, že novou funkci přenesete na stejnou úroveň verze. Podle potřeby nainstalujte aktualizace Service Pack (SPS), kumulativní aktualizace (CU) a/nebo obecné verze distribuce (GDR). Informace o určení verze PolyBase najdete v tématu Určení verze, edice a úrovně aktualizace SYSTÉMU SQL Server a jeho součástí.
Změna účtu služby
Příklad chybové zprávy:
107035; Autorizace Dms selhala kvůli tomu, že [DOMAIN\user] není členem skupiny [PdwDataMovementAccess]
107017; Neplatné záhlaví ovládacího prvku DMS:
Příčinou této chyby je pravděpodobně změna účtu služby PolyBase. Pokud chcete změnit účty služeb pro polybase engine a polybase data Movement, odinstalujte a znovu nainstalujte funkci PolyBase.
Chyby oprávnění služby přesunu dat
Další informace o řešení potíží s oprávněními ve službě pro přesun dat najdete v tématu Oprávnění účtu služby PolyBase a běžné chyby zjištěné v případě, že chybí.
Selhání ověřování systému Windows
Další informace o řešení potíží s oprávněními souvisejících se selháním ověřování systému Windows najdete v tématu Oprávnění účtu služby PolyBase a běžné chyby zjištěné v případě, že chybí.
Dotaz Remote Query nejde spustit.
Příklad chybové zprávy:
Msg 7320, úroveň 16, stav 110, řádek 14
Nelze spustit dotaz "Vzdálený dotaz" proti zprostředkovateli OLE DB "SQLNCLI11" pro odkazovaný server "(null)". Dotaz byl přerušen – při čtení z externího zdroje bylo dosaženo maximální prahové hodnoty zamítnutí (0 řádků): 1 řádky odmítnuté z celkového počtu 1 řádků. (/národ/sensors.ldjson.txt) Řadový sloupec: 0, Očekávaný datový typ: INT, Chybová hodnota: {"id":"S2740036465E2B","time":"2016-02-26T16:59:02.9300000Z","temp":23.3,"hum":0.77,"wind":17,"press":1032,"loc":[-76.90914996169623,38.8929314364726]} (Chyba převodu sloupce), Chyba: Chyba při převodu datového typu NVARCHAR na INT.
Mějte na paměti, že může dojít k odvození této chyby. Název prvního odmítnutého souboru se zobrazí v aplikaci SQL Server Management Studio (SSMS) s chybnými datovými typy nebo hodnotami.
Možný důvod:
Důvodem této chyby je to, že každý soubor má jiné schéma. Externí tabulka PolyBase DDL, když odkazuje na adresář rekurzivně přečte všechny soubory v daném adresáři. Pokud dojde k neshodě sloupce nebo datového typu, může se tato chyba zobrazit v aplikaci SSMS.
Možné řešení:
Pokud se data pro každou tabulku skládají z jednoho souboru, použijte název souboru v oddílu LOCATION s předponou adresáře externích souborů.
Pokud je v tabulce více souborů, umístěte každou sadu souborů do různých adresářů ve službě Azure Blob Storage. Umístění nasměrujte na adresář místo konkrétního souboru. Toto řešení se doporučuje.
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…);
Poznámka:
SQL Server Native Client (SNAC) není dodáván s:
- SQL Server 2022 (16.x) a novější verze
- SQL Server Management Studio 19 a novější verze
Pro vývoj nových aplikací se nedoporučuje nativní klient SQL Serveru (SQLNCLI nebo SQLNCLI11) a starší zprostředkovatel Microsoft OLE DB pro SQL Server (SQLOLEDB).
Pro nové projekty použijte jeden z následujících ovladačů:
Informace o SQLNCLI, které se dodává jako součást databázového stroje SQL Serveru (verze 2012 až 2019), naleznete v tomto support lifecycle exception.
Podpora protokolu Kerberos
SQL Server je nakonfigurovaný pro přístup k podporovanému clusteru Hadoop. V clusteru Hadoop se nevynucuje zabezpečení protokolu Kerberos.
Výběr z externí tabulky vrátí následující chybu:
Msg 105019, úroveň 16, stav 1, řádek 55
Přístup k externí tabulce selhal kvůli vnitřní chybě: Výjimka Java vyvolaná při volání HdfsBridge_Connect: Při přístupu k externímu souboru došlo k chybě [Při přístupu k externímu souboru se nepodařilo vytvořit instanci třídy LoginClass].
Zpráva 7320, úroveň 16, stav 110, řádek 55
Nelze spustit dotaz "Vzdálený dotaz" proti zprostředkovateli OLE DB "SQLNCLI11" pro odkazovaný server "(null)". Přístup k externí tabulce selhal kvůli vnitřní chybě: Výjimka Java vyvolaná při volání HdfsBridge_Connect: Při přístupu k externímu souboru došlo k chybě [Při přístupu k externímu souboru se nepodařilo vytvořit instanci třídy LoginClass].
Dotazování protokolu serveru DWEngine ukazuje následující chybu:
[Vlákno:16432] [EngineInstrumentation:EngineQueryErrorEvent] (chyba, vysoká):
Přístup k externí tabulce selhal kvůli vnitřní chybě: Při volání HdfsBridge_Connect došlo k výjimce Java: Při přístupu k externímu souboru došlo k chybě [com.microsoft.polybase.client.KerberosSecureLogin]. Microsoft.SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: Přístup k externí tabulce selhal kvůli vnitřní chybě: Výjimka Java vyvolaná voláním HdfsBridge_Connect: Chyba [com.microsoft.polybase.client.KerberosSecureLogin] při přístupu k externímu souboru. >--- Microsoft.SqlServer.DataWarehouse.DataMovement.Common.ExternalAccess.HdfsAccessException: Výjimka Java vyvolaná při volání HdfsBridge_Connect: Při přístupu k externímu souboru došlo k chybě [com.microsoft.polybase.client.KerberosSecureLogin].
Možný důvod:
Protokol Kerberos není povolený v clusteru Hadoop, ale zabezpečení protokolu Kerberos je povolené v core-site.xml, yarn-site.xmlnebo hdfs-site.xml ve výchozím nastavení v části Program Files\Microsoft SQL Server\MSSQL13. MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf. V Linuxu jsou soubory ve výchozím nastavení umístěné v umístění /var/opt/mssql/binn/polybase/hadoop/conf/.
Možné řešení:
Zakomentujte informace o zabezpečení protokolu Kerberos z výše uvedených souborů.
Další informace o řešení potíží s PolyBase a Protokolem Kerberos najdete v tématu Řešení potíží s připojením k protokolu Kerberos PolyBase.
Vnitřní chyba procesoru dotazů
Dotazování na externí tabulku vrátí následující chybu:
Msg 8680, úroveň 17, stav 5, řádek 118
Vnitřní chyba procesoru dotazů: Procesor dotazů zjistil neočekávanou chybu během zpracování vzdálené fáze dotazu.
Protokol serveru DWEngine obsahuje následující zprávy:
[Vlákno:5216] [ControlNodeMessenger:ErrorEvent] (Chyba, Vysoká): ***** systém DMS má odpojené uzly:
[Vlákno:5216] [ControlNodeMessenger:ErrorEvent] (Chyba, Vysoká): ***** systém DMS má odpojené uzly:
[Vlákno:5216] [ControlNodeMessenger:ErrorEvent] (Chyba, Vysoká): ***** systém DMS má odpojené uzly:
Možný důvod:
Důvodem této chyby může být, že po konfiguraci PolyBase se SQL Server nerestartoval.
Možné řešení:
Restartujte SQL Server. Zkontrolujte protokol serveru DWEngine a ověřte, že po restartování nedochází k žádným odpojením od DMS.
Uživatel potřebný pro přístup k HDFS
Scénář:
SQL Server je připojený k nezabezpečeným clusteru Hadoop (protokol Kerberos není povolený). PolyBase je nakonfigurovaná tak, aby odsílala výpočty do clusteru Hadoop.
Ukázkový dotaz:
select count(*) from foo WITH (FORCE EXTERNALPUSHDOWN);
Vrátí se chybová zpráva podobná následující:
Msg 105019, level 16, state 1, line 1
Přístup k externí tabulce selhal kvůli vnitřní chybě: Výjimka Java vyvolaná při volání JobSubmitter_PollJobStatus: Chyba [java.net.ConnectException: Volání z big1506sql2016/172.16.1.4 na 0.0.0.0:10020 selhalo při výjimce připojení: java.net ConnectException: Připojení odmítnuto: žádné další informace nejsou k dispozici; Pro více informací viz: http://wiki.apache.org/hadoop/ConnectionRefused] došlo při přístupu k externímu souboru.
Zprostředkovatel OLE DB "SQLNCLI11" pro odkazovaný server (null) vrátil zprávu "Nespecifikovaná chyba".
Zpráva 7421, úroveň 16, stav 2, řádek 1
Sadu řádků nelze načíst ze zprostředkovatele OLE DB SQLNCLI11 pro odkazovaný server (null). .
Chyba protokolu Hadoop Yarn:
Instalace úlohy se nezdařila: org.apache.hadoop.security.AccessControlException: Oprávnění odepřeno: user=pdw_user, access=WRITE, inode="/user":hdfs:hdfs:drwxr-xr-x at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:265) v org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:251) v org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:232) org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:176) v org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5525)
Možný důvod:
Když je protokol Kerberos zakázaný, PolyBase použije pdw_user jako uživatel pro přístup k HDFS a odesílání úloh MapReduce.
Možné řešení:
Vytvořte pdw_user v Hadoopu a udělte mu dostatečná oprávnění k adresářům používaným během zpracování mapreduce. Také se ujistěte, že pdw_user je vlastníkem adresáře /user/pdw_user HDFS.
Níže je příklad vytvoření domovského adresáře a přiřazení oprávnění pro pdw_user:
sudo -u hdfs hadoop fs -mkdir /user/pdw_user
sudo -u hdfs hadoop fs -chown pdw_user /user/pdw_user
Po tomto nastavení se ujistěte, že pdw_user má oprávnění ke čtení, zápisu a spouštění v adresáři /user/pdw_user. Ujistěte se, že adresář /tmp má oprávnění 777.
Další informace o řešení potíží s PolyBase a Protokolem Kerberos najdete v tématu Řešení potíží s připojením k protokolu Kerberos PolyBase.
Chyba paměti Java kvůli UTF-8
Scénář:
SQL Server PolyBase je nastavený s clusterem Hadoop nebo službou Azure Blob Storage. Jakýkoli výběrový dotaz selže s následující chybou:
Msg 106000, Level 16, State 1, Line 1
Prostor haldy Java
Možný důvod:
Neplatný vstup může způsobit chybu paměťového přetečení v Javě. Soubor nemusí být ve formátu UTF-8. DMS se pokusí přečíst celý soubor jako jeden řádek, protože nemůže rozpoznat oddělovač řádků a dojde k chybě prostoru Java heapu.
Možné řešení:
Převeďte soubor na formát UTF-8, protože PolyBase v současné době vyžaduje formát UTF-8 pro textové soubory s oddělovači.
Konfigurace připojení Hadoop
Konfigurace SQL Serveru PolyBase pro připojení ke službě Azure Blob Storage vrátí následující chybovou zprávu v SQL Serveru:
Msg 105019, úroveň 16, stav 1, řádek 74
Přístup k externí tabulce selhal kvůli vnitřní chybě: Výjimka Java vyvolaná při volání HdfsBridge_Connect: Při přístupu k externímu souboru došlo k chybě [Bez systému souborů pro schéma: wasbs].
Možný důvod:
Připojení Hadoop není nastaveno na hodnotu konfigurace pro přístup ke službě Azure Blob Storage.
Možné řešení:
Nastavte připojení Hadoop na hodnotu (nejlépe 7), která podporuje Azure Blob Storage a restartujte SQL Server. Seznam hodnot připojení a podporovaných typů najdete v tématu Konfigurace připojení PolyBase.
Chyba při vytváření tabulky pomocí SELECT
Scénář:
Pokus o export dat do systému souborů Azure Blob Storage nebo Hadoop pomocí PolyBase se syntaxí CREATE EXTERNAL TABLE AS SELECT (CETAS) z SQL Serveru selže s následující chybovou zprávou:
Msg 156, úroveň 15, stav 1, řádek 177
Nesprávná syntaxe u klíčového slova 'WITH'.
319, úroveň 15, stav 1, řádek 177
Nesprávná syntaxe u klíčového slova 'with'. Pokud je tento příkaz běžným výrazem tabulky, klauzulí xmlnamespaces nebo klauzulí kontextu sledování změn, musí být předchozí příkaz ukončen středníkem.
Možný důvod:
Při exportu dat do Hadoopu nebo Azure Blob Storage prostřednictvím PolyBase se exportují pouze data, nikoli názvy sloupců (metadata) definované v příkazu CREATE EXTERNAL TABLE.
Možné řešení:
Nejprve vytvořte externí tabulku a pak pomocí příkazu INSERT INTO SELECT exportujte do externího umístění. Ukázku kódu najdete ve scénářích dotazů PolyBase.
Selhání vytvoření externí tabulky ze služby Azure Blob Storage
Scénář:
Vyhrazený fond SQL (dříve SQL DW) je nastavený pro import dat ze služby Azure Blob Storage. Vytvoření externí tabulky selže spolu s následující zprávou.
Zpráva 105019, úroveň 16, stav 1, řádek 34
Přístup k externí tabulce selhal kvůli vnitřní chybě: Výjimka Java vyvolaná voláním HdfsBridge_IsDirExist. Zpráva o výjimce Java:com.microsoft.azure.storage.StorageException: Server se nepodařilo ověřit požadavek. Ujistěte se, že je hodnota autorizační hlavičky správně sestavena, včetně podpisu.: Chyba [com.microsoft.azure.storage.StorageException: Serveru se nepodařilo ověřit požadavek. Ujistěte se, že je hodnota hlavičky Authorization správně vytvořená, včetně podpisu. Došlo k chybě při přístupu k externímu souboru.
Možný důvod:
K vytvoření přihlašovacích údajů s vymezeným oborem databáze se použil nesprávný klíč úložiště Azure.
Možné řešení:
Odstraňte všechny související objekty (tj. zdroj dat, formát souboru) a potom odstraňte a znovu vytvořte přihlašovací údaje s vymezeným oborem databáze se správným klíčem úložiště.
Kapitalizace konfigurace protokolu Kerberos
Scénář:
SQL Server je nastavený s clusterem Cloudera s povoleným protokolem Kerberos. SQL Server byl restartován po všech změnách konfigurace. Po restartování jsou spuštěné služby PolyBase Engine a PolyBase Data Movement. Vrátí se následující chybové zprávy:
Zdroj dat nakonfigurovaný bez umístění sledovače úloh:
org.apache.hadoop.fs.FileSystem: Provider org.apache.hadoop.fs.viewfs.ViewFileSystem nemohl být inicializován
Zdroj dat nakonfigurovaný s umístěním sledovače úloh:
Při přístupu k externímu souboru došlo k chybě [Nejde získat sféru Kerberos]
Možný důvod:
Hodnota vlastnosti "hadoop.security.authentication" v souboru Coresite.xml je nastavena na 'kerberos'.
Možné řešení:
Coresite.xml vlastnost "hadoop.security.authentication" by měla být KERBEROS (všechna velká písmena) jako hodnota.
Další informace o řešení potíží s PolyBase a Protokolem Kerberos najdete v tématu Řešení potíží s připojením k protokolu Kerberos PolyBase.
Mapred-site.xml chybí požadované hodnoty
Scénář:
SQL Server nebo APS je nastavený s podporovaným clusterem HDP. Dotazy, které nevyžadují pushdown, ale selhávají s následující zprávou při použití nápovědy 'FORCE PUSHDOWN' s následujícími chybovými hlášeními:
Zpráva 7320, úroveň 16, stav 110, řádek 35
Nelze spustit dotaz "Vzdálený dotaz" proti zprostředkovateli OLE DB "SQLNCLI11" pro odkazovaný server "(null)". Přístup k externí tabulce selhal kvůli vnitřní chybě: Výjimka Java vyvolaná při volání JobSubmitter_PollJobStatus: Chyba [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)
at javax.security.auth.Subject.doAs(Subject.java:415)
v org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2121)
] došlo při přístupu k externímu souboru.
Možný důvod:
Mapred-site.xml chybí některé potřebné hodnoty pro kontrolu průběžných a konečných výsledků.
Možné řešení:
Přidejte následující vlastnosti a přidružte správné hodnoty, jak je znázorněno v Ambari v souboru mapred-site.xml na SQL Serveru.
<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>
Konfigurace přístupu podle názvu hostitele
Scénář:
SQL Server je nastavený pro přístup k podporovanému clusteru Hadoop. Při vytváření externí tabulky se vrátí jedna z následujících chyb:
Nelze spustit dotaz "Vzdálený dotaz" proti zprostředkovateli OLE DB "SQLNCLI11" pro odkazovaný server "(null)". 110802; Došlo k vnitřní chybě DMS, která způsobila selhání této operace. Podrobnosti: Výjimka: Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.DmsSqlNativeException, Zpráva: SqlNativeBufferReader.Run, chyba v OdbcExecuteQuery: SqlState: 42000, NativeError: 8680, Chyba volání: SQLExecDirect(this->GetHstmt(), (SQLWCHAR *)statementText, SQL_NTS), návratový kód SQL: -1 | Informace o chybě SQL: SrvrMsgState: 26, SrvrSeverity: 17, Chyba <1>: ErrorMsg: [Microsoft][ODBC Driver 13 pro SQL Server][SQL Server]Vnitřní chyba procesoru dotazů: Procesor dotazů narazil na nečekanou chybu při zpracování fáze vzdáleného dotazu. | Chyba při volání: pReadConn-ExecuteQuery>(statementText, bufferFormat) | state: FFFF, číslo: 24, aktivní připojení: 8', připojovací řetězec: Driver={pdwodbc}; APP=RCSmall-DmsNativeReader:WAD1D16HD2001\mpdwsvc (3600)-ODBC-PoolId1433; Trusted_Connection=ano; Automatický přenos =ne; Server=\.\pipe\sql\query
[Vlákno:30544] [AbstractReaderWorker:ErrorEvent] (Chyba, Vysoká): QueryId QID2433 PlanId 6c3a4551-e54c-4c06-a5ed-a8733edac691 StepId 7:
Blok nelze získat: BP-1726738607-192.168.225.121-1443123675290:blk_1159687047_86196509 file=/user/hive/warehouse/u_data/000000_0
Microsoft.SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: Nelze získat blok: BP-1726738607-192.168.225.121-1443123675290:blk_1159687047_86196509 file=/user/hive/warehouse/u_data/00000_0
v Microsoft.SqlServer.DataWarehouse.DataMovement.Common.ExternalAccess.HdfsBridgeReadAccess.Read(MemoryBuffer buffer, Boolean&isDone)
v Microsoft.SqlServer.DataWarehouse.DataMovement.Worker.DataReader.ExternalMoveBufferReader.Read()
v Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.ExternalMoveReaderWorker.ReadAndSendData()
v Microsoft.SqlServer.DataWarehouse.DataMovement.Worker.ExternalMoveReaderWorker.Execute(Stav objektu)
Možný důvod:
Tato chybová zpráva se může zobrazit, když je cluster Hadoop nastavený v konfiguraci, kde jsou datové uzly přístupné pouze mimo cluster pomocí názvu hostitele a ne IP adresy.
Možné řešení:
Do hdfs-site.xml souboru na straně klienta (SQL Server) přidejte následující kód. Tato konfigurace přinutí název uzlu vrátit identifikátor URI pro datové uzly s názvem hostitele místo interní IP adresy.
<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
</property>
Organizace složek způsobuje nadbytečnou zátěž paměti.
Scénář:
SQL Server spouští dotaz PolyBase v adresáři s velkým počtem souborů (>30 000 souborů v cestě k adresáři rekurzivně) a vrátí se jedna z následujících chybových zpráv:
Msg 105019, level 16, state 1, line 1
Přístup k externí tabulce selhal kvůli vnitřní chybě: Výjimka Javy vyvolaná voláním HdfsBridge_GetFileNameByIndex. Zpráva o výjimce jazyka Java: Chyba [překročení limitu režie GC] nastala při přístupu k externímu souboru.
Msg 105019, level 16, state 1, line 1
Přístup k externí tabulce selhal kvůli vnitřní chybě: Výjimka Java vyvolaná při volání HdfsBridge_GetDirectoryFiles. Zpráva o výjimce Java: Při přístupu k externímu souboru došlo k chybě kvůli prostoru haldy Javy [Java heap space].
Možný důvod:
Při zpracování cesty PolyBase vyčíslí všechny soubory v této cestě a k datové struktuře, která se používá k reprezentaci souborů, je přidružena pevná režie paměti. Při velkém počtu souborů se tato režie stane patrnou a může postupně spotřebovat veškerou dostupnou paměť JVM.
Možné řešení:
Změňte uspořádání dat v několika adresářích tak, aby každý adresář obsahoval podmnožinu souborů, a potom rozdělte dotaz do několika adresářů, které pracují na části původní cesty najednou, a materializují tabulky jako tabulky SQL Serveru (před jejich spojením).
Příklad: Předpokládejme, že data externí tabulky jsou v následujícím umístění: Orders/file1.txt,...,file30K.txt.
Změňte rozložení tak, aby data byla rozložena v konvenční struktuře oddílů souborů v Objednavky/yyyy/mm/dd/file1.txt. Nasměrujte externí tabulku na cestu k dolnímu adresáři, například month(mm) nebo day(dd), a naimportujte soubory do tabulek SQL Serveru v částech a pak je přidejte jako součást jedné tabulky. I když jste měli správnou adresářovou strukturu, kterou byste měli začít, postupujte podle kroku 2, abyste mohli pracovat s mnoha soubory bez nedostatku paměti JVM.
Neočekávané znaky v konfiguračních souborech
Scénář:
Nastavení SQL Serveru nebo APS pomocí clusteru Hadoop, který zahrnuje úpravy yarn-site.xml, hdfs-site.xmla dalších konfiguračních souborů. Je zjištěna následující chybová zpráva SQL Serveru:
Msg 105019, level 16, state 1, line 1
Microsoft.SqlServer.DataWarehouse.Common.ErrorHandling.MppSqlException: Přístup k externí tabulce selhal kvůli vnitřní chybě: Výjimka Java vyvolaná při volání HdfsBridge_Connect. Zpráva o výjimce Java:com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Neplatný bajt 1 z 1-bajtové sekvence UTF-8.: Chyba [com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Neplatný bajt 1 z 1-bajtové sekvence UTF-8.] Došlo k chybě při přístupu k externímu souboru. --->
Možný důvod:
K tomu může dojít v případě, že jste zkopírovali a vložili text do konfiguračních souborů z webu nebo okna chatu. Je možné, že v konfiguračních souborech jsou nežádoucí nebo netisknutelné znaky.
Možné řešení:
Otevřete soubory v jiném textovém editoru (kromě poznámkového bloku) a vyhledejte tyto znaky a odstraňte je. Restartujte potřebné služby.
Dotaz tabulky Delta může selhat s chybami 2571 a 16513
Scénář:
Při dotazování na externí tabulku Delta může dojít k následující chybě:
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.
Možný důvod:
K tomu může dojít, protože existuje QUERYTRACEON nápověda dotazu, kterou lze přidat do dotazu metadat souborů Delta a která vyžaduje roli serveru sysadmin ke spuštění.
Možné řešení:
Pokud k tomu dojde, můžete problém vyřešit tím, že globálně zapnete příznak trasování 14073 a tím zabráníte přidání dotazového hintu.