Eseguire processi MapReduce con HDInsight .NET SDK

Informazioni su come inviare processi MapReduce con HDInsight .NET SDK. I cluster HDInsight includono un file JAR con alcuni esempi di MapReduce. Il file JAR è /example/jars/hadoop-mapreduce-examples.jar. Uno degli esempi è wordcount. Per inviare un processo wordcount, è necessario sviluppare un'applicazione console C#. Il processo legge il file /example/data/gutenberg/davinci.txt e restituisce i risultati in /example/data/davinciwordcount. Se si vuole eseguire di nuovo l'applicazione, è necessario pulire la cartella di output.

Nota

I passaggi descritti in questo articolo devono essere eseguiti da un client Windows. Per informazioni sull'uso di un client Linux, OS X o Unix con Hive, usare il selettore di schede visualizzato all'inizio dell'articolo.

Prerequisiti

Per eseguire le procedure descritte nell'articolo è necessario:

Inviare processi MapReduce mediante HDInsight .NET SDK

HDInsight .NET SDK fornisce librerie client .NET che semplificano l'uso dei cluster HDInsight da .NET.

Inviare i processi

  1. Creare un'applicazione console C# in Visual Studio.
  2. Eseguire il comando seguente dalla console di Gestione pacchetti NuGet.

     Install-Package Microsoft.Azure.Management.HDInsight.Job
    
  3. Usare il codice seguente:

     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;
    
     namespace SubmitHDInsightJobDotNet
     {
         class Program
         {
             private static HDInsightJobManagementClient _hdiJobManagementClient;
    
             private const string ExistingClusterName = "<Your HDInsight Cluster Name>";
             private const string ExistingClusterUri = ExistingClusterName + ".azurehdinsight.net";
             private const string ExistingClusterUsername = "<Cluster Username>";
             private const string ExistingClusterPassword = "<Cluster User Password>";
    
             private const string DefaultStorageAccountName = "<Default Storage Account Name>"; //<StorageAccountName>.blob.core.windows.net
             private const string DefaultStorageAccountKey = "<Default Storage Account Key>";
             private const string DefaultStorageContainerName = "<Default Blob Container Name>";
    
             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
                 var storageAccess = new AzureStorageAccess(DefaultStorageAccountName, DefaultStorageAccountKey,
                     DefaultStorageContainerName);
                 var output = (jobDetail.ExitValue == 0)
                     ? _hdiJobManagementClient.JobManagement.GetJobOutput(jobId, storageAccess) // fetch stdout output in case of success
                     : _hdiJobManagementClient.JobManagement.GetJobErrorLogs(jobId, storageAccess); // fetch stderr output in case of failure
    
                 System.Console.WriteLine("Job output is: ");
    
                 using (var reader = new StreamReader(output, Encoding.UTF8))
                 {
                     string value = reader.ReadToEnd();
                     System.Console.WriteLine(value);
                 }
             }
         }
     }
    
  4. Premere F5 per eseguire l'applicazione.

Per eseguire nuovamente il processo, è necessario cambiare il nome della cartella di output del processo, che nell'esempio è: "/example/data/davinciwordcount".

Una volta completato correttamente il processo, l'output risulta vuoto. Per visualizzare il risultato del processo MapReduce, usare il portale di Azure per esplorare il contenitore di archiviazione predefinito nell'archiviazione BLOB. Il nome del file è "part-r-00000".

Passaggi successivi

Questo articolo ha spiegato vari modi per creare un cluster HDInsight. Per altre informazioni, vedere gli articoli seguenti: