Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Lär dig hur du skickar MapReduce-jobb med HDInsight .NET SDK. HDInsight-kluster levereras med en jar-fil med några MapReduce-exempel. Jar-filen är /example/jars/hadoop-mapreduce-examples.jar. Ett av exemplen är wordcount. Du utvecklar ett C#-konsolprogram för att skicka ett ordräkningsjobb. Jobbet läser /example/data/gutenberg/davinci.txt filen och matar ut resultatet till /example/data/davinciwordcount. Om du vill köra programmet igen måste du rensa utdatamappen.
Kommentar
Stegen i den här artikeln måste utföras från en Windows-klient. Information om hur du använder en Linux-, OS X- eller Unix-klient för att arbeta med Hive finns i flikväljaren som visas överst i artikeln.
Förutsättningar
Ett Apache Hadoop-kluster i HDInsight. Se Skapa Apache Hadoop-kluster med hjälp av Azure-portalen.
Skicka MapReduce-jobb med HDInsight .NET SDK
HDInsight .NET SDK tillhandahåller .NET-klientbibliotek, vilket gör det enklare att arbeta med HDInsight-kluster från .NET.
Starta Visual Studio och skapa ett C#-konsolprogram.
Gå till Verktyg>NuGet Package Manager Package Manager-konsolen> och ange följande kommando:
Install-Package Microsoft.Azure.Management.HDInsight.JobKopiera koden nedan till Program.cs. Redigera sedan koden genom att ange värdena för:
existingClusterName,existingClusterPassword,defaultStorageAccountName,defaultStorageAccountKeyochdefaultStorageContainerName.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); } } } } }Tryck på F5 för att köra programmet.
Om du vill köra jobbet igen måste du ändra namnet på jobbutdatamappen. I exemplet är /example/data/davinciwordcountdet .
När jobbet har slutförts skriver programmet ut innehållet i utdatafilen part-r-00000.
Nästa steg
I den här artikeln har du lärt dig flera sätt att skapa ett HDInsight-kluster. Mer information finns i följande artiklar:
- Information om hur du skickar ett Hive-jobb finns i Köra Apache Hive-frågor med HDInsight .NET SDK.
- Information om hur du skapar HDInsight-kluster finns i Skapa Linux-baserade Apache Hadoop-kluster i HDInsight.
- Information om hur du hanterar HDInsight-kluster finns i Hantera Apache Hadoop-kluster i HDInsight.
- Mer information om HDInsight .NET SDK finns i HDInsight .NET SDK-referens.
- Information om icke-interaktiv autentisering till Azure finns i Skapa icke-interaktiva autentiseringsprogram för .NET HDInsight.