قم بتشغيل استعلامات Apache Hive باستخدام HDInsight .NET SDK
تعرف على كيفية إرسال استعلامات Apache Hive باستخدام HDInsight .NET SDK. إنك تكتب برنامج C# لإرسال استعلام Hive لإدراج جداول Hive، وعرض النتائج.
إشعار
يجب تنفيذ الخطوات الواردة في هذه المقالة من عميل Windows. للحصول على معلومات حول استخدام عميل Linux أو OS X أو Unix للعمل بـ Apache Hive، قم باستخدام محدد علامات التبويب الموضح في الجزء العلوي من المقالة.
المتطلبات الأساسية
قبل أن تبدأ هذه المقالة، يجب أن تتوفر لديك العناصر التالية:
مجموعة Apache Hadoop في HDInsight. راجع بدء استخدام Hadoop المستند إلى Linux في HDInsight.
هام
اعتبارًا من 15 سبتمبر 2017، يدعم HDInsight.NET SDK فقط نتائج استعلام Hive المرجعة من حسابات «تخزين» Azure. إذا كنت تستخدم هذا المثال مع مجموعة HDInsight التي تستخدم Azure Data Lake Storage بصفتها التخزين الأساسي، لا يمكنك استرداد نتائج البحث باستخدام SDK.NET.
Visual Studio إصدار عام 2013 وما بعدها. يجب على الأقل تثبيت تطوير.NET لحمل العمل على سطح المكتب.
قم بتشغيل استعلام Hive
يوفر HDInsight .NET SDK مكتبات عميل 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 باستخدام HDInsight .NET SDK. لمعرفة المزيد، راجع المقالات التالية: