Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók
Ez a cikk egy külső Python- vagy R-szkript SQL Server Machine Learning Servicesen való futtatásához szükséges bővíthetőségi keretrendszer architektúráját ismerteti. A szkript egy nyelvi futtatókörnyezetben fut az alapvető adatbázismotor kiterjesztéseként.
Háttér
Az bővíthetőségi keretrendszert az SQL Server 2016-ban vezettük be az R-futtatókörnyezet R-szolgáltatásokkal való támogatásához. Az SQL Server 2017 és újabb verziók támogatják a Pythont a Machine Learning Services használatával.
A bővíthetőségi keretrendszer célja, hogy interfészt biztosítson az SQL Server és az olyan adatelemzési nyelvek között, mint az R és a Python. A cél az adattudományi megoldások éles környezetbe való bevezetésekor a súrlódás csökkentése, valamint a fejlesztési folyamat során közzétett adatok védelme. Ha megbízható szkriptnyelvet futtat egy SQL Server által felügyelt biztonságos keretrendszerben, az adatbázis-rendszergazdák fenntarthatják a biztonságot, miközben lehetővé teszik az adatszakértők számára a vállalati adatokhoz való hozzáférést.
Az alábbi ábra vizuálisan ismerteti a bővíthető architektúra lehetőségeit és előnyeit.
integrációs céljai
Egy külső szkript futtatható egy tárolt eljárás meghívásával, és az eredményeket táblázatos eredményként adja vissza közvetlenül az SQL Servernek. Ez megkönnyíti a gépi tanulást bármely olyan alkalmazásból, amely képes SQL-lekérdezést küldeni és kezelni az eredményeket.
A külső szkriptek végrehajtására az SQL Server adatbiztonsága vonatkozik. A külső szkriptet futtató felhasználók csak olyan adatokat érhetnek el, amelyek egyformán elérhetők egy SQL-lekérdezésben. Ha egy lekérdezés nem megfelelő engedély miatt hiúsul meg, az ugyanazon felhasználó által futtatott szkript is ugyanannak az okból hiúsul meg. Az SQL Server biztonsága a tábla, az adatbázis és a példány szintjén van kényszerítve. Az adatbázis-rendszergazdák kezelhetik a felhasználói hozzáférést, a külső szkriptek által használt erőforrásokat és a kiszolgálóhoz hozzáadott külső kódtárakat.
A skálázási és optimalizálási lehetőségek kettős alapot tartalmaznak: az adatbázisplatformon keresztüli nyereség (ColumnStore-indexek, erőforrás-szabályozás); és bővítményspecifikus előnyök, például amikor az R- és Python-kódtárakat adatelemzési modellekhez használják. Míg az R egyszálas, a RevoScaleR-függvények többszálasak, és több magon keresztül képesek elosztani a számítási feladatokat.
Az üzembe helyezés SQL Server-módszereket használ. Tartalmazhatnak olyan tárolt eljárásokat, amelyek külső szkriptet, beágyazott SQL-t vagy T-SQL-lekérdezést burkolnak, és olyan funkciókat, mint például a PREDICT, hívnak meg, hogy visszatérési eredményeket adjanak az előrejelzési modellekből, amelyek a kiszolgálón vannak tárolva.
A specifikus eszközökben és fejlesztőkörnyezetekben már jártas fejlesztők kódot írhatnak ezekben, majd átvihetik a kódot az SQL szerverre.
Architektúra-ábra
Az architektúra úgy lett kialakítva, hogy a külső szkriptek az SQL Servertől eltérő folyamaton fussanak, de olyan összetevőkkel, amelyek belsőleg kezelik az SQL Serveren futó adat- és műveletkérések láncát. Az SQL Server verziójától függően a támogatott nyelvi bővítmények közé tartoznak az R, a Python és a külső nyelvek, például a Java és a .NET.
Összetevőarchitektúra a Windowsban:
Komponensarchitektúra Linuxban:
Az összetevők közé tartozik a külső futtatókörnyezetek meghívására szolgáló launchpad-szolgáltatás , valamint az értelmezők és kódtárak betöltésére szolgáló kódtárspecifikus logika. A indító betölt egy nyelvi futtatókörnyezetet, valamint minden védett modult. Ha például a kód RevoScaleR-függvényeket tartalmaz, a rendszer betölt egy RevoScaleR-értelmezőt. A BxlServer és az SQL Satellite kezeli a kommunikációt és az adatátvitelt az SQL Serverrel.
Linuxon az SQL egy launchpadd szolgáltatással kommunikál minden felhasználó számára egy külön launchpad-folyamattal.
Dob
Az SQL Server Launchpad egy olyan szolgáltatás, amely külső szkripteket kezel és hajt végre, hasonlóan ahhoz, ahogyan a teljes szöveges indexelési és lekérdezési szolgáltatás külön gazdagépet indít el a teljes szöveges lekérdezések feldolgozásához. A launchpad szolgáltatás csak a Microsoft által publikált, vagy a teljesítmény- és erőforrás-kezelési követelményeknek megfelelőnek minősített megbízható indítóprogramokat indíthatja el.
| Megbízható indítók | Extension | SQL Server-verziók |
|---|---|---|
| RLauncher.dll a Windows R nyelvéhez | R-bővítmény | SQL Server 2016 és újabb verziók |
| Pythonlauncher.dll a Windows Python-nyelvéhez | Python-bővítmény | SQL Server 2017 és újabb verziók |
| RLauncher.so a Linux R nyelvéhez | R-bővítmény | SQL Server 2019 és újabb verziók |
| Pythonlauncher.so Python-nyelv Linuxhoz | Python-bővítmény | SQL Server 2019 és újabb verziók |
Az SQL Server Launchpad szolgáltatás a saját felhasználói fiókjában fut. Ha módosítja a launchpadet futtató fiókot, ezt az SQL Server Configuration Managerrel teheti meg, hogy a módosítások a kapcsolódó fájlokba legyenek írva.
Windows rendszerben külön SQL Server Launchpad-szolgáltatás jön létre minden olyan adatbázismotor-példányhoz, amelyhez hozzáadta az SQL Server Machine Learning Servicest. Minden egyes adatbázismotor-példányhoz egy launchpad szolgáltatás tartozik, így ha több külső szkripttámogatással rendelkező példánya van, mindegyikhez egy launchpad szolgáltatás tartozik. Egy adatbázismotor-példány a számára létrehozott launchpad szolgáltatáshoz van kötve. Egy tárolt eljárásban vagy T-SQL-ben a külső szkriptek összes meghívása azt eredményezi, hogy az SQL Server szolgáltatás meghívja az ugyanahhoz a példányhoz létrehozott launchpad szolgáltatást.
Ha egy adott támogatott nyelven szeretné végrehajtani a feladatokat, az indítási sáv lekéri a készletből a biztonságos feldolgozói fiókot, és elindít egy műholdas folyamatot a külső futtatókörnyezet kezeléséhez. Minden műholdas folyamat örökli a launchpad felhasználói fiókját, és ezt a feldolgozó fiókot használja a szkript végrehajtásának időtartamára. Ha a szkript párhuzamos folyamatokat használ, azokat ugyanazzal az egy feldolgozói fiókkal hozza létre.
Linuxon csak egy adatbázismotor-példány támogatott, és a példányhoz egy launchpadd szolgáltatás van kötve. Szkript végrehajtásakor a launchpadd szolgáltatás egy külön indítási folyamatot indít el az alacsony jogosultságú felhasználói fiókkal mssql_satellite. Minden műholdas folyamat örökli a launchpad mssql_satellite felhasználói fiókját, és ezt használja a szkript végrehajtásának időtartamára.
BxlServer és SQL Satellite
A BxlServer a Microsoft által biztosított végrehajtható fájl, amely kezeli az SQL Server és a nyelvi futtatókörnyezet közötti kommunikációt. Létrehozza a Windows-feladatobjektumokat a Windowshoz vagy a Linux névtereit, amelyek külső parancsfájl-munkameneteket tartalmaznak. Emellett biztonságos munkamappát is biztosít minden külső szkriptfeladathoz, és az SQL Satellite használatával kezeli a külső futtatókörnyezet és az SQL Server közötti adatátvitelt. Ha egy feladat futtatása közben futtatja a Folyamatkezelőt , előfordulhat, hogy a BxlServer egy vagy több példánya jelenik meg.
A BxlServer tulajdonképpen egy olyan nyelvi futtatókörnyezet társa, amely az SQL Serverrel együttműködve továbbítja az adatokat és kezeli a feladatokat. A BXL a bináris Exchange nyelvre utal, és az adatok sql server és külső folyamatok közötti hatékony áthelyezéséhez használt adatformátumra utal.
Az SQL Satellite egy bővíthetőségi API az adatbázismotorban, amely támogatja a C vagy C++ használatával implementált külső kódokat vagy külső futtatókörnyezeteket.
A BxlServer az SQL Satellitet használja a következő feladatokhoz:
- Bemeneti adatok olvasása
- Kimeneti adatok írása
- Bemeneti argumentumok lekérése
- Kimeneti argumentumok írása
- Hibakezelés
- STDOUT és STDERR visszaírása az ügyfélhez
Az SQL Satellite egyéni adatformátumot használ, amely az SQL Server és a külső szkriptnyelvek közötti gyors adatátvitelre van optimalizálva. Típuskonverziókat hajt végre, és meghatározza a bemeneti és kimeneti adatkészletek sémáit az SQL Server és a külső szkript futtatókörnyezete közötti kommunikáció során.
Az SQL Satellite a Kiterjesztett Windows-események (XEvents) használatával figyelhető. További információ: Bővített események az SQL Server Machine Learning Serviceshez.
Kommunikációs csatornák az összetevők között
Az összetevők és adatplatformok közötti kommunikációs protokollokat ebben a szakaszban ismertetjük.
TCP/IP
Alapértelmezés szerint az SQL Server és az SQL Satellite közötti belső kommunikáció TCP/IP protokollt használ.
Névvel rendelkező csövek
A BxlServer és az SQL Server közötti belső adatátvitel az SQL Satellite használatával védett, tömörített adatformátumot használ a teljesítmény növelése érdekében. Az adatok a nyelvi futtatási idők és a BxlServer között BXL formátumban, nevesített csövek használatával cserélődnek.
ODBC
A külső adatelemzési ügyfelek és egy távoli SQL Server-példány közötti kommunikáció ODBC-t használ. A szkriptfeladatokat az SQL Servernek küldő fióknak mindkét engedéllyel kell rendelkeznie a példányhoz való csatlakozáshoz és a külső szkriptek futtatásához.
Emellett a tevékenységtől függően a fióknak szüksége lehet az alábbi engedélyekre:
- A feladat által használt adatok olvasása
- Adatok írása táblákba: például az eredmények táblázatba való mentésekor
- Adatbázis-objektumok létrehozása: például ha egy új tárolt eljárás részeként menti a külső szkriptet.
Ha az SQL Servert használják a távoli ügyfélről végrehajtott szkript számítási környezeteként, és a végrehajthatónak külső forrásból kell adatokat lekérnie, az ODBC-t használja a visszaíráshoz. Az SQL Server leképezi a távoli parancsot kibocsátó felhasználó identitását az aktuális példány felhasználójának identitására, és az ODBC-parancsot a felhasználó hitelesítő adataival futtatja. Az ODBC-hívás végrehajtásához szükséges kapcsolati sztring az ügyfélkódból származik.
RODBC (csak R)
Az RODBC használatával további ODBC-hívásokat is kezdeményezhet a szkripten belül. Az RODBC egy népszerű R-csomag, amely a relációs adatbázisokban lévő adatok elérésére szolgál; teljesítménye azonban általában lassabb, mint az SQL Server által használt hasonló szolgáltatók. Sok R-szkript beágyazott hívásokat használ az RODBC-hez, így "másodlagos" adatkészleteket kér le elemzéshez. A modell betanítására szolgáló tárolt eljárás például meghatározhat egy SQL-lekérdezést a modell betanításához szükséges adatok lekéréséhez, de beágyazott RODBC-hívással további tényezőket kérhet le, kereséseket hajthat végre, vagy új adatokat kérhet le külső forrásokból, például szövegfájlokból vagy Excelből.
Az alábbi kód egy R-szkriptbe beágyazott RODBC-hívást mutat be:
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");Egyéb protokollok
Azok a folyamatok is használhatják az XDF-fájlformátumot, amelyeknek "adattömbökben" kell működniük, vagy adatokat kell visszavinni egy távoli ügyfélnek. A tényleges adatátvitel kódolt blobokon keresztül történik.