Share via


Apache Hive-query's uitvoeren met HDInsight .NET SDK

Meer informatie over het verzenden van Apache Hive-query's met behulp van HDInsight .NET SDK. U schrijft een C#-programma om een Hive-query in te dienen om Hive-tabellen weer te geven en de resultaten weer te geven.

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

Voordat u met dit artikel begint, moet u over de volgende items beschikken:

  • Een Apache Hadoop-cluster in HDInsight. Zie Aan de slag met Hadoop op basis van Linux in HDInsight.

    Belangrijk

    Vanaf 15 september 2017 biedt de HDInsight .NET SDK alleen ondersteuning voor het retourneren van Hive-queryresultaten van Azure Storage-accounts. Als u dit voorbeeld gebruikt met een HDInsight-cluster dat Gebruikmaakt van Azure Data Lake Storage als primaire opslag, kunt u geen zoekresultaten ophalen met behulp van de .NET SDK.

  • Visual Studio 2013 en hoger. Ten minste de ontwikkeling van de .NET-desktopworkload moet worden geïnstalleerd.

Een Hive-query uitvoeren

De HDInsight .NET SDK biedt .NET-clientbibliotheken, waardoor u eenvoudiger kunt werken met HDInsight-clusters vanuit .NET.

  1. Maak een C#-consoletoepassing in Visual Studio.

  2. Voer vanuit de Nuget Pakketbeheer-console de volgende opdracht uit:

    Install-Package Microsoft.Azure.Management.HDInsight.Job
    
  3. Bewerk de onderstaande code om de waarden voor variabelen te initialiseren: ExistingClusterName, ExistingClusterUsername, ExistingClusterPassword,DefaultStorageAccountName,DefaultStorageAccountKey,DefaultStorageContainerName. Gebruik vervolgens de herziene code als de volledige inhoud van Program.cs in Visual Studio.

    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 ExistingClusterUsername = "<Cluster Username>";
            private const string ExistingClusterPassword = "<Cluster User Password>";
    
            // Only Azure Storage accounts are supported by the SDK
            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 ExistingClusterUri = ExistingClusterName + ".azurehdinsight.net";
    
            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);
    
                SubmitHiveJob();
    
                System.Console.WriteLine("Press ENTER to continue ...");
                System.Console.ReadLine();
            }
    
            private static void SubmitHiveJob()
            {
                Dictionary<string, string> defines = new Dictionary<string, string> { { "hive.execution.engine", "tez" }, { "hive.exec.reducers.max", "1" } };
                List<string> args = new List<string> { { "argA" }, { "argB" } };
                var parameters = new HiveJobSubmissionParameters
                {
                    Query = "SHOW TABLES",
                    Defines = defines,
                    Arguments = args
                };
    
                System.Console.WriteLine("Submitting the Hive job to the cluster...");
                var jobResponse = _hdiJobManagementClient.JobManagement.SubmitHiveJob(parameters);
                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. Druk op F5 om de toepassing uit te voeren.

De uitvoer van de toepassing moet vergelijkbaar zijn met:

HDInsight Hadoop Hive job output.

Volgende stappen

In dit artikel hebt u geleerd hoe u Apache Hive-query's verzendt met behulp van HDInsight .NET SDK. Zie de volgende artikelen voor meer informatie: