HDInsight .NET SDK kullanarak Apache Hive sorguları çalıştırma

HDInsight .NET SDK'sını kullanarak Apache Hive sorguları göndermeyi öğrenin. Hive tablolarını listelemek için bir Hive sorgusu göndermek üzere bir C# programı yazar ve sonuçları görüntülersiniz.

Not

Bu makaledeki adımlar bir Windows istemcisinden gerçekleştirilmelidir. Hive ile çalışmak için Linux, OS X veya Unix istemcisi kullanma hakkında bilgi için makalenin üst kısmında gösterilen sekme seçiciyi kullanın.

Önkoşullar

Bu makaleye başlamadan önce aşağıdaki öğelere sahip olmanız gerekir:

  • HDInsight'ta apache Hadoop kümesi. Bkz. HDInsight'ta Linux tabanlı Hadoop kullanmaya başlama.

    Önemli

    15 Eylül 2017 itibarıyla HDInsight .NET SDK'sı yalnızca Azure Depolama hesaplarından Hive sorgu sonuçlarını döndürmeyi destekler. Bu örneği birincil depolama alanı olarak Azure Data Lake Depolama kullanan bir HDInsight kümesiyle kullanırsanız, .NET SDK'sını kullanarak arama sonuçlarını alamazsınız.

  • Visual Studio 2013 ve sonrası. En azından iş yükü .NET masaüstü geliştirme yüklenmelidir.

Hive Sorgusu Çalıştırma

HDInsight .NET SDK'sı .NET istemci kitaplıkları sağlar ve bu da .NET'ten HDInsight kümeleriyle çalışmayı kolaylaştırır.

  1. Visual Studio'da bir C# konsol uygulaması oluşturun.

  2. Nuget Paket Yöneticisi Konsolu'ndan aşağıdaki komutu çalıştırın:

    Install-Package Microsoft.Azure.Management.HDInsight.Job
    
  3. Değişkenlerin değerlerini başlatmak için aşağıdaki kodu düzenleyin: ExistingClusterName, ExistingClusterUsername, ExistingClusterPassword,DefaultStorageAccountName,DefaultStorageAccountKey,DefaultStorageContainerName. Ardından düzeltilen kodu Visual Studio'da Program.cs içeriğinin tamamı olarak kullanın.

    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. Uygulamayı çalıştırmak için F5'e basın.

Uygulamanın çıkışı şuna benzer olmalıdır:

HDInsight Hadoop Hive job output.

Sonraki adımlar

Bu makalede, HDInsight .NET SDK'sını kullanarak Apache Hive sorguları göndermeyi öğrendiniz. Daha fazla bilgi için aşağıdaki makalelere bakın: