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 2016 (13.x) a novější verze
Tento článek popisuje architekturu rozšiřitelnosti pro spuštění externího skriptu Pythonu nebo R ve službě SQL Server Machine Learning Services. Skript se spustí v prostředí language runtime jako rozšíření základního databázového stroje.
Background
Architektura rozšiřitelnosti byla zavedena v SQL Serveru 2016 pro podporu modulu runtime R se službami R. SQL Server 2017 a novější podporuje Python se službou Machine Learning Services.
Účelem architektury rozšiřitelnosti je poskytnout rozhraní mezi SQL Serverem a jazyky datových věd, jako je R a Python. Cílem je snížit tření při přesouvání řešení datových věd do produkčního prostředí a chránit data vystavená během procesu vývoje. Spuštěním důvěryhodného skriptovacího jazyka v zabezpečeném rozhraní spravovaném SQL Serverem můžou správci databáze udržovat zabezpečení a zároveň umožnit datovým vědcům přístup k podnikovým datům.
Následující diagram vizuálně popisuje příležitosti a výhody rozšiřitelné architektury.
Externí skript lze spustit voláním uložené procedury a výsledky se vrátí jako tabulkové výsledky přímo na SQL Server. To usnadňuje generování nebo využívání strojového učení z libovolné aplikace, která může odesílat dotazy SQL a zpracovávat výsledky.
Spuštění externího skriptu podléhá zabezpečení dat SQL Serveru. Uživatel, který spouští externí skript, má přístup pouze k datům, která jsou v dotazu SQL stejně dostupná. Pokud dotaz selže kvůli nedostatečným oprávněním, skript spuštěný stejným uživatelem by také selhal z stejného důvodu. Zabezpečení SQL Serveru se vynucuje na úrovni tabulky, databáze a instance. Správci databází můžou spravovat přístup uživatelů, prostředky používané externími skripty a externími knihovnami kódu přidanými na server.
Možnosti škálování a optimalizace mají duální základ: zisky prostřednictvím databázové platformy (indexy ColumnStore, zásady správného řízení prostředků); a zisky specifické pro rozšíření, například když se knihovny Microsoftu pro R a Python používají pro modely datových věd. Zatímco R je jednovláknový, funkce RevoScaleR jsou vícevláknové, které dokážou distribuovat úlohy do více jader.
Nasazení používá metodologie SQL Serveru. Můžou se jednat o uložené procedury, které zahrnují externí skript, vložené dotazy SQL nebo dotazy T-SQL volající funkce jako PREDICT, aby vrátily výsledky z modelů prognóz, které jsou uloženy na serveru.
Vývojáři se zavedenými dovednostmi v konkrétních nástrojích a prostředích IDE můžou v těchto nástrojích psát kód a pak kód přenést na SQL Server.
Diagram architektury
Architektura je navržená tak, aby externí skripty běžely v samostatném procesu od SQL Serveru, ale s komponentami, které interně spravují řetěz požadavků na data a operace na SQL Serveru. V závislosti na verzi SQL Serveru zahrnují podporovaná jazyková rozšíření jazyka R, Python a jazyky třetích stran, jako je Java a .NET.
Architektura komponent ve Windows:
Architektura komponent v Linuxu:
Komponenty zahrnují službu launchpad používanou k vyvolání externích modulů runtime a logiky specifické pro knihovnu pro načítání interpretů a knihoven. Spouštěč načte modul runtime jazyka a všechny proprietární moduly. Pokud váš kód například obsahuje funkce RevoScaleR, načte se interpret RevoScaleR. BxlServer a SQL Satellite spravují komunikaci a přenos dat pomocí SQL Serveru.
SQL v Linuxu používá službu launchpadd ke komunikaci se samostatným procesem launchpadu pro každého uživatele.
Hlavní panel
Launchpad SQL Serveru je služba, která spravuje a spouští externí skripty podobně jako fulltextové indexování a dotazovací služba spouští samostatného hostitele pro zpracování fulltextových dotazů. Služba launchpad může spouštět jenom důvěryhodné spouštěče, které publikuje Microsoft nebo které byly certifikovány microsoftem jako splnění požadavků na výkon a správu prostředků.
| Důvěryhodné spouštěče | Extension | Verze SQL Serveru |
|---|---|---|
| RLauncher.dll pro jazyk R pro Windows | Rozšíření R | SQL Server 2016 a novější |
| Pythonlauncher.dll pro jazyk Python pro Windows | Rozšíření Pythonu | SQL Server 2017 a novější |
| RLauncher.so pro jazyk R pro Linux | Rozšíření R | SQL Server 2019 a novější |
| Pythonlauncher.so pro jazyk Python pro Linux | Rozšíření Pythonu | SQL Server 2019 a novější |
Služba Launchpad SQL Serveru běží pod vlastním uživatelským účtem. Pokud změníte účet, na kterém běží launchpad, nezapomeňte to provést pomocí nástroje SQL Server Configuration Manager, aby se zajistilo, že se změny zapisují do souvisejících souborů.
Ve Windows se pro každou instanci databázového stroje, do které jste přidali služby SQL Server Machine Learning Services, vytvoří samostatná služba SQL Server Launchpad. Pro každou instanci databázového stroje existuje jedna služba launchpad, takže pokud máte více instancí s podporou externích skriptů, budete mít pro každou z nich službu launchpad. Instance databázového stroje je vázána na službu launchpad vytvořenou pro ni. Všechna vyvolání externího skriptu v uložené proceduře nebo T-SQL způsobí, že služba SQL Serveru volá službu launchpad vytvořenou pro stejnou instanci.
Pokud chcete provádět úlohy v konkrétním podporovaném jazyce, spouštěč získá zabezpečený pracovní účet z fondu a spustí satelitní proces pro správu externího prostředí runtime. Každý satelitní proces dědí uživatelský účet launchpadu a po dobu trvání provádění skriptu používá tento pracovní účet. Pokud skript používá paralelní procesy, vytvoří se ve stejném pracovním účtu.
V Linuxu je podporována pouze jedna instance databázového stroje a existuje jedna spouštěcí služba svázaná s instancí. Při spuštění skriptu spustí služba launchpad samostatný proces launchpadu s uživatelským účtem s nízkou úrovní oprávnění mssql_satellite. Každý satelitní proces dědí uživatelský účet mssql_satellite launchpadu a používá ho po dobu trvání provádění skriptu.
BxlServer a satelitní SQL
BxlServer je spustitelný soubor poskytovaný microsoftem, který spravuje komunikaci mezi SQL Serverem a jazykem runtime. Vytvoří objekty úloh pro Windows nebo názvové prostory pro Linux, které se používají k obsahování relací externích skriptů. Zřizuje také zabezpečené pracovní složky pro každou úlohu externího skriptu a používá funkci SQL Satellite ke správě přenosu dat mezi externím modulem runtime a SQL Serverem. Pokud spustíte Průzkumníka procesů , když je úloha spuštěná, může se zobrazit jedna nebo více instancí BxlServer.
BxlServer je tedy doprovodným prostředím jazyka runtime, které pracuje s SQL Serverem pro přenos dat a správu úloh. BXL je zkratka pro binární exchange jazyk a odkazuje na formát dat používaný k efektivnímu přesouvání dat mezi SQL Serverem a externími procesy.
SQL Satellite je rozhraní API rozšiřitelnosti, které je součástí databázového stroje, které podporuje externí kód nebo externí moduly runtime implementované pomocí jazyka C nebo C++.
BxlServer používá pro tyto úlohy funkci SQL Satellite:
- Čtení vstupních dat
- Zápis výstupních dat
- Získání vstupních argumentů
- Zápis výstupních argumentů
- Zpracování chyb
- Zápis STDOUT a STDERR zpět do klienta
SQL Satellite používá vlastní formát dat, který je optimalizovaný pro rychlý přenos dat mezi SQL Serverem a externími skriptovacími jazyky. Provádí převody typů a definuje schémata vstupních a výstupních datových sad během komunikace mezi SQL Serverem a modulem runtime externího skriptu.
Satelitní SQL je možné monitorovat pomocí rozšířených událostí Windows (XEvents). Další informace najdete v tématu Rozšířené události pro službu SQL Server Machine Learning Services.
Komunikační kanály mezi komponentami
Komunikační protokoly mezi komponentami a datovými platformami jsou popsány v této části.
TCP/IP
Ve výchozím nastavení interní komunikace mezi SQL Serverem a satelitem SQL používají protokol TCP/IP.
Pojmenované kanály
Interní přenos dat mezi BxlServerem a SQL Serverem prostřednictvím funkce SQL Satellite používá proprietární komprimovaný formát dat k vylepšení výkonu. Výměna dat probíhá mezi běhovými prostředími jazyka a BxlServerem ve formátu BXL pomocí pojmenovaných kanálů.
ODBC
Komunikace mezi externími klienty datových věd a vzdálenou instancí SQL Serveru používá rozhraní ODBC. Účet, který odesílá úlohy skriptu sql Serveru, musí mít obě oprávnění pro připojení k instanci a ke spuštění externích skriptů.
V závislosti na úkolu může účet navíc potřebovat tato oprávnění:
- Čtení dat používaných úlohou
- Zápis dat do tabulek: například při ukládání výsledků do tabulky
- Vytvořte databázové objekty: například při ukládání externího skriptu jako součásti nové uložené procedury.
Pokud se SQL Server používá jako výpočetní kontext pro skript spuštěný ze vzdáleného klienta a spustitelný soubor musí načíst data z externího zdroje, odbc se používá pro zpětný zápis. SQL Server mapuje identitu uživatele vydávajícího vzdálený příkaz na identitu uživatele v aktuální instanci a spustí příkaz ODBC pomocí přihlašovacích údajů daného uživatele. Připojovací řetězec potřebný k provedení tohoto volání ODBC se získá z klientského kódu.
RODBC (pouze R)
Další volání ODBC lze ve skriptu provést pomocí RODBC. RODBC je oblíbený balíček R používaný pro přístup k datům v relačních databázích; Jeho výkon je však obecně pomalejší než srovnatelné poskytovatele používané SQL Serverem. Mnoho skriptů jazyka R používá vložená volání rodBC jako způsob načítání "sekundárních" datových sad pro účely analýzy. Například uložená procedura, která trénuje model, může definovat dotaz SQL pro získání dat pro trénování modelu, ale pomocí vloženého volání RODBC získat další faktory, provést vyhledávání nebo získat nová data z externích zdrojů, jako jsou textové soubory nebo Excel.
Následující kód znázorňuje volání RODBC vložené do skriptu jazyka R:
library(RODBC); connStr <- paste("Driver=SQL Server;Server=", instance_name, ";Database=", database_name, ";Trusted_Connection=true;", sep=""); dbhandle <- odbcDriverConnect(connStr) OutputDataSet <- sqlQuery(dbhandle, "select * from table_name");Další protokoly
Procesy, které můžou potřebovat pracovat v blocích dat nebo přenášet data zpět do vzdáleného klienta, můžou také použít formát souboru XDF. Skutečný přenos dat je prostřednictvím zakódovaných objektů blob.