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
Die unter Verwenden von Apache Sqoop mit Hadoop in HDInsight beschriebene Einrichtung der Testumgebung muss abgeschlossen sein.
Vertrautheit mit Sqoop. Weitere Informationen finden Sie im Sqoop-Benutzerhandbuch.
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
Starten Sie Visual Studio, und erstellen Sie eine C#-Konsolenanwendung.
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.
Verwenden Sie den folgenden Code in der Datei „Program.cs“. Bearbeiten Sie den Code, um die Werte für
ExistingClusterName
undExistingClusterPassword
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); } } }
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.
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" };
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:
- Verwenden von Apache Oozie mit HDInsight: Verwenden der Sqoop-Aktion in einem Oozie-Workflow.
- Hochladen von Daten in HDInsight: Weitere Methoden zum Hochladen von Daten in HDInsight oder Azure Blob Storage.