Copiare i dati tra Archivio Data Lake e un database SQL di Azure tramite SqoopCopy data between Data Lake Store and Azure SQL database using Sqoop

Informazioni su come usare Apache Sqoop per importare ed esportare dati tra un database SQL di Azure e Archivio Data Lake.Learn how to use Apache Sqoop to import and export data between Azure SQL Database and Data Lake Store.

Informazioni su SqoopWhat is Sqoop?

Le applicazioni Big Data sono una scelta naturale per l'elaborazione di dati non strutturati e semi-strutturati, ad esempio log e file.Big data applications are a natural choice for processing unstructured and semi-structured data, such as logs and files. Tuttavia, potrebbe anche essere necessario elaborare i dati strutturati archiviati nei database relazionali.However, there may also be a need to process structured data that is stored in relational databases.

Apache Sqoop è uno strumento progettato per trasferire dati tra database relazionali e un repository Big Data, ad esempio Data Lake Store.Apache Sqoop is a tool designed to transfer data between relational databases and a big data repository, such as Data Lake Store. È possibile usarlo per importare dati da un sistema di gestione di database relazionali (RDBMS), ad esempio un database SQL di Azure, in Archivio Data Lake.You can use it to import data from a relational database management system (RDBMS) such as Azure SQL Database into Data Lake Store. È quindi possibile trasformare e analizzare i dati mediante carichi di lavoro Big Data e quindi esportarli nuovamente in un sistema RDBMS.You can then transform and analyze the data using big data workloads and then export the data back into an RDBMS. In questa esercitazione viene usato un database SQL di Azure come database relazionale da cui importare/esportare dati.In this tutorial, you use an Azure SQL Database as your relational database to import/export from.

PrerequisitiPrerequisites

Per eseguire le procedure descritte nell'articolo è necessario:Before you begin this article, you must have the following:

Apprendimento rapido con i videoDo you learn fast with videos?

Guardare questo video su come copiare dati tra i BLOB di archiviazione di Azure e Archivio Data Lake con DistCp.Watch this video on how to copy data between Azure Storage Blobs and Data Lake Store using DistCp.

Creare tabelle di esempio nel database SQL di AzureCreate sample tables in the Azure SQL Database

  1. Per iniziare, creare due tabelle di esempio nel database SQL di Azure.To start with, create two sample tables in the Azure SQL Database. Usare SQL Server Management Studio o Visual Studio per connettersi al database SQL di Azure e quindi eseguire le query seguenti.Use SQL Server Management Studio or Visual Studio to connect to the Azure SQL Database and then run the following queries.

    Create Table1Create Table1

     CREATE TABLE [dbo].[Table1](
     [ID] [int] NOT NULL,
     [FName] [nvarchar](50) NOT NULL,
     [LName] [nvarchar](50) NOT NULL,
      CONSTRAINT [PK_Table_4] PRIMARY KEY CLUSTERED
         (
                [ID] ASC
         )
     ) ON [PRIMARY]
     GO
    

    Create Table2Create Table2

     CREATE TABLE [dbo].[Table2](
     [ID] [int] NOT NULL,
     [FName] [nvarchar](50) NOT NULL,
     [LName] [nvarchar](50) NOT NULL,
      CONSTRAINT [PK_Table_4] PRIMARY KEY CLUSTERED
         (
                [ID] ASC
         )
     ) ON [PRIMARY]
     GO
    
  2. In Table1aggiungere alcuni dati di esempio.In Table1, add some sample data. Lasciare vuota Table2 .Leave Table2 empty. Verranno importati dati da Table1 ad Archivio Data Lake.We will import data from Table1 into Data Lake Store. Quindi, verranno esportati dati da Archivio Data Lake a Table2.Then, we will export data from Data Lake Store into Table2. Eseguire il frammento di codice seguente.Run the following snippet.

     INSERT INTO [dbo].[Table1] VALUES (1,'Neal','Kell'), (2,'Lila','Fulton'), (3, 'Erna','Myers'), (4,'Annette','Simpson');
    

Usare Sqoop da un cluster HDInsight con accesso ad Archivio Data LakeUse Sqoop from an HDInsight cluster with access to Data Lake Store

In un cluster HDInsight sono già disponibili i pacchetti di Sqoop.An HDInsight cluster already has the Sqoop packages available. Se il cluster HDInsight è stato configurato per l'uso di Archivio Data Lake come archiviazione aggiuntiva, è possibile usare Sqoop (senza apportare modifiche alla configurazione) per importare o esportare dati tra un database relazionale (in questo esempio, un database SQL di Azure) e un account Archivio Data Lake.If you have configured the HDInsight cluster to use Data Lake Store as an additional storage, you can use Sqoop (without any configuration changes) to import/export data between a relational database (in this example, Azure SQL Database) and a Data Lake Store account.

  1. Per questa esercitazione si presuppone che sia stato creato un cluster Linux, quindi è consigliabile usare SSH per connettersi al cluster.For this tutorial, we assume you created a Linux cluster so you should use SSH to connect to the cluster. Vedere Connettersi a un cluster HDInsight basato su Linux.See Connect to a Linux-based HDInsight cluster.
  2. Verificare se è possibile accedere all'account Archivio Data Lake dal cluster.Verify whether you can access the Data Lake Store account from the cluster. Eseguire il comando seguente dal prompt SSH:Run the following command from the SSH prompt:

     hdfs dfs -ls adl://<data_lake_store_account>.azuredatalakestore.net/
    

    Dovrebbe essere visualizzato un elenco di file/cartelle nell'account Archivio Data Lake.This should provide a list of files/folders in the Data Lake Store account.

Importare dati da un database SQL di Azure ad Archivio Data LakeImport data from Azure SQL Database into Data Lake Store

  1. Passare alla directory in cui sono disponibili i pacchetti di Sqoop.Navigate to the directory where Sqoop packages are available. In genere, questa corrisponde a /usr/hdp/<version>/sqoop/bin.Typically, this will be at /usr/hdp/<version>/sqoop/bin.
  2. Importare i dati da Table1 all'account di Archivio Data Lake.Import the data from Table1 into the Data Lake Store account. Usare la sintassi seguente:Use the following syntax:

     sqoop-import --connect "jdbc:sqlserver://<sql-database-server-name>.database.windows.net:1433;username=<username>@<sql-database-server-name>;password=<password>;database=<sql-database-name>" --table Table1 --target-dir adl://<data-lake-store-name>.azuredatalakestore.net/Sqoop/SqoopImportTable1
    

    Si noti che il segnaposto sql-database-server-name rappresenta il nome del server in cui è in esecuzione il database SQL di Azure.Note that sql-database-server-name placeholder represents the name of the server where the Azure SQL database is running. sql-database-name rappresenta il nome effettivo del database.sql-database-name placeholder represents the actual database name.

    Ad esempio,For example,

    sqoop-import --connect "jdbc:sqlserver://mysqoopserver.database.windows.net:1433;username=nitinme@mysqoopserver;password=<password>;database=mysqoopdatabase" --table Table1 --target-dir adl://myadlstore.azuredatalakestore.net/Sqoop/SqoopImportTable1
  1. Verificare che i dati siano stati trasferiti all'account Archivio Data Lake.Verify that the data has been transferred to the Data Lake Store account. Eseguire il comando seguente:Run the following command:

     hdfs dfs -ls adl://hdiadlstore.azuredatalakestore.net/Sqoop/SqoopImportTable1/
    

    Viene visualizzato l'output seguente.You should see the following output.

    -rwxrwxrwx   0 sshuser hdfs          0 2016-02-26 21:09 adl://hdiadlstore.azuredatalakestore.net/Sqoop/SqoopImportTable1/_SUCCESS
    -rwxrwxrwx   0 sshuser hdfs         12 2016-02-26 21:09 adl://hdiadlstore.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00000
    -rwxrwxrwx   0 sshuser hdfs         14 2016-02-26 21:09 adl://hdiadlstore.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00001
    -rwxrwxrwx   0 sshuser hdfs         13 2016-02-26 21:09 adl://hdiadlstore.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00002
    -rwxrwxrwx   0 sshuser hdfs         18 2016-02-26 21:09 adl://hdiadlstore.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00003

<span data-ttu-id="70292-154">Ogni file **part-m-*** corrisponde a una riga nella tabella di origine, **Table1**.</span><span class="sxs-lookup"><span data-stu-id="70292-154">Each **part-m-*** file corresponds to a row in the source table, **Table1**.</span></span> <span data-ttu-id="70292-155">È possibile visualizzare i contenuti dei file part-m-* per la verifica.</span><span class="sxs-lookup"><span data-stu-id="70292-155">You can view the contents of the part-m-* files to verify.</span></span>

Esportare dati da Archivio Data Lake a un database SQL di Azure Export data from Data Lake Store into Azure SQL Database

  1. Esportare i dati dall'account di Data Lake Store alla tabella vuota, Table2, nel database SQL di Azure.Export the data from Data Lake Store account to the empty table, Table2, in the Azure SQL Database. Usare la sintassi seguente.Use the following syntax.

     sqoop-export --connect "jdbc:sqlserver://<sql-database-server-name>.database.windows.net:1433;username=<username>@<sql-database-server-name>;password=<password>;database=<sql-database-name>" --table Table2 --export-dir adl://<data-lake-store-name>.azuredatalakestore.net/Sqoop/SqoopImportTable1 --input-fields-terminated-by ","
    

    Ad esempio,For example,

    sqoop-export --connect "jdbc:sqlserver://mysqoopserver.database.windows.net:1433;username=nitinme@mysqoopserver;password=<password>;database=mysqoopdatabase" --table Table2 --export-dir adl://myadlstore.azuredatalakestore.net/Sqoop/SqoopImportTable1 --input-fields-terminated-by ","
  1. Verificare che i dati siano stati caricati nella tabella del database SQL.Verify that the data was uploaded to the SQL Database table. Usare SQL Server Management Studio o Visual Studio per connettersi al database SQL di Azure e quindi eseguire la query seguente.Use SQL Server Management Studio or Visual Studio to connect to the Azure SQL Database and then run the following query.

     SELECT * FROM TABLE2
    

    L'output della query corrisponde al seguente.This should have the following output.

      ID  FName   LName
     ------------------
     1    Neal    Kell
     2    Lila    Fulton
     3    Erna    Myers
     4    Annette    Simpson
    

Considerazioni sulle prestazioni per l'uso di SqoopPerformance considerations while using Sqoop

Per ottimizzare le prestazioni del processo di Sqoop per copiare i dati in Data Lake Store, vedere il documento sulle prestazioni di Sqoop.For performance tuning your Sqoop job to copy data to Data Lake Store, see Sqoop performance document.

Vedere ancheSee also