Ausführen von Apache Sqoop-Aufträgen mit .NET SDK für Apache Hadoop in HDInsight

Erfahren Sie, wie das Azure HDInsight .NET-SDK zum Ausführen von Apache Sqoop-Aufträgen in HDInsight zum Importieren und Exportieren zwischen einem HDInsight-Cluster und einer Azure SQL-Datenbank oder SQL Server-Datenbank verwendet wird.

Voraussetzungen

Verwenden von Sqoop auf HDInsight-Clustern mit dem .NET-SDK

Das HDInsight .NET-SDK enthält .NET-Clientbibliotheken, die das Arbeiten mit HDInsight-Clustern in .NET vereinfachen. In diesem Abschnitt erstellen Sie eine C#-Konsolenanwendung zum Exportieren der hivesampletable in die Azure SQL-Datenbanktabelle, die Sie als Voraussetzung erstellt haben.

Einrichten

  1. Starten Sie Visual Studio, und erstellen Sie eine C#-Konsolenanwendung.

  2. Navigieren Sie zu Extras>NuGet-Paket-Manager>Paket-Manager-Konsole, und führen Sie den folgenden Befehl aus:

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

Sqoop-Export

Aus Hive in SQL Server: In diesem Beispiel werden Daten aus der Hive-Tabelle hivesampletable in die Tabelle mobiledata in SQL-Datenbank exportiert.

  1. Verwenden Sie den folgenden Code in der Datei „Program.cs“. Bearbeiten Sie den Code, um die Werte für ExistingClusterName und ExistingClusterPassword festzulegen.

    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. Wählen Sie zum Ausführen des Programms die Taste F5.

Sqoop-Import

Aus SQL Server in Azure Storage. Dieses Beispiel setzt voraus, dass der oben aufgeführte Exportvorgang durchgeführt wurde. In diesem Beispiel werden Daten aus der Tabelle mobiledata in SQL-Datenbank in das Verzeichnis wasb:///tutorials/usesqoop/importeddata unter dem Standardspeicherkonto des Clusters importiert.

  1. Ersetzen Sie den oben angegebenen Code im Block //sqoop start //sqoop end durch den folgenden 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. Wählen Sie zum Ausführen des Programms die Taste F5.

Einschränkungen

Für Linux-basiertes HDInsight gelten die folgenden Einschränkungen:

  • Massenexport: Derzeit unterstützt der zum Exportieren von Daten nach Microsoft SQL Server oder Azure SQL-Datenbank verwendete Sqoop-Connector keine Masseneinfügungen.

  • Batchverarbeitung: Wenn Sie die Option -batch verwenden, führt Sqoop mehrere Einfügevorgänge aus, anstatt diese zu einem Batch zusammenzufassen.

Nächste Schritte

Sie haben nun gelernt, wie Sie Sqoop verwenden. Weitere Informationen finden Sie unter: