Exécuter des tâches Apache Sqoop avec le SDK .NET pour Apache Hadoop dans HDInsight

Découvrez comment utiliser le kit de développement logiciel .NET Azure HDInsight pour exécuter des tâches Apache Sqoop dans HDInsight afin d’effectuer des opérations d’importation et d’exportation entre un cluster HDInsight et Azure SQL Database ou SQL Server Database.

Prérequis

Utiliser Sqoop sur des clusters HDInsight avec le Kit de développement logiciel (SDK) .NET

Le Kit de développement logiciel (SDK) .NET HDInsight fournit des bibliothèques clientes .NET facilitant l'utilisation des clusters HDInsight à partir de .NET. Dans cette section, vous allez créer une application console C# pour exporter l’hivesampletable vers la table Azure SQL Database que vous avez créée à partir des conditions préalables.

Configurer

  1. Démarrez Visual Studio et créez une application console C#.

  2. Accédez à Outils>Gestionnaire de package NuGet>Console du gestionnaire de package, puis exécutez la commande suivante :

    Install-Package Microsoft.Azure.Management.HDInsight.Job
    

Exportation de Sqoop

De Hive vers SQL Server. Cet exemple exporte des données à partir de la table Hive hivesampletable vers la table mobiledata dans SQL Database.

  1. Utilisez le code suivant dans le fichier Program.cs. Modifiez le code pour définir les valeurs de ExistingClusterNameet de ExistingClusterPassword.

    using Microsoft.Azure.Management.HDInsight.Job;
    using Microsoft.Azure.Management.HDInsight.Job.Models;
    using Hyak.Common;
    
    namespace SubmitHDInsightJobDotNet
    {
        class Program
        {
            private static HDInsightJobManagementClient _hdiJobManagementClient;
    
            private const string ExistingClusterName = "<Your HDInsight Cluster Name>";
            private const string ExistingClusterPassword = "<Cluster User Password>";
            private const string ExistingClusterUri = ExistingClusterName + ".azurehdinsight.net";
            private const string ExistingClusterUsername = "admin";
    
            static void Main(string[] args)
            {
                System.Console.WriteLine("The application is running ...");
    
                var clusterCredentials = new BasicAuthenticationCloudCredentials { Username = ExistingClusterUsername, Password = ExistingClusterPassword };
                _hdiJobManagementClient = new HDInsightJobManagementClient(ExistingClusterUri, clusterCredentials);
    
                SubmitSqoopJob();
    
                System.Console.WriteLine("Press ENTER to continue ...");
                System.Console.ReadLine();
            }
    
            private static void SubmitSqoopJob()
            {
                var sqlDatabaseServerName = ExistingClusterName + "dbserver";
                var sqlDatabaseLogin = "sqluser";
                var sqlDatabaseLoginPassword = ExistingClusterPassword;
                var sqlDatabaseDatabaseName = ExistingClusterName + "db";
    
                // Connection string for using Azure SQL Database; Comment if using SQL Server
                var connectionString = "jdbc:sqlserver://" + sqlDatabaseServerName + ".database.windows.net;user=" + sqlDatabaseLogin + "@" + sqlDatabaseServerName + ";password=" + sqlDatabaseLoginPassword + ";database=" + sqlDatabaseDatabaseName;
    
                // Connection string for using SQL Server; Uncomment if using SQL Server
                // var connectionString = "jdbc:sqlserver://" + sqlDatabaseServerName + ";user=" + sqlDatabaseLogin + ";password=" + sqlDatabaseLoginPassword + ";database=" + sqlDatabaseDatabaseName;
    
                //sqoop start
                var tableName = "mobiledata";
    
                var parameters = new SqoopJobSubmissionParameters
                {
                     Command = "export --connect " + connectionString + " --table " + tableName + " --hcatalog-table hivesampletable"
                };
                //sqoop end
    
                System.Console.WriteLine("Submitting the Sqoop job to the cluster...");
                var response = _hdiJobManagementClient.JobManagement.SubmitSqoopJob(parameters);
                System.Console.WriteLine("Validating that the response is as expected...");
                System.Console.WriteLine("Response status code is " + response.StatusCode);
                System.Console.WriteLine("Validating the response object...");
                System.Console.WriteLine("JobId is " + response.JobSubmissionJsonResponse.Id);
            }
        }
    }
    
  2. Pour lancer le programme, appuyez sur la touche F5.

Importation de Sqoop

Depuis SQL Server vers Stockage Azure. Cet exemple dépend de l’exportation ci-dessus effectuée. Cet exemple importe des données de la table mobiledata dans SQL Database vers le répertoire wasb:///tutorials/usesqoop/importeddata sur le compte de stockage par défaut du cluster.

  1. Remplacez le code ci-dessus dans le bloc //sqoop start //sqoop end par le code suivant :

    var tableName = "mobiledata";
    var exportDir = "/tutorials/usesqoop/importeddata";
    
    var parameters = new SqoopJobSubmissionParameters
    {
        Command = "import --connect " + connectionString + " --table " + tableName + " --target-dir " +  exportDir + " --fields-terminated-by \\t --lines-terminated-by \\n -m 1"
    };
    
  2. Pour lancer le programme, appuyez sur la touche F5.

Limites

HDInsight basé sur Linux présente les limitations suivantes :

  • Exportation en bloc : le connecteur Sqoop utilisé pour exporter des données vers Microsoft SQL Server ou Azure SQL Database ne prend actuellement pas en charge les insertions en bloc.

  • Traitement par lot : lorsque vous utilisez le commutateur -batch, Sqoop effectue plusieurs insertions au lieu de traiter par lot les opérations d’insertion.

Étapes suivantes

Vous maîtrisez à présent l’utilisation de Sqoop. Pour plus d'informations, consultez les rubriques suivantes :