MapReduce feladatok futtatása HDInsight .NET SDK segítségével

Ismerje meg, hogyan küldheti el a MapReduce-feladatokat a HDInsight .NET SDK használatával. A HDInsight-fürtök egy jar-fájllal és néhány MapReduce-mintával együtt érkeznek. A jar fájl a következő /example/jars/hadoop-mapreduce-examples.jar: . Az egyik példa a wordcount. Egy C#-konzolalkalmazást fejleszt egy wordcount-feladat elküldéséhez. A feladat beolvassa a /example/data/gutenberg/davinci.txt fájlt, és az eredményt a következőnek adja ki: /example/data/davinciwordcount. Ha újra szeretné futtatni az alkalmazást, törölnie kell a kimeneti mappát.

Megjegyzés

A cikkben szereplő lépéseket Windows-ügyfélről kell végrehajtani. Ha tudni szeretné, hogy linuxos, OS X- vagy Unix-ügyféllel használhatja a Hive-t, használja a cikk tetején látható fülválasztót.

Előfeltételek

MapReduce-feladatok elküldése a HDInsight .NET SDK használatával

A HDInsight .NET SDK .NET-ügyfélkódtárakat biztosít, amelyek megkönnyítik a .NET-ből származó HDInsight-fürtök használatát.

  1. Indítsa el a Visual Studiót, és hozzon létre egy C#-konzolalkalmazást.

  2. Lépjen az Eszközök>NuGet-csomagkezelő csomagkezelő>konzoljára , és írja be a következő parancsot:

    Install-Package Microsoft.Azure.Management.HDInsight.Job
    
  3. Másolja az alábbi kódot a Program.cs fájlba. Ezután szerkessze a kódot a következő értékek beállításával: existingClusterName, existingClusterPassword, defaultStorageAccountName, defaultStorageAccountKeyés defaultStorageContainerName.

    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);
                    }
    
                }
            }
        }
    }
    
    
  4. Nyomja le az F5 billentyűt az alkalmazás futtatásához.

A feladat ismételt futtatásához módosítania kell a feladat kimeneti mappájának nevét a mintában /example/data/davinciwordcount.

Ha a feladat sikeresen befejeződött, az alkalmazás kinyomtatja a kimeneti fájl part-r-00000tartalmát.

Következő lépések

Ebben a cikkben számos módszert ismertett a HDInsight-fürtök létrehozására. További tudnivalókért olvassa el a következő cikket: