Dela via


Påskynda stordataanalys i realtid med spark-anslutningsappen

gäller för:Azure SQL DatabaseAzure SQL Managed Instance

Not

Från och med sep 2020 underhålls inte denna kontakt aktivt. Men Apache Spark Connector för SQL Server och Azure SQL är nu tillgängligt, med stöd för Python- och R-bindningar, ett enklare gränssnitt för massinfogning av data och många andra förbättringar. Vi rekommenderar att du starkt utvärderar och använder den nya anslutningen i stället för den här. Informationen om den gamla anslutningsappen (den här sidan) behålls endast i arkiveringssyfte.

Spark-anslutningsappen gör det möjligt för databaser i Azure SQL Database, Azure SQL Managed Instance och SQL Server att fungera som indatakälla eller utdatamottagare för Spark-jobb. Det gör att du kan använda transaktionsdata i realtid i stordataanalys och spara resultat för ad hoc-frågor eller rapportering. Jämfört med den inbyggda JDBC-anslutningsappen ger den här anslutningsappen möjlighet att massinfoga data i databasen. Den kan överträffa infogning rad för rad med 10 till 20 gånger snabbare prestanda. Spark-anslutningsappen stöder autentisering med Microsoft Entra-ID (tidigare Azure Active Directory) för att ansluta till Azure SQL Database och Azure SQL Managed Instance, så att du kan ansluta din databas från Azure Databricks med ditt Microsoft Entra-konto. Den tillhandahåller liknande gränssnitt som den inbyggda JDBC-anslutningen. Det är enkelt att migrera dina befintliga Spark-jobb för att använda den här nya anslutningsappen.

Note

Microsoft Entra ID tidigare kallades Azure Active Directory (Azure AD).

Ladda ned och bygg en Spark-kontakt

GitHub-lagringsplatsen för den gamla anslutningsappen som tidigare länkats till från den här sidan underhålls inte aktivt. I stället rekommenderar vi starkt att du utvärderar och använder nya kontakten.

Officiella versioner som stöds

Komponent Version
Apache Spark 2.0.2 eller senare
Scala 2.10 eller senare
Microsoft JDBC-drivrutin för SQL Server 6.2 eller senare
Microsoft SQL Server SQL Server 2008 eller senare
Azure SQL Database Stödd
Azure SQL Managed Instance Supporterad

Spark-anslutningsappen använder Microsoft JDBC-drivrutinen för SQL Server för att flytta data mellan Spark-arbetsnoder och databaser:

Dataflödet är följande:

  1. Spark-huvudnoden ansluter till databaser i SQL Database eller SQL Server och läser in data från en specifik tabell eller med hjälp av en specifik SQL-fråga.
  2. Spark-huvudnoden distribuerar data till arbetsnoder för transformering.
  3. Noden Worker ansluter till databaser som ansluter till SQL Database och SQL Server och skriver data till databasen. Användaren kan välja att använda rad-för-rad-infogning eller massinfogning.

Följande diagram illustrerar dataflödet.

Diagram visar det beskrivna flödet, med en huvudnod som ansluter direkt till databasen och ansluter till tre arbetsnoder som ansluter till databasen.

Skapa Spark-anslutningsappen

För närvarande använder anslutningsprojektet maven. Om du vill skapa anslutningsappen utan beroenden kan du köra:

  • mvn clean-paket
  • Ladda ned de senaste versionerna av JAR från versionsmappen
  • Inkludera SQL Database Spark JAR

Ansluta och läsa data med Spark-anslutningsappen

Du kan ansluta till databaser i SQL Database och SQL Server från ett Spark-jobb för att läsa eller skriva data. Du kan också köra en DML- eller DDL-fråga i databaser i SQL Database och SQL Server.

Läsa data från Azure SQL och SQL Server

import com.microsoft.azure.sqldb.spark.config.Config
import com.microsoft.azure.sqldb.spark.connect._

val config = Config(Map(
  "url"            -> "mysqlserver.database.windows.net",
  "databaseName"   -> "MyDatabase",
  "dbTable"        -> "dbo.Clients",
  "user"           -> "username",
  "password"       -> "*********",
  "connectTimeout" -> "5", //seconds
  "queryTimeout"   -> "5"  //seconds
))

val collection = sqlContext.read.sqlDB(config)
collection.show()

Läsa data från Azure SQL och SQL Server med angiven SQL-fråga

import com.microsoft.azure.sqldb.spark.config.Config
import com.microsoft.azure.sqldb.spark.connect._

val config = Config(Map(
  "url"          -> "mysqlserver.database.windows.net",
  "databaseName" -> "MyDatabase",
  "queryCustom"  -> "SELECT TOP 100 * FROM dbo.Clients WHERE PostalCode = 98074" //Sql query
  "user"         -> "username",
  "password"     -> "*********",
))

//Read all data in table dbo.Clients
val collection = sqlContext.read.sqlDB(config)
collection.show()

Skriva data till Azure SQL och SQL Server

import com.microsoft.azure.sqldb.spark.config.Config
import com.microsoft.azure.sqldb.spark.connect._

// Acquire a DataFrame collection (val collection)

val config = Config(Map(
  "url"          -> "mysqlserver.database.windows.net",
  "databaseName" -> "MyDatabase",
  "dbTable"      -> "dbo.Clients",
  "user"         -> "username",
  "password"     -> "*********"
))

import org.apache.spark.sql.SaveMode
collection.write.mode(SaveMode.Append).sqlDB(config)

Köra DML- eller DDL-fråga i Azure SQL och SQL Server

import com.microsoft.azure.sqldb.spark.config.Config
import com.microsoft.azure.sqldb.spark.query._
val query = """
              |UPDATE Customers
              |SET ContactName = 'Alfred Schmidt', City = 'Frankfurt'
              |WHERE CustomerID = 1;
            """.stripMargin

val config = Config(Map(
  "url"          -> "mysqlserver.database.windows.net",
  "databaseName" -> "MyDatabase",
  "user"         -> "username",
  "password"     -> "*********",
  "queryCustom"  -> query
))

sqlContext.sqlDBQuery(config)

Ansluta från Spark med Microsoft Entra-autentisering

Du kan ansluta till SQL Database och SQL Managed Instance med Hjälp av Microsoft Entra-autentisering. Använd Microsoft Entra-autentisering för att centralt hantera identiteter för databasanvändare och som ett alternativ till SQL-autentisering.

Ansluta med ActiveDirectoryPassword-autentiseringsläge

Installationskrav

Om du använder autentiseringsläget ActiveDirectoryPassword behöver du ladda ner microsoft-authentication-library-for-java och dess beroenden, och inkludera dem i Java-byggsökvägen.

import com.microsoft.azure.sqldb.spark.config.Config
import com.microsoft.azure.sqldb.spark.connect._

val config = Config(Map(
  "url"            -> "mysqlserver.database.windows.net",
  "databaseName"   -> "MyDatabase",
  "user"           -> "username",
  "password"       -> "*********",
  "authentication" -> "ActiveDirectoryPassword",
  "encrypt"        -> "true"
))

val collection = sqlContext.read.sqlDB(config)
collection.show()

Ansluta med hjälp av en åtkomsttoken

Installationskrav

Om du använder det åtkomsttokenbaserade autentiseringsläget måste du ladda ned microsoft-authentication-library-for-java- och dess beroenden och inkludera dem i Java-byggsökvägen.

Se Använda Microsoft Entra-autentisering för att lära dig hur du hämtar en åtkomsttoken till din databas i Azure SQL Database eller Azure SQL Managed Instance.

import com.microsoft.azure.sqldb.spark.config.Config
import com.microsoft.azure.sqldb.spark.connect._

val config = Config(Map(
  "url"                   -> "mysqlserver.database.windows.net",
  "databaseName"          -> "MyDatabase",
  "accessToken"           -> "access_token",
  "hostNameInCertificate" -> "*.database.windows.net",
  "encrypt"               -> "true"
))

val collection = sqlContext.read.sqlDB(config)
collection.show()

Skriva data med massinfogning

Den traditionella jdbc-anslutningsappen skriver data till databasen med hjälp av infogande rad för rad. Du kan använda Spark-anslutningen för att skriva data till Azure SQL och SQL Server med bulk-insert. Det förbättrar avsevärt skrivprestandan vid inläsning av stora datamängder eller inläsning av data i tabeller där ett columnstore-index används.

import com.microsoft.azure.sqldb.spark.bulkcopy.BulkCopyMetadata
import com.microsoft.azure.sqldb.spark.config.Config
import com.microsoft.azure.sqldb.spark.connect._

/**
  Add column Metadata.
  If not specified, metadata is automatically added
  from the destination table, which may suffer performance.
*/
var bulkCopyMetadata = new BulkCopyMetadata
bulkCopyMetadata.addColumnMetadata(1, "Title", java.sql.Types.NVARCHAR, 128, 0)
bulkCopyMetadata.addColumnMetadata(2, "FirstName", java.sql.Types.NVARCHAR, 50, 0)
bulkCopyMetadata.addColumnMetadata(3, "LastName", java.sql.Types.NVARCHAR, 50, 0)

val bulkCopyConfig = Config(Map(
  "url"               -> "mysqlserver.database.windows.net",
  "databaseName"      -> "MyDatabase",
  "user"              -> "username",
  "password"          -> "*********",
  "dbTable"           -> "dbo.Clients",
  "bulkCopyBatchSize" -> "2500",
  "bulkCopyTableLock" -> "true",
  "bulkCopyTimeout"   -> "600"
))

df.bulkCopyToSqlDB(bulkCopyConfig, bulkCopyMetadata)
//df.bulkCopyToSqlDB(bulkCopyConfig) if no metadata is specified.

Nästa steg

Om du inte redan har gjort det laddar du ned Spark-anslutningsappen från Azure-sqldb-spark GitHub-lagringsplatsen och utforskar de ytterligare resurserna på lagringsplatsen:

Du kanske också vill granska Apache Spark SQL, DataFrames, och Datasets-guiden samt Azure Databricks dokumentation.