MapReduce-taken uitvoeren met behulp van de HDInsight .NET-SDK
Leer hoe u MapReduce-taken verzendt met behulp van HDInsight .NET SDK. HDInsight-clusters worden geleverd met een JAR-bestand met enkele MapReduce-voorbeelden. Het JAR-bestand is /example/jars/hadoop-mapreduce-examples.jar
. Een van de voorbeelden is het aantal woorden. U ontwikkelt een C#-consoletoepassing om een wordcount-taak in te dienen. De taak leest het /example/data/gutenberg/davinci.txt
bestand en voert de resultaten uit naar /example/data/davinciwordcount
. Als u de toepassing opnieuw wilt uitvoeren, moet u de uitvoermap opschonen.
Notitie
De stappen in dit artikel moeten worden uitgevoerd vanaf een Windows-client. Gebruik de tabselector die boven aan het artikel wordt weergegeven voor informatie over het gebruik van een Linux-, OS X- of Unix-client om met Hive te werken.
Vereisten
Een Apache Hadoop-cluster in HDInsight. Zie Apache Hadoop-clusters maken met behulp van Azure Portal.
MapReduce-taken verzenden met HDInsight .NET SDK
De HDInsight .NET SDK biedt .NET-clientbibliotheken, waardoor u eenvoudiger kunt werken met HDInsight-clusters vanuit .NET.
Start Visual Studio en maak een C#-consoletoepassing.
Navigeer naar Tools>NuGet Pakketbeheer> Pakketbeheer Console en voer de volgende opdracht in:
Install-Package Microsoft.Azure.Management.HDInsight.Job
Kopieer de onderstaande code naar Program.cs. Bewerk vervolgens de code door de waarden in te stellen voor: , , , en
defaultStorageContainerName
defaultStorageAccountKey
.defaultStorageAccountName
existingClusterPassword
existingClusterName
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); } } } } }
Druk op F5 om de toepassing uit te voeren.
Als u de taak opnieuw wilt uitvoeren, moet u de naam van de taakuitvoermap wijzigen in het voorbeeld /example/data/davinciwordcount
.
Wanneer de taak is voltooid, drukt de toepassing de inhoud van het uitvoerbestand part-r-00000
af.
Volgende stappen
In dit artikel hebt u verschillende manieren geleerd om een HDInsight-cluster te maken. Zie de volgende artikelen voor meer informatie:
- Zie Apache Hive-query's uitvoeren met hdInsight .NET SDK voor het verzenden van een Hive-taak.
- Zie Op Linux gebaseerde Apache Hadoop-clusters maken in HDInsight voor het maken van HDInsight-clusters.
- Zie Apache Hadoop-clusters beheren in HDInsight voor het beheren van HDInsight-clusters.
- Zie de naslaginformatie over de HDInsight .NET SDK voor meer informatie over de .NET SDK van HDInsight.
- Zie Niet-interactieve verificatie voor .NET HDInsight-toepassingen maken voor niet-interactieve verificatie bij Azure.