Spouštění dotazů Apache Hive pomocí sady HDInsight .NET SDK

Zjistěte, jak odesílat dotazy Apache Hive pomocí sady HDInsight .NET SDK. Napíšete program C#, který odešle dotaz Hive pro výpis tabulek Hive a zobrazí výsledky.

Poznámka:

Kroky v tomto článku je nutné provést z klienta systému Windows. Informace o použití klienta Systému Linux, OS X nebo Unix pro práci s Hivem použijte selektor karet zobrazený v horní části článku.

Požadavky

Než začnete s tímto článkem, musíte mít následující položky:

  • Cluster Apache Hadoop ve službě HDInsight Viz Začínáme používat Hadoop založený na Linuxu ve službě HDInsight.

    Důležité

    Od 15. září 2017 podporuje sada HDInsight .NET SDK pouze vrácení výsledků dotazů Hive z účtů Azure Storage. Pokud použijete tento příklad s clusterem HDInsight, který používá Azure Data Lake Storage jako primární úložiště, nemůžete načíst výsledky hledání pomocí sady .NET SDK.

  • Visual Studio 2013 a novější Je třeba nainstalovat aspoň vývoj desktopových aplikací .NET pro úlohy.

Spuštění dotazu Hive

Sada HDInsight .NET SDK poskytuje klientské knihovny .NET, což usnadňuje práci s clustery HDInsight z .NET.

  1. Vytvořte konzolovou aplikaci jazyka C# v sadě Visual Studio.

  2. V konzole Správce balíčků NuGet spusťte následující příkaz:

    Install-Package Microsoft.Azure.Management.HDInsight.Job
    
  3. Upravte následující kód, abyste inicializovali hodnoty proměnných: ExistingClusterName, ExistingClusterUsername, ExistingClusterPassword,DefaultStorageAccountName,DefaultStorageAccountKey,DefaultStorageContainerName. Pak použijte upravený kód jako celý obsah Program.cs v sadě 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. Stisknutím klávesy F5 spusťte aplikaci.

Výstup aplikace by měl vypadat přibližně takto:

HDInsight Hadoop Hive job output.

Další kroky

V tomto článku jste zjistili, jak odesílat dotazy Apache Hive pomocí sady HDInsight .NET SDK. Další informace najdete v těchto článcích: