Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
JDBC (Java Database Connectivity) on laajasti hyväksytty standardi, joka mahdollistaa asiakassovellusten yhteyden tietokantojen ja big data -alustojen datan kanssa työskentelyyn.
Microsoft JDBC Driver for Fabric Data Engineering antaa sinun yhdistää, kysyä ja hallita Spark-työkuormia Fabric-järjestelmässä JDBC-standardin luotettavuudella ja yksinkertaisuudella. Fabric:n Livy-rajapintojen pohjalta rakennettu ajuri tarjoaa turvallisen ja joustavan Spark SQL -yhteyden Java-sovelluksiin ja BI-työkaluihin. Tämä integraatio mahdollistaa Spark-koodin lähettämisen ja suorittamisen suoraan ilman, että tarvitsee luoda erillisiä muistikirja- tai Spark-työn määrittelykohteita. Ajuri on yhteensopiva suosittujen JDBC-asiakkaiden, kuten DbVisualizerin ja DBeaverin, sekä JDBC-yhteyksiä tukevien BI-työkalujen, kuten Tableau:n, kanssa.
Tärkeimmät ominaisuudet
- JDBC 4.2 -rajapinnat: Toteuttaa JDBC 4.2 -rajapinnat Spark SQL -yhteyksille, Spark- ja Livy-rajoituksin, kuten JDBC-transaktioiden puuttuminen ja vain välitys, vain luku -tulosjoukot
- Microsoft Entra ID -tunnistautuminen: Useita todennusprosesseja, mukaan lukien interaktiiviset, asiakastunnukset ja varmennepohjainen tunnistautuminen
- Korkean samanaikaisuuden istunnot: Opt-in Fabric -istuntojen jakaminen samanaikaisille työkuormille
-
Eksplisiittinen yhteyspoolaus: Valitse HikariCP, tavallinen poolinhallinta, tai
LivyBuiltInPooledDataSource; suorat sisäänkäyntipisteet eivät koskaan poolaa - Spark SQL -natiivikyselytuki: Spark SQL -lauseiden suora suoritus ilman käännöksiä
- Kattava tietotyyppituki: Tuki kaikille Spark SQL -tietotyypeille, mukaan lukien monimutkaiset tyypit (TAULUKKO, KARTTA, RAKENNE)
- Asynkronisen tulosjoukon esihaku: taustalla lataava datan lataus suorituskyvyn parantamiseksi
- Katkaisijan kuvio: Suojaus ketjureaktioilta automaattisella uudelleenkokeilulla
- Automaattinen uudelleenyhdistäminen: Läpinäkyvä istunnon palautus yhteyden epäonnistumisista
- Edistynyt uudelleenyrittämislogiikka: Kokeile uudelleen eksponentiaalisella peruutuksella ja istunnon palautuksella parantaen resilienssiä
- Välityspalvelintuki: HTTP- ja SOCKS-välityspalvelinkonfiguraatio yritysympäristöihin
Ennakkovaatimukset
Ennen kuin käytät Microsoft JDBC Driver for Fabric Data Engineeringiä, varmista, että sinulla on:
- Java Development Kit (JDK): Java 11, 17 ja 21 (Java 21 suositeltava)
- Fabric Access: Pääsy Fabric-työtilaan
- Microsoft Entra ID tunnistetiedot: Sopivat tunnistetiedot todennukseen
- Workspace- ja Lakehouse-tunnisteet: GUID-tunnisteet Fabric-työtilallesi ja järvenrakennukselle
Lataus ja asennus
Microsoft JDBC Driver for Fabric Data Engineering -versio 2.0.1 tukee Java 11, 17 ja 21. Käytä uusinta saatavilla olevaa versiota.
- Lataa Microsoft JDBC Driver for Fabric Data Engineering (zip)
- Lataa Microsoft JDBC Driver for Fabric Data Engineering (tar)
- Lataa joko zip- tai tar-tiedosto yllä olevista linkeistä.
- Purkaa ladattu tiedosto päästäksesi ajurien JAR-tiedostoihin.
- Valitse JAR-tiedosto, joka vastaa JRE-versiotasi:
- Java 11:lle:
ms-sparksql-jdbc-2.0.1.jre11.jar - Java 17:lle:
ms-sparksql-jdbc-2.0.1.jre17.jar - Java 21:lle:
ms-sparksql-jdbc-2.0.1.jre21.jar
- Java 11:lle:
- Lisää valittu JAR-tiedosto hakemuksesi luokkapolkuun.
- JDBC-asiakkaille määritä JDBC-ajuriluokka:
com.microsoft.spark.livy.jdbc.LivyDriver
Nopea aloitusesimerkki
Tässä esimerkissä osoitetaan, miten Fabric yhdistetään ja kysely suoritetaan käyttämällä Microsoft JDBC Driver for Fabric Data Engineeringiä. Ennen kuin suoritat tämän koodin, varmista, että olet suorittanut vaaditut vaatimukset ja asentanut ajurin. Käyttämällä AuthFlow=2, ajuri käyttää DefaultAzureCredential. Jos haluat käyttää Azure CLI:tä tunnistetietolähteenä, asenna Azure CLI ja aja az login.
import java.sql.*;
public class QuickStartExample {
public static void main(String[] args) {
// Connection string with required parameters
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=2;" + // DefaultAzureCredential; Azure CLI can be one source
"LogLevel=INFO";
try (Connection conn = DriverManager.getConnection(url)) {
// Execute a simple query
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 'Hello from Fabric!' as message")) {
if (rs.next()) {
System.out.println(rs.getString("message"));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Yhteysmerkkijonon muoto
Perusyhteysmerkkijono
Microsoft JDBC Driver for Fabric Data Engineering käyttää seuraavaa yhteysmerkkijono -muotoa:
jdbc:fabricspark://<hostname>[:<port>][;<parameter1>=<value1>;<parameter2>=<value2>;...]
Yhteysmerkkijonon komponentit
| Komponentti | Kuvaus | Esimerkki |
|---|---|---|
| Protokolla | JDBC-URL-protokollan tunniste | jdbc:fabricspark:// |
| Isäntänimi | Fabric-päätepisteen isäntänimi | api.fabric.microsoft.com |
| Satama | Valinnainen porttinumero (oletus: 443) | :443 |
| Parametrit | Puolipisteellä eroteltu avain=arvoparit | FabricWorkspaceID=<guid> |
Esimerkkiyhteysmerkkijonoja
Perusyhteys (interaktiivinen selainpohjainen todennus)
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=1
Kipinäresurssikonfiguraatiolla
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;DriverCores=4;DriverMemory=4g;ExecutorCores=4;ExecutorMemory=8g;NumExecutors=2;AuthFlow=2
Spark Session Propertiesin kanssa
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;spark.sql.adaptive.enabled=true;spark.sql.shuffle.partitions=200;AuthFlow=2
Korkean samanaikaisuuden tilalla
Korkean rinnakkaisuuden (HC) tila on saatavilla Microsoft Fabric -yhteyksille ajuriversiossa 1.1.0 ja uudemmissa versioissa. Lisää hcEnabled=true saadaksesi HC-istunnon perinteisen Livy-session sijaan:
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=2;hcEnabled=true
Voit halutessasi tunnistaa työkuorman istuntotunnisteella ja valita Fabric-ympäristön:
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=2;hcEnabled=true;sessionTag=orders_etl;FabricEnvironmentID=<environment-id>
HC-tila on vapaaehtoinen. Jos hcEnabled se jätetään pois tai asetetaan , falseajuri käyttää klassista Livyn istuntopolkua.
Katso High-Concurrency (HC) Mode -osio saadaksesi täydelliset konfigurointiohjeet.
Todennus
Microsoft JDBC Driver for Fabric Data Engineering tukee useita todennusmenetelmiä Microsoft Entra ID:n (entinen Azure Active Directory) kautta. Tunnistautuminen konfiguroidaan yhteysmerkkijonon AuthFlow parametrin avulla.
Tunnistautumisvirrat
| AuthFlow | Todentamismenetelmä | Käyttötapaus |
|---|---|---|
| 1 | Interaktiivinen selain | Interaktiivinen käyttäjän tunnistautuminen OAuth 2.0:n avulla |
| 2 | Oletus Azure credential chain | Kehitys ja hallittu sovellusten autentikointi; Azure CLI voi olla yksi tunnistetietojen lähde |
| 3 | Asiakkaan salaiset tunnukset (palvelupäähenkilö) | Automatisoitu/palvelu-todennus |
| 4 | Asiakasvarmenteen pätevyys | Varmennepohjainen palvelupäähenkilön tunnistautuminen |
| 5 | Pääsytunnus | Ennakkoon hankittu haltijan pääsytunnus |
Interaktiivinen selaimen tunnistautuminen
Paras: Kehitykseen ja interaktiivisiin sovelluksiin
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=1;" +
"LogLevel=INFO";
Connection conn = DriverManager.getConnection(url);
Parametrit:
-
AuthFlow=1: Määrittelee interaktiivisen selaimen tunnistautumisen
Käyttäytyminen:
- Avaa selaimen ikkunan käyttäjän tunnistautumista varten
- Tallentaa tunnistetiedot myöhemmistä yhteyksistä, kunnes ne vanhenevat
- Sopii yksinkäyttäjäsovelluksiin
Asiakastunnukset tai palvelupäähenkilön todennus
Paras: Automatisoidut palvelut ja taustatyöt
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=3;" +
"AuthClientID=<client-id>;" +
"AuthClientSecret=<client-secret>;" +
"AuthTenantID=<tenant-id>;" +
"LogLevel=INFO";
Connection conn = DriverManager.getConnection(url);
Vaaditut parametrit:
-
AuthFlow=3: Määrittelee asiakkaan tunnistetunnisteiden todennuksen -
AuthClientID: Application (client) ID Microsoft Entra ID:stä -
AuthClientSecret: Asiakassalaisuus Microsoft Entra ID:stä -
AuthTenantID: Microsoft Entra vuokralaisen tunnus
Parhaat käytännöt:
- Tallenna salaisuudet turvallisesti (Azure Key Vault, ympäristömuuttujat)
- Käytä hallittuja identiteettejä aina kun mahdollista
- Kierrätä salaisuuksia säännöllisesti
Certificate-Based Todennus
Paras: Yrityssovelluksiin, jotka vaativat varmennepohjaista todennusta
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=4;" +
"AuthClientID=<client-id>;" +
"AuthCertificatePath=/path/to/certificate.pem;" +
"AuthCertificatePassword=<certificate-password>;" +
"AuthTenantID=<tenant-id>;" +
"LogLevel=INFO";
Connection conn = DriverManager.getConnection(url);
Vaaditut parametrit:
-
AuthFlow=4: Määrittelee varmennepohjaisen tunnistautumisen -
AuthClientID: Sovelluksen (asiakas) tunnus -
AuthCertificatePath: Polku PEM-sertifikaattitiedostoon -
AuthCertificatePassword: Varmenteen salasana -
AuthTenantID: Microsoft Entra vuokralaisen tunnus
Pääsytunnusen tunnistautuminen
Parhaiten: Mukautetut todennusskenaariot
// Acquire token through custom mechanism
String accessToken = acquireTokenFromCustomSource();
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=5;" + // Access token authentication
"AuthAccessToken=" + accessToken + ";" +
"LogLevel=INFO";
Connection conn = DriverManager.getConnection(url);
Todennusvälimuisti
Kuljettaja tallentaa tunnistautumistokenit välimuistiin ja päivittää ne tokenin vanhentumisen perusteella. Jäsennetyt AuthEnableCaching ja AuthCacheTTLMS ominaisuudet eivät ohjaa tätä käyttäytymistä versiossa 2.0.0.
Määritysparametrit
Pakolliset parametrit
Nämä parametrit täytyy olla läsnä jokaisessa yhteysjonossa:
| Parametri | Kirjoita | Kuvaus | Esimerkki |
|---|---|---|---|
FabricWorkspaceID |
UUID | Fabric-työtilan tunnus | <workspace-id> |
FabricLakehouseID |
UUID | Fabric-järvimajan tunniste | <lakehouse-id> |
AuthFlow |
Integer | Todennusprosessityyppi (1-5) | 2 |
Valinnaiset parametrit
API-version konfiguraatio
| Parametri | Kirjoita | Oletus | Kuvaus |
|---|---|---|---|
FabricVersion |
Merkkijono | v1 |
Fabric API -versio |
LivyApiVersion |
Merkkijono | 2023-12-01 |
Livy API -versio |
Ympäristön määritys
| Parametri | Kirjoita | Oletus | Kuvaus |
|---|---|---|---|
FabricEnvironmentID |
UUID | Ei ole | Fabric-ympäristön tunniste ympäristöelementin viittaamiseen Spark-istunnossa |
Korkean samanaikaisuuden istuntoasetukset
Aseta hcEnabled=true käyttämään HC-tilaa. Jäljellä olevia HC-ominaisuuksia käytetään vain, kun HC-tila on käytössä.
| Parametri | Kirjoita | Oletus | Kuvaus |
|---|---|---|---|
hcEnabled |
totuusarvo | false |
Käyttää Fabric-korkean samanaikaisuuden sessiota. |
sessionTag |
Merkkijono | Ei ole | Valinnainen palvelinpuolen istuntotunniste. Käytä 1–64 kirjainta, numeroita, alaviivoja tai yhdysviivoja. |
hcAcquireTimeoutSeconds |
Integer | 300 |
Maksimiaika odottaa HC-istunnon valmistumista. Voimassa olevat arvot vaihtelevat 120:stä 3 600 sekuntiin. |
hcAcquirePollingIntervalMs |
Integer | 1000 |
Väli HC-istunnon tilatarkistusten välillä. Hyväksytyt arvot vaihtelevat 50–30 000 millisekunnin välillä ja ne rajoitetaan ajon aikana 100–5 000 millisekuntiin. |
Esimerkki:
hcEnabled=true;sessionTag=interactive_reporting;hcAcquireTimeoutSeconds=600;hcAcquirePollingIntervalMs=2000;FabricEnvironmentID=<environment-id>
-
FabricEnvironmentIDkoskee sekä HC- että klassisia sessioita -
EnvironmentIDhyväksytään myös ristikuljettajan alias-nimimerkkinä. Kiinteistöjen nimet ovat kirjainkoon liittymättömiä.
Important
Käytä sessionTag vain ei-herkkiä käyttömerkintöjä varten. Älä sisällytä salaisuuksia, pääsytunnukkeja, henkilötietoja, asiakastunnisteita tai kyselytekstiä.
Katso High-Concurrency (HC) Mode -osio saadaksesi täydelliset konfigurointiohjeet.
Kipinän konfiguraatio
Istuntoresurssien konfigurointi
Määritä Spark-istuntoresurssit optimaalisen suorituskyvyn saavuttamiseksi:
| Parametri | Kirjoita | Oletus | Kuvaus | Esimerkki |
|---|---|---|---|---|
DriverCores |
Integer | Sparkin oletus | Ajurin CPU-ytimien määrä | 4 |
DriverMemory |
Merkkijono | Sparkin oletus | Muistin varaus ajurille | 4g |
ExecutorCores |
Integer | Sparkin oletus | Suorittimen ytimien määrä per suorittaja | 4 |
ExecutorMemory |
Merkkijono | Sparkin oletus | Muistin varaus per toimeenpanija | 8g |
NumExecutors |
Integer | Sparkin oletus | Toimeenpanijoiden määrä | 2 |
SessionName |
Merkkijono | Automaattisesti luotu | Mukautettu istunnonnimi | MySparkSession |
Esimerkki:
DriverCores=4;DriverMemory=4g;ExecutorCores=4;ExecutorMemory=8g;NumExecutors=2; SessionName=MySparkSession
Mukautetut Spark-istunto-ominaisuudet
Mikä tahansa etuliitteen mukainen parametri spark. sovelletaan automaattisesti Spark-istuntoon:
Esimerkkejä kipinäkonfiguraatioista:
spark.sql.adaptive.enabled=true
spark.sql.adaptive.coalescePartitions.enabled=true
spark.sql.shuffle.partitions=200
spark.sql.autoBroadcastJoinThreshold=10485760
spark.dynamicAllocation.enabled=true
spark.dynamicAllocation.minExecutors=1
spark.dynamicAllocation.maxExecutors=10
spark.executor.memoryOverhead=1g
Natiivisuoritusmoottori (NEE):
spark.nee.enabled=true
Täydellinen esimerkki:
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<guid>;FabricLakehouseID=<guid>;DriverMemory=4g;ExecutorMemory=8g;NumExecutors=2;spark.sql.adaptive.enabled=true;spark.nee.enabled=true;AuthFlow=2
HTTP-asiakasyhteysasetukset
Määritä ajurin HTTP-siirtoyhteydet optimaalisen verkon suorituskyvyn saavuttamiseksi. Nämä asetukset eivät konfiguroi tai hallinnoi JDBC-yhteyspoolia:
| Parametri | Kirjoita | Oletus | Kuvaus |
|---|---|---|---|
HttpMaxTotalConnections |
Integer | 100 | Maksimimäärä kokonais-HTTP-yhteyksiä |
HttpMaxConnectionsPerRoute |
Integer | 20 | Maksimiyhteydet per reitti |
HttpConnectionTimeoutInSeconds |
Integer | 30 | Yhteyden aikakatkaisu |
HttpSocketTimeoutInSeconds |
Integer | 60 | Pistorasian lukemisen aikakatkaisu |
HttpReadTimeoutInSeconds |
Integer | 60 | HTTP-lukuaikakatkaisu |
HttpConnectionRequestTimeoutSeconds |
Integer | 10 | Yhteyspyynnön aikakatkaisu poolista |
HttpEnableKeepAlive |
totuusarvo | tosi | Ota HTTP keep-alive käyttöön |
HttpKeepAliveTimeoutSeconds |
Integer | 60 | Pidä elossa -aikalisä |
HttpFollowRedirects |
totuusarvo | tosi | Seuraa HTTP-uudelleenohjauksia |
HttpUseAsyncIO |
totuusarvo | tosi | Käytä asynkronista HTTP I/O:ta |
Esimerkki:
HttpMaxTotalConnections=200;HttpMaxConnectionsPerRoute=100;HttpConnectionTimeoutInSeconds=60
Välityspalvelimen konfiguraatio
Määritä HTTP- ja SOCKS-välityspalvelinasetukset yritysympäristöihin:
| Parametri | Kirjoita | Oletus | Kuvaus |
|---|---|---|---|
UseProxy |
totuusarvo | väärä | Ota välityspalvelin käyttöön |
ProxyTransport |
Merkkijono | http |
Välityspalvelimen siirtotyyppi (http/tcp) |
ProxyHost |
Merkkijono | Ei ole | Välityspalvelimen isäntänimi |
ProxyPort |
Integer | Ei ole | Proxy-portti |
ProxyAuthEnabled |
totuusarvo | väärä | Ota välityspalvelin autentikointi käyttöön |
ProxyUsername |
Merkkijono | Ei ole | Välityspalvelimen todennuskäyttäjätunnus |
ProxyPassword |
Merkkijono | Ei ole | Välityspalvelimen todennussalasana |
ProxyAuthScheme |
Merkkijono | basic |
Auth-järjestelmä (perus/digest/ntlm) |
ProxySocksVersion |
Integer | 5 | SOCKS-versio (4/5) |
HTTP-välityspalvelinesimerkki:
UseProxy=true;ProxyTransport=http;ProxyHost=proxy.company.com;ProxyPort=8080;ProxyAuthEnabled=true;ProxyUsername=user;ProxyPassword=pass
SOCKS-proxy-esimerkki:
UseProxy=true;ProxyTransport=tcp;ProxyHost=socks.company.com;ProxyPort=1080;ProxySocksVersion=5
Kirjaamisen kokoonpano
| Parametri | Kirjoita | Oletus | Kuvaus |
|---|---|---|---|
LogLevel |
Merkkijono | WARN |
Lokitaso: JÄLJITYS, VIRHEENKORJAUS, TIETO, VAROITUS, VIRHE |
Esimerkki:
LogLevel=DEBUG
Oletuslokin sijainti:
${user.home}/.microsoft/livy-jdbc-driver/logs/driver.log
Mukautettu lokin konfiguraatio: Käytä mukautettua log4j2.xml tiedostoa logback.xml luokkapolullasi.
Korkean samanaikaisuuden (HC) tila
Korkean rinnakkaisuuden (HC) tila on suunniteltu JDBC-sovelluksiin, jotka avaavat useita yhteyksiä samaan Fabric-työtilaan ja järvenrakennukseen. Sen sijaan, että jokaiselle yhteydelle olisi suunniteltu erillinen klassinen Spark-istunto, Fabric palvelee näitä yhteyksiä jaetulla, palvelimen hallinnoimalla Spark-kapasiteetilla.
HC-tila voi lyhentää yhteyden käynnistysaikaa, välttää toistuvan Spark-istunnon provisionoinnin ja käyttää käytettävissä olevaa kapasiteettia tehokkaammin samanaikaisissa työkuormissa. Jokainen JDBC-yhteys jatkaa lauseiden suorittamista sen määritetyn kontekstin kautta HC-istunnossa.
HC-tila on valinnainen ja täydentää JDBC-yhteyspoolausta. HC-tila hallinnoi Fabric Spark -istuntoja palvelimella, kun taas JDBC-yhteyspooli hallinnoi yhteyksiä asiakassovelluksessa. Jos et ota HC-tilaa käyttöön, ajuri luo klassisen Livy-session.
Valitse HC:n ja klassisen tilan välillä
Käytä HC-tilaa, kun:
- Sovelluspalvelu käsittelee samanaikaisia pyyntöjä, jotka ajavat Spark SQL:ää useiden JDBC-yhteyksien kautta.
- BI eli raportointityökalu avaa useita yhteyksiä samaan työtilaan ja järventaloon.
- Rinnakkaiset ETL-tehtävät tai aikataulutetut tehtävät luovat JDBC-yhteyksien purkauksia.
- Yhteydet käyttävät yhteensopivia Spark-asetuksia ja voivat jakaa palvelimen hallinnoiman Spark-kapasiteetin.
- Yhteyden käynnistysajan ja toistuvan Spark-istunnon provisionoinnin lyhentäminen on tärkeää.
Käytä klassista tilaa, kun:
- Sovelluksessasi käytetään vain yhtä tai muutamaa pitkäaikaista JDBC-yhteyttä.
- Jokainen yhteys vaatii omistetun Spark-istunnon tiukkaa työkuormaa tai resurssien eristämistä varten.
- Liitännät vaativat merkittävästi erilaisia Spark-konfiguraatioita tai Fabric-ympäristöjä.
- Fabric Livy -päätepiste kohdetyötilalle ja järvitalolle ei tue HC-tilaa.
Ota käyttöön korkean samanaikaisuuden tila
HC-tila on vapaaehtoinen. Jos jätät hcEnabled sen pois tai asetat vääräksi, ajuri käyttää klassista Livyn sessiopolkua. Aseta hcEnabled oikeaksi saadaksesi HC-istunnon:
hcEnabled=true;
Vaaditut parametrit HC-tilassa
HC-aktivointi vaatii seuraavat kelvolliset tunnisteet:
| Parametri | Muistiinpanot |
|---|---|
WorkspaceId |
Sen täytyy olla voimassa oleva Fabric-työtilan GUID. |
LakehouseId |
Sen täytyy olla voimassa oleva Fabric Lakehouse -käyttöliittymä. |
Sisällytä SessionTag , koska se vaikuttaa palvelinpuolen matchaukseen lämpimissä sessioissa.
Istuntojen yhdistäminen
HC-tila ei takaa, että jokainen yhteys käyttää olemassa olevaa istuntoa uudelleen. Jokaisesta istuntokeruuspyynnöstä kuljettaja lähettää:
- Arvo
SessionTag. - Tehokas Spark-konfiguraatio, mukaan lukien
conf.*asetukset jaEnvironmentId.
Fabric Livy -palvelu arvioi nämä arvot ja päättää, liitetäänkö yhteys lämpimään istuntoon vai luodako uusi istunto. Istunnon uudelleenkäytön parantamiseksi käytä yhtenäisiä arvoja yhteyksien välillä, joiden on tarkoitus jakaa palvelimen hallinnoima Spark-kapasiteetti.
Poista HC-tila käytöstä
Voit poistaa käytöstä uudet HC-istunnon hankinnat ilman, että ajuria otat uudelleen käyttöön, asettamalla HC-yhteysmerkkijono vääraksi tai poistamalla HC-parametrit:
hcEnabled=false;
Hätäpalautukset: Hätäpalautusta varten aloita JVM .-Dcom.microsoft.fabric.jdbc.hc.disable=true Tämä JVM-laajuinen kytkin pakottaa klassisen tilan, vaikka yhteysmerkkijono sisältäisi hcEnabled=true.
Ymmärrä HC:n ajonaikainen käyttäytyminen
- HC-istunnon hankinta estää siihen asti, kunnes istunto on valmis tai
hcAcquireTimeoutSecondsvanhenee. - Yhteyden sulkeminen hankinnan aikana keskeyttää hankinnan ja käynnistää parhaan yrityksen HC-istunnon siivouksen.
- Tunnistautuminen, kyselyn suoritus, peruutus, valmistellut lauseet, tulosten käsittely ja
FabricEnvironmentIDtyöskentely JDBC-standardien kautta molemmissa tiloissa.
Käyttöesimerkkejä
Perusyhteys
import java.sql.*;
public class BasicConnectionExample {
public static void main(String[] args) {
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=2";
try (Connection conn = DriverManager.getConnection(url)) {
System.out.println("Connected successfully!");
System.out.println("Database: " + conn.getMetaData().getDatabaseProductName());
System.out.println("Driver: " + conn.getMetaData().getDriverName());
System.out.println("Driver Version: " + conn.getMetaData().getDriverVersion());
} catch (SQLException e) {
System.err.println("Connection failed: " + e.getMessage());
e.printStackTrace();
}
}
}
Korkean samanaikaisuuden tilan yhteys
Seuraava esimerkki avaa JDBC-yhteyden HC-tilassa, suorittaa kyselyn ja vapauttaa yhteyden automaattisesti:
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=2;" +
"hcEnabled=true;" +
"sessionTag=dashboard_queries;" +
"FabricEnvironmentID=<environment-id>";
try (Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT current_timestamp()")) {
while (rs.next()) {
System.out.println(rs.getTimestamp(1));
}
}
Kyselyjen suorittaminen
Yksinkertainen kysely
public void executeSimpleQuery(Connection conn) throws SQLException {
String sql = "SELECT current_timestamp() as now";
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
if (rs.next()) {
Timestamp now = rs.getTimestamp("now");
System.out.println("Current timestamp: " + now);
}
}
}
Kysely suodattimella
public void executeQueryWithFilter(Connection conn) throws SQLException {
String sql = "SELECT * FROM sales WHERE amount > 1000 ORDER BY amount DESC";
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
int id = rs.getInt("id");
double amount = rs.getDouble("amount");
Date date = rs.getDate("sale_date");
System.out.printf("ID: %d, Amount: %.2f, Date: %s%n",
id, amount, date);
}
}
}
Kysely rajan kanssa
public void executeQueryWithLimit(Connection conn) throws SQLException {
String sql = "SELECT * FROM customers LIMIT 10";
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
// Print column names
for (int i = 1; i <= columnCount; i++) {
System.out.print(metaData.getColumnName(i) + "\t");
}
System.out.println();
// Print rows
while (rs.next()) {
for (int i = 1; i <= columnCount; i++) {
System.out.print(rs.getString(i) + "\t");
}
System.out.println();
}
}
}
Työskentely tulosjoukkojen kanssa
Travers-tulosjoukot
public void navigateResultSet(Connection conn) throws SQLException {
String sql = "SELECT id, name, amount FROM orders";
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
System.out.printf(
"Order %d: %s, %.2f%n",
rs.getInt("id"),
rs.getString("name"),
rs.getDouble("amount"));
}
}
}
Tulosjoukot ovat vain eteenpäin suuntautuvia ja vain lukua varten. Ajuri ei tue menetelmiä kuten first(), last(), ja absolute().
Suurten tulosjoukkojen käsittely
Kuljettaja sivuttaa tulokset vastekoon mukaan. Määritä LivyStatementPageSize JDBC-URL-osoitteessa asettamaan pyydetty sivukoko tavuina. Menetelmä Statement.setFetchSize() ei säätele hakua tai muistin käyttöä.
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=2;LivyStatementPageSize=1048576
public void processLargeResultSet(Connection conn) throws SQLException {
String sql = "SELECT * FROM large_table";
try (Statement stmt = conn.createStatement()) {
try (ResultSet rs = stmt.executeQuery(sql)) {
int rowCount = 0;
while (rs.next()) {
// Process row
processRow(rs);
rowCount++;
if (rowCount % 10000 == 0) {
System.out.println("Processed " + rowCount + " rows");
}
}
System.out.println("Total rows processed: " + rowCount);
}
}
}
private void processRow(ResultSet rs) throws SQLException {
// Process individual row
}
Valmisteltujen lausumien käyttö
public void usePreparedStatement(Connection conn) throws SQLException {
String sql = "SELECT * FROM products WHERE category = ? AND price > ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
// Set parameters
pstmt.setString(1, "Electronics");
pstmt.setDouble(2, 100.0);
try (ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
String name = rs.getString("name");
double price = rs.getDouble("price");
System.out.printf("Product: %s, Price: $%.2f%n", name, price);
}
}
}
}
Erätoiminta
Ajuri ei tue JDBC-tapahtumia. Eräsuoritus on ei-transaktionaalista ja voi osittain onnistua. Myöhempi epäonnistuminen ei peruuta aiempia onnistuneita lausuntoja.
public void executeBatchInsert(Connection conn) throws SQLException {
String sql = "INSERT INTO logs (timestamp, level, message) VALUES (?, ?, ?)";
int pendingStatements = 0;
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
// Add multiple statements to batch
for (int i = 0; i < 1000; i++) {
pstmt.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
pstmt.setString(2, "INFO");
pstmt.setString(3, "Log message " + i);
pstmt.addBatch();
pendingStatements++;
// Execute batch every 100 statements
if ((i + 1) % 100 == 0) {
pstmt.executeBatch();
pstmt.clearBatch();
pendingStatements = 0;
}
}
if (pendingStatements > 0) {
pstmt.executeBatch();
}
System.out.println("Batch insert completed successfully");
}
}
Valitse yhteyden omistaja
Valitse yksi komponentti, joka omistaa yhteyden elinkaaren. Älä laita yhtä liitäntäpoolia toisen sisälle.
| Käyttömalli | Aloituskohta | Altaan omistaja | Lainatun sulkeminen Connection |
Sulun omistaja |
|---|---|---|---|---|
| Suora |
DriverManager, LivyDriver tai LivyDataSource |
Ei ole | Sulkee fyysisesti itsenäisen Livy-yhteyden ja istunnon. | Sovellus sulkee kaikki yhteydet. Suoralla LivyDataSource ei ole erillistä läheistä elinkaarta. |
| Ulkoinen HikariCP |
HikariDataSource jota tukee JDBC-URL tai LivyDataSource |
Vain HikariCP | Palauttaa Hikari-proxy-yhteyden HikariCP:lle. | Sovellus sulkee säilytetyn HikariDataSource. |
| Eksplisiittinen sisäänrakennettu uima-allas | LivyBuiltInPooledDataSource |
Yksi laiskasti luotu LivyConnectionPool jokaiselle konfiguroidulle tietolähteen generoinnille |
Lopettaa loogisen vuokrasopimuksen ja käyttää fyysisen istunnon uudelleen vasta turvallisen siivouksen jälkeen. | Sovellus sulkee säilytetyn sisäänrakennetun tietolähteensä. |
| Standardi poolaus-SPI |
LivyConnectionPoolDataSource luo PooledConnection objekteja keskitasoiselle poolinhallinnalle |
Keskitason uima-altaan johtaja, ei tehdas | Sulkee loogisen kahvan ja ilmoittaa synkronisesti esimiehelle siivouksen jälkeen. | Johtaja soittaa PooledConnection.close() tuhotakseen jokaisen fyysisen yhteyden. |
ConnectionPoolEnabled oletuksena false sekä ajurikoodissa että toimitetuissa ominaisuuksissa. Se ei ole valinnainen kytkin nykyisille sisääntulopisteille. Käytä LivyBuiltInPooledDataSource silloin, kun ajuri omistaa poolin, tai konfiguroi ulkoinen pooli, kuten HikariCP. Muut sisäänkäyntipisteet luovat suoria, ei-pool-omistusyhteyksiä.
Yhteyden poolaus HikariCP:n kanssa
HikariCP voi luoda yhteyksiä joko LivyDataSource JDBC:n URL-osoitteesta kautta LivyDriver. Luo yksi HikariCP-instanssi, käytä sitä uudelleen sovelluksen elinkaaren ajan ja käytä vain yhtä yhteyspoolia kummassakin kokoonpanossa.
Maven-riippuvuus
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version>
</dependency>
LivyDataSource käyttäminen
LivyDataSource luo itsenäisiä fyysisiä yhteyksiä eikä omista yhteyspoolia tai erillistä läheistä elinkaarta. Toimita se suoraan HikariCP:lle, jotta HikariCP on ainoa poolin omistaja:
import com.microsoft.spark.livy.jdbc.LivyDataSource;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public final class ConnectionPoolExample implements AutoCloseable {
private final HikariDataSource hikariDataSource;
public ConnectionPoolExample(String url) {
LivyDataSource configuredDataSource = new LivyDataSource();
configuredDataSource.setUrl(url);
HikariConfig config = new HikariConfig();
config.setDataSource(configuredDataSource);
config.setMaximumPoolSize(2);
config.setMinimumIdle(0);
config.setConnectionTimeout(900000); // Wait up to 15 minutes for a connection
config.setInitializationFailTimeout(-1); // Connect on demand
config.setIdleTimeout(600000); // 10 minutes
config.setMaxLifetime(1800000); // 30 minutes
config.setPoolName("FabricSparkPool");
hikariDataSource = new HikariDataSource(config);
}
public Connection getConnection() throws SQLException {
return hikariDataSource.getConnection();
}
@Override
public void close() {
hikariDataSource.close();
}
public static void main(String[] args) throws SQLException {
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=AZURE_CLI;" +
"hcEnabled=true;" +
"sessionTag=pooled_app;" +
"hcAcquireTimeoutSeconds=600";
try (ConnectionPoolExample pool = new ConnectionPoolExample(url);
Connection conn = pool.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 'Pooled connection!' as message")) {
if (rs.next()) {
System.out.println(rs.getString("message"));
}
}
}
}
Esimerkki mahdollistaa HC-tilan JDBC-URL-osoitteessa. HikariCP hallinnoi asiakaspuolen yhteyksiä, kun taas HC-tila hallinnoi jaettuja Spark-istuntoja Fabric-ohjelmassa. Poista hcEnabled ja sessionTag jos sovellus vaatii klassisia istuntoja.
Käytä LivyDriver suoraan
Määritä JDBC:n URL-osoite ja ajuriluokka siten, että HikariCP luo fyysiset yhteydet .LivyDriver Kuljettajaluokan asettaminen eksplisiittisesti on valinnaista, kun JDBC-palveluntarjoajan automaattinen tunnistus on saatavilla. Tämä konfiguraatio ei LivyDataSourcekäynnistä , joten sen sisäänrakennettu pooli ei ole mukana:
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public final class DriverConnectionPoolExample {
public static HikariDataSource createPool(String url) {
HikariConfig config = new HikariConfig();
config.setDriverClassName("com.microsoft.spark.livy.jdbc.LivyDriver");
config.setJdbcUrl(url);
// Keep pool sizes small: each classic-mode physical connection owns a Livy session.
config.setMaximumPoolSize(2);
config.setMinimumIdle(0);
config.setConnectionTimeout(900000); // Wait up to 15 minutes to borrow a connection
config.setInitializationFailTimeout(-1); // Skip startup validation; connect on demand
config.setIdleTimeout(600000); // 10 minutes
config.setMaxLifetime(1800000); // 30 minutes
config.setPoolName("FabricSparkDriverPool");
return new HikariDataSource(config);
}
public static void main(String[] args) throws SQLException {
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=AZURE_CLI;" + // Uses the DefaultAzureCredential chain
"hcEnabled=true;" +
"sessionTag=pooled_app;" +
"hcAcquireTimeoutSeconds=600"; // Poll up to 10 minutes for HC readiness
// Reuse this pool for the application lifetime; main closes it at process exit.
try (HikariDataSource pool = createPool(url);
Connection conn = pool.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 'Pooled LivyDriver connection!' as message")) {
if (rs.next()) {
System.out.println(rs.getString("message"));
}
}
}
}
Käytä seuraavia ohjeita poolin konfiguroinnissa:
| Ympäristö tai käyttäytyminen | Opastus |
|---|---|
| Uima-altaan omistajuus |
LivyDataSource on vain suora. Kun toimitat sen HikariCP:lle, HikariCP omistaa poolin. Käytä LivyBuiltInPooledDataSource sen sijaan, kun kuljettajan pitäisi omistaa pooli. |
| Altaan koko | Aloita pienestä poolista ja kasvata sitä vasta mittaamalla työkuorman samanaikaisuuden ja kapasiteetin käytön. Klassisessa tilassa jokaisella fyysisellä yhteydellä on Livy-sessio. HC-tilassa yhteydet voivat jakaa palvelimen hallinnoiman Spark-kapasiteetin. |
connectionTimeout |
Se hallitsee, kuinka kauan soittaja odottaa yhteyden lainaamista, mutta ei peruuta jo käynnissä olevaa yhteydenpitoyritystä. HC-URL-osoitteille salli hcAcquireTimeoutSeconds; klassisessa tilassa LivySessionTimeoutSecondssalli , autentikointi, HTTP-kokeilut ja validointi. HikariCP ilmaisee tämän asetuksen millisekunneissa. |
initializationFailTimeout |
Negatiivinen arvo ohittaa käynnistysyhteyden ja validointiyrityksen. Yhteyshäiriöt ilmenevät, kun sovellus pyytää ensimmäistä kertaa yhteyttä. Käytä positiivista arvoa, jos sovelluksen täytyy varmistaa yhteys käynnistyksen aikana. |
| Yhteyden validointi | HikariCP käyttää Connection.isValid(). Sen tehokasta kestoa säätelee ajurin HTTP-aikakatkaisu ja uudelleenyritys/peruutusasetukset, ei HikariCP validationTimeout:n. Älä määritä yhteystestikyselyä, koska se korvaa kevyemmän validointitarkistuksen Spark-lauseella. |
Täydelliset HikariCP-konfiguraatiovaihtoehdot löytyvät katso:
Tietotyyppien kartoitus
Ajuri yhdistää Spark SQL -tietotyypit JDBC:n SQL-tyyppeihin ja Java-tyyppeihin:
| Spark SQL Type | JDBC SQL Type | Java-tyyppi | Muistiinpanot |
|---|---|---|---|
BOOLEAN |
BOOLEAN |
Boolean |
|
BYTE |
TINYINT |
Byte |
|
SHORT |
SMALLINT |
Short |
|
INT |
INTEGER |
Integer |
|
LONG |
BIGINT |
Long |
|
FLOAT |
FLOAT |
Float |
|
DOUBLE |
DOUBLE |
Double |
|
DECIMAL |
DECIMAL |
BigDecimal |
Tarkkuus ja mittakaava säilynyt |
STRING |
VARCHAR |
String |
|
VARCHAR(n) |
VARCHAR |
String |
|
CHAR(n) |
CHAR |
String |
|
BINARY |
BINARY |
byte[] |
|
DATE |
DATE |
java.sql.Date |
|
TIMESTAMP |
TIMESTAMP |
java.sql.Timestamp |
|
ARRAY |
ARRAY |
String |
Haettu JSON-tekstinä; metatietotyyppi ei takaa täydellistä java.sql.Array accessor-tukea |
MAP |
JAVA_OBJECT |
String |
Haettu JSON-tekstinä |
STRUCT |
STRUCT |
String |
Haettu JSON-tekstinä; metatietotyyppi ei takaa täydellistä java.sql.Struct accessor-tukea |