Apache Sqoop-taken uitvoeren met behulp van .NET SDK voor Apache Hadoop in HDInsight

Meer informatie over het gebruik van de Azure HDInsight .NET SDK voor het uitvoeren van Apache Sqoop-taken in HDInsight om te importeren en exporteren tussen een HDInsight-cluster en een Azure SQL Database of SQL Server database.

Vereisten

Sqoop gebruiken in HDInsight-clusters met de .NET SDK

De HDInsight .NET SDK biedt .NET-clientbibliotheken, zodat u gemakkelijker kunt werken met HDInsight-clusters vanuit .NET. In deze sectie maakt u een C#-consoletoepassing om de hivesampletable te exporteren naar de Azure SQL Database-tabel die u hebt gemaakt op basis van de vereisten.

Instellen

  1. Start Visual Studio en maak een C#-consoletoepassing.

  2. Navigeer naar Tools>NuGet Package Manager>Package Manager Console en voer de volgende opdracht uit:

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

Sqoop exporteren

Van Hive tot SQL Server. In dit voorbeeld worden gegevens uit de Hive-tabel hivesampletable geƫxporteerd naar de mobiledata tabel in SQL Database.

  1. Gebruik de volgende code in het bestand Program.cs. Bewerk de code om de waarden voor ExistingClusterName, en ExistingClusterPasswordin te stellen.

    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. Als u het programma wilt uitvoeren, selecteert u de toets F5 .

Sqoop importeren

Van SQL Server naar Azure Storage. Dit voorbeeld is afhankelijk van de bovenstaande export die is uitgevoerd. In dit voorbeeld worden gegevens uit de mobiledata tabel in SQL Database geĆÆmporteerd naar de wasb:///tutorials/usesqoop/importeddata map in het standaardopslagaccount van het cluster.

  1. Vervang de bovenstaande code in het //sqoop start //sqoop end blok door de volgende code:

    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. Als u het programma wilt uitvoeren, selecteert u de toets F5 .

Beperkingen

HdInsight op basis van Linux heeft de volgende beperkingen:

  • Bulksgewijs exporteren: de Sqoop-connector die wordt gebruikt voor het exporteren van gegevens naar Microsoft SQL Server of Azure SQL Database biedt momenteel geen ondersteuning voor bulkinvoegingen.

  • Batchverwerking: Met behulp van de -batch schakeloptie voert Sqoop meerdere invoegbewerkingen uit in plaats van batchverwerkingen uit te voeren.

Volgende stappen

U hebt nu geleerd hoe u Sqoop gebruikt. Raadpleeg voor meer informatie: