Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erfahren Sie, wie Sie MapReduce-Aufträge mit HDInsight .NET SDK übermitteln. HDInsight-Cluster enthalten eine Jar-Datei mit einigen MapReduce-Beispielen. Die Jar-Datei ist /example/jars/hadoop-mapreduce-examples.jar. Eines der Beispiele ist "wordcount". Sie entwickeln eine C#-Konsolenanwendung, um eine Wortzähl-Aufgabe einzureichen. Der Job liest die Datei /example/data/gutenberg/davinci.txt und gibt die Ergebnisse in /example/data/davinciwordcount aus. Wenn Sie die Anwendung erneut ausführen möchten, müssen Sie den Ausgabeordner bereinigen.
Hinweis
Die Schritte in diesem Artikel müssen von einem Windows-Client ausgeführt werden. Informationen zur Verwendung eines Linux-, OS X- oder Unix-Clients zum Arbeiten mit Hive finden Sie in der Tab-Auswahl oben in diesem Artikel.
Voraussetzungen
Ein Apache Hadoop-Cluster in HDInsight. Siehe Erstellen von Apache Hadoop-Clustern im Azure-Portal.
Übermitteln von MapReduce-Aufträgen mit HDInsight .NET SDK
Das HDInsight .NET SDK bietet .NET-Clientbibliotheken, die die Arbeit mit HDInsight-Clustern von .NET vereinfachen.
Starten Sie Visual Studio, und erstellen Sie eine C#-Konsolenanwendung.
Navigieren Sie zu Tools>NuGet Package Manager>Paket-Manager-Konsole und geben Sie den folgenden Befehl ein:
Install-Package Microsoft.Azure.Management.HDInsight.JobKopieren Sie den folgenden Code in Program.cs. Bearbeiten Sie dann den Code, indem Sie die Werte für
existingClusterName,existingClusterPassword,defaultStorageAccountName,defaultStorageAccountKeyunddefaultStorageContainerNamesetzen.using System.Collections.Generic; using System.IO; using System.Text; using System.Threading; using Microsoft.Azure.Management.HDInsight.Job; using Microsoft.Azure.Management.HDInsight.Job.Models; using Hyak.Common; using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Blob; 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 defaultStorageAccountName = "<Default Storage Account Name>"; private const string defaultStorageAccountKey = "<Default Storage Account Key>"; private const string defaultStorageContainerName = "<Default Blob Container Name>"; private const string existingClusterUsername = "admin"; private const string existingClusterUri = existingClusterName + ".azurehdinsight.net"; private const string sourceFile = "/example/data/gutenberg/davinci.txt"; private const string outputFolder = "/example/data/davinciwordcount"; 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); SubmitMRJob(); System.Console.WriteLine("Press ENTER to continue ..."); System.Console.ReadLine(); } private static void SubmitMRJob() { List<string> args = new List<string> { { "/example/data/gutenberg/davinci.txt" }, { "/example/data/davinciwordcount" } }; var paras = new MapReduceJobSubmissionParameters { JarFile = @"/example/jars/hadoop-mapreduce-examples.jar", JarClass = "wordcount", Arguments = args }; System.Console.WriteLine("Submitting the MR job to the cluster..."); var jobResponse = _hdiJobManagementClient.JobManagement.SubmitMapReduceJob(paras); var jobId = jobResponse.JobSubmissionJsonResponse.Id; System.Console.WriteLine("Response status code is " + jobResponse.StatusCode); System.Console.WriteLine("JobId is " + jobId); System.Console.WriteLine("Waiting for the job completion ..."); // Wait for job completion var jobDetail = _hdiJobManagementClient.JobManagement.GetJob(jobId).JobDetail; while (!jobDetail.Status.JobComplete) { Thread.Sleep(1000); jobDetail = _hdiJobManagementClient.JobManagement.GetJob(jobId).JobDetail; } // Get job output System.Console.WriteLine("Job output is: "); var storageAccess = new AzureStorageAccess(defaultStorageAccountName, defaultStorageAccountKey, defaultStorageContainerName); if (jobDetail.ExitValue == 0) { // Create the storage account object CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=" + defaultStorageAccountName + ";AccountKey=" + defaultStorageAccountKey); // Create the blob client. CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); // Retrieve reference to a previously created container. CloudBlobContainer container = blobClient.GetContainerReference(defaultStorageContainerName); CloudBlockBlob blockBlob = container.GetBlockBlobReference(outputFolder.Substring(1) + "/part-r-00000"); using (var stream = blockBlob.OpenRead()) { using (StreamReader reader = new StreamReader(stream)) { while (!reader.EndOfStream) { System.Console.WriteLine(reader.ReadLine()); } } } } else { // fetch stderr output in case of failure var output = _hdiJobManagementClient.JobManagement.GetJobErrorLogs(jobId, storageAccess); using (var reader = new StreamReader(output, Encoding.UTF8)) { string value = reader.ReadToEnd(); System.Console.WriteLine(value); } } } } }Drücken Sie F5-, um die Anwendung auszuführen.
Um den Auftrag erneut auszuführen, müssen Sie den Namen des Auftragsausgabeordners im Beispiel /example/data/davinciwordcountändern.
Wenn der Auftrag erfolgreich abgeschlossen wird, druckt die Anwendung den Inhalt der Ausgabedatei part-r-00000.
Nächste Schritte
In diesem Artikel haben Sie mehrere Möglichkeiten zum Erstellen eines HDInsight-Clusters kennengelernt. Weitere Informationen finden Sie in den folgenden Artikeln:
- Informationen zum Übermitteln eines Hive-Auftrags finden Sie unter Ausführen von Apache Hive-Abfragen mit HDInsight .NET SDK.
- Informationen zum Erstellen von HDInsight-Clustern finden Sie unter Erstellen linuxbasierter Apache Hadoop-Cluster in HDInsight.
- Informationen zum Verwalten von HDInsight-Clustern finden Sie unter Verwalten von Apache Hadoop-Clustern in HDInsight.
- Informationen zum Erlernen des HDInsight .NET SDK finden Sie in der HDInsight .NET SDK-Referenz.
- Informationen zur nicht interaktiven Authentifizierung bei Azure finden Sie unter Erstellen nicht interaktiver Authentifizierung .NET HDInsight-Anwendungen.