Accélérer l’analytique en temps réel du Big Data au moyen du connecteur SparkAccelerate real-time big data analytics using the Spark connector

S’APPLIQUE À : Azure SQL Database Azure SQL Managed Instance

Notes

Depuis septembre 2020, ce connecteur n’est plus activement géré.As of Sep 2020, this connector is not actively maintained. Toutefois, le connecteur Apache Spark pour SQL Server et Azure SQL est désormais disponible, avec une prise en charge des liaisons Python et R, une interface plus facile à utiliser pour l’insertion en bloc de données, et de nombreuses autres améliorations.However, Apache Spark Connector for SQL Server and Azure SQL is now available, with support for Python and R bindings, an easier-to use interface to bulk insert data, and many other improvements. Nous vous encourageons vivement à évaluer et à utiliser ce nouveau connecteur au lieu de celui-ci.We strongly encourage you to evaluate and use the new connector instead of this one. Les informations relatives à l’ancien connecteur (cette page) sont conservées uniquement à des fins d’archivage.The information about the old connector (this page) is only retained for archival purposes.

Le connecteur Spark permet aux bases de données dans Azure SQL Database, Azure SQL Managed Instance et SQL Server de jouer le rôle de source de données d’entrée ou de récepteur de données de sortie pour les travaux Spark.The Spark connector enables databases in Azure SQL Database, Azure SQL Managed Instance, and SQL Server to act as the input data source or output data sink for Spark jobs. Il vous permet d’utiliser des données transactionnelles en temps réel dans l’analytique du Big Data et de conserver les résultats pour des requêtes ad hoc ou des rapports.It allows you to utilize real-time transactional data in big data analytics and persist results for ad hoc queries or reporting. Par rapport au connecteur JDBC intégré, ce connecteur offre la possibilité d’insérer des données en bloc dans votre base de données.Compared to the built-in JDBC connector, this connector provides the ability to bulk insert data into your database. Il peut donner de meilleurs résultats que l’insertion ligne par ligne et atteindre des performances entre 10 et 20 fois plus rapides.It can outperform row-by-row insertion with 10x to 20x faster performance. Le connecteur Spark prend en charge l’authentification Azure Active Directory (Azure AD) pour se connecter à Azure SQL Database et Azure SQL Managed Instance, ce qui vous permet de connecter votre base de données à partir d’Azure Databricks à l’aide de votre compte Azure AD.The Spark connector supports Azure Active Directory (Azure AD) authentication to connect to Azure SQL Database and Azure SQL Managed Instance, allowing you to connect your database from Azure Databricks using your Azure AD account. Il fournit des interfaces similaires à celles du connecteur JDBC intégré.It provides similar interfaces with the built-in JDBC connector. Effectuer la migration de vos travaux Spark existants pour utiliser ce nouveau connecteur est très simple.It is easy to migrate your existing Spark jobs to use this new connector.

Télécharger et créer un connecteur SparkDownload and build a Spark connector

Le référentiel GitHub de l’ancien connecteur, précédemment lié à partir de cette page, n’est pas activement géré.The GitHub repo for the old connector previously linked to from this page is not actively maintained. À la place, nous vous encourageons vivement à évaluer et à utiliser ce nouveau connecteur.Instead, we strongly encourage you to evaluate and use the new connector.

Versions officielles prises en chargeOfficial supported versions

ComposantComponent VersionVersion
Apache SparkApache Spark 2.0.2 ou version ultérieure2.0.2 or later
ScalaScala 2.10 ou version ultérieure2.10 or later
Pilote Microsoft JDBC pour SQL ServerMicrosoft JDBC Driver for SQL Server 6.2 ou version ultérieure6.2 or later
Microsoft SQL ServerMicrosoft SQL Server SQL Server 2008 ou version ultérieureSQL Server 2008 or later
Azure SQL DatabaseAzure SQL Database Prise en chargeSupported
Azure SQL Managed InstanceAzure SQL Managed Instance Prise en chargeSupported

Le connecteur Spark utilise le Pilote JDBC Microsoft pour SQL Server afin de déplacer des données entre les nœuds Worker Spark et les bases de données :The Spark connector utilizes the Microsoft JDBC Driver for SQL Server to move data between Spark worker nodes and databases:

Le flux de données est le suivant :The dataflow is as follows:

  1. Le nœud principal Spark se connecte à des bases de données dans SQL Database ou SQL Server et charge les données à partir d’une table spécifique ou à l’aide d’une requête SQL spécifique.The Spark master node connects to databases in SQL Database or SQL Server and loads data from a specific table or using a specific SQL query.
  2. Le nœud principal Spark distribue les données aux nœuds de rôle de travail à des fins de transformation.The Spark master node distributes data to worker nodes for transformation.
  3. Le nœud Worker se connecte aux bases de données qui se connectent à SQL Database ou SQL Server et écrit les données dans la base de données.The Worker node connects to databases that connect to SQL Database and SQL Server and writes data to the database. L’utilisateur peut choisir d’utiliser l’insertion ligne par ligne ou l’insertion en bloc.User can choose to use row-by-row insertion or bulk insert.

Le diagramme suivant illustre le flux de données.The following diagram illustrates the data flow.

Le diagramme montre le flux décrit, avec un nœud principal qui se connecte directement à la base de données et qui se connecte à trois nœuds Worker, lesquels se connectent à la base de données.

Générer un connecteur SparkBuild the Spark connector

Actuellement, le projet de connecteur utilise maven.Currently, the connector project uses maven. Pour créer le connecteur sans dépendances, vous pouvez exécuter :To build the connector without dependencies, you can run:

  • Un package propre mvnmvn clean package
  • Les dernières versions du fichier JAR téléchargées à partir du dossier releaseDownload the latest versions of the JAR from the release folder
  • Inclure le JAR Spark SQL DatabaseInclude the SQL Database Spark JAR

Se connecter et lire des données à l’aide du connecteur SparkConnect and read data using the Spark connector

Vous pouvez vous connecter à des bases de données dans SQL Database et SQL Server à partir d’un travail Spark pour lire ou écrire des données.You can connect to databases in SQL Database and SQL Server from a Spark job to read or write data. Vous pouvez également exécuter une requête DML ou DDL dans des bases de données dans SQL Database et SQL Server.You can also run a DML or DDL query in databases in SQL Database and SQL Server.

Lire des données à partir d’Azure SQL et SQL ServerRead data from Azure SQL and 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()

Lecture de données à partir d’Azure SQL et SQL Server avec une requête SQL spécifiéeRead data from Azure SQL and SQL Server with specified SQL query

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()

Écrire des données dans Azure SQL et SQL ServerWrite data to Azure SQL and SQL Server

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

// Aquire 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)

Exécuter une requête DML ou DDL dans Azure SQL et SQL ServerRun DML or DDL query in Azure SQL and 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)

Se connecter à partir de Spark à l’aide de l’authentification Azure ADConnect from Spark using Azure AD authentication

Vous pouvez vous connecter à Azure SQL Database et SQL Managed Instance à l’aide de l’authentification Azure AD.You can connect to Azure SQL Database and SQL Managed Instance using Azure AD authentication. Utilisez l’authentification Azure AD pour gérer de manière centralisée les identités des utilisateurs de base de données et comme alternative à l’authentification SQL Server.Use Azure AD authentication to centrally manage identities of database users and as an alternative to SQL Server authentication.

Connexion à l’aide du mode d’authentification ActiveDirectoryPasswordConnecting using ActiveDirectoryPassword Authentication Mode

Configuration requiseSetup requirement

Si vous utilisez le mode d’authentification ActiveDirectoryPassword, vous devez télécharger azure-activedirectory-library-for-java et ses dépendances, puis les inclure dans le chemin de la build Java.If you are using the ActiveDirectoryPassword authentication mode, you need to download azure-activedirectory-library-for-java and its dependencies, and include them in the Java build path.

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()

Connexion à l’aide d’un jeton d’accèsConnecting using an access token

Configuration requiseSetup requirement

Si vous utilisez le mode d’authentification par jeton d’accès, vous devez télécharger azure-activedirectory-library-for-java et ses dépendances, puis les inclure dans le chemin de la build Java.If you are using the access token-based authentication mode, you need to download azure-activedirectory-library-for-java and its dependencies, and include them in the Java build path.

Consultez Utiliser l’authentification Azure Active Directory pour l’authentification pour savoir comment obtenir un jeton d’accès à votre base de données dans Azure SQL Database ou Azure SQL Managed Instance.See Use Azure Active Directory Authentication for authentication to learn how to get an access token to your database in Azure SQL Database or 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()

Écrire des données à l’aide de l’insertion en blocWrite data using bulk insert

Le connecteur JDBC traditionnel écrit des données dans votre base de données en utilisant l’insertion ligne par ligne.The traditional jdbc connector writes data into your database using row-by-row insertion. Vous pouvez utiliser le connecteur Spark pour écrire des données dans Azure SQL et SQL Server en utilisant l’insertion en bloc.You can use the Spark connector to write data to Azure SQL and SQL Server using bulk insert. Ce connecteur améliore considérablement les performances d’écriture lors du chargement de grands jeux de données ou de données dans des tables où un index de banque des colonnes est utilisé.It significantly improves the write performance when loading large data sets or loading data into tables where a column store index is used.

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.

Étapes suivantesNext steps

Si ce n’est déjà fait, téléchargez le connecteur Spark depuis le référentiel GitHub azure-sqldb-spark et parcourez les ressources supplémentaires qui s’y trouvent :If you haven't already, download the Spark connector from azure-sqldb-spark GitHub repository and explore the additional resources in the repo:

Vous pouvez également consulter Apache Spark SQL, DataFrames, and Datasets Guide (Guide sur Apache Spark SQL, les tableaux de données et les jeux de données) et la documentation Azure Databricks.You might also want to review the Apache Spark SQL, DataFrames, and Datasets Guide and the Azure Databricks documentation.