Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Узнайте, как отправлять запросы Apache Hive с помощью SDK для .NET HDInsight. Вы пишете программу C#, чтобы отправить запрос Hive для перечисления таблиц Hive и отобразить результаты.
Примечание.
Действия, описанные в этой статье, должны выполняться из клиента Windows. Чтобы узнать, как использовать клиент Linux, OS X или Unix для работы с Hive, используйте селектор вкладок, показанный в верхней части статьи.
Предпосылки
Перед началом работы с этой статьей необходимо иметь следующее:
Кластер Apache Hadoop в HDInsight. См. статью "Начало работы с Hadoop на основе Linux" в HDInsight.
Это важно
По состоянию на 15 сентября 2017 г. пакет SDK HDInsight для .NET поддерживает только возврат результатов запроса Hive из учетных записей хранения Azure. Если вы используете этот пример с кластером HDInsight, использующим Azure Data Lake Storage в качестве основного хранилища, вы не сможете получить результаты поиска с помощью пакета SDK для .NET.
Visual Studio 2013 и далее. Необходимо установить как минимум рабочую нагрузку для .NET desktop development.
Выполнение запроса Hive
Пакет SDK для .NET HDInsight предоставляет клиентские библиотеки .NET, что упрощает работу с кластерами HDInsight из .NET.
Создайте консольное приложение C# в Visual Studio.
В консоли диспетчера пакетов Nuget выполните следующую команду:
Install-Package Microsoft.Azure.Management.HDInsight.Job
Измените приведенный ниже код, чтобы инициализировать значения переменных:
ExistingClusterName, ExistingClusterUsername, ExistingClusterPassword,DefaultStorageAccountName,DefaultStorageAccountKey,DefaultStorageContainerName
Затем используйте измененный код в качестве всего содержимого Program.cs в 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); } } } }
Нажмите клавишу F5, чтобы запустить приложение.
Выходные данные приложения должны выглядеть следующим образом:
Дальнейшие действия
Из этой статьи вы узнали, как отправлять запросы Apache Hive с помощью пакета SDK для .NET и HDInsight. Дополнительные сведения см. в следующих разделах: