Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erfahren Sie, wie Sie Apache Hive-Abfragen mit dem HDInsight .NET-SDK übermitteln. Sie schreiben ein C#-Programm, um eine Hive-Abfrage zum Auflisten von Hive-Tabellen zu senden, und die Ergebnisse werden angezeigt.
Hinweis
Die Schritte in diesem Artikel müssen auf einem Windows-Client ausgeführt werden. Informationen zur Verwendung eines Linux-, OS X- oder Unix-Clients für Hive erhalten Sie, indem Sie die Registerkartenauswahl am Anfang des Artikels nutzen.
Voraussetzungen
Bevor Sie mit diesem Artikel beginnen können, benötigen Sie Folgendes:
Einen Apache Hadoop-Cluster in HDInsight. Siehe Erste Schritte bei der Verwendung von Linux-basiertem Hadoop in HDInsight.
Wichtig
Ab dem 15. September 2017 unterstützt das HDInsight .NET SDK nur zurückgegebene Hive-Abfrageergebnisse von Azure Storage-Konten. Wenn Sie dieses Beispiel mit einem HDInsight-Cluster verwenden, der Azure Data Lake Storage als primären Speicher nutzt, können Sie keine Suchergebnisse mit dem .NET SDK abrufen.
Visual Studio 2013 und höher. Mindestens die Workload .NET-Desktopentwicklung muss installiert sein.
Ausführen einer Hive-Abfrage
Das HDInsight .NET SDK enthält .NET-Clientbibliotheken, die das Arbeiten mit HDInsight-Clustern in .NET vereinfachen.
Erstellen Sie in Visual Studio eine C#-Konsolenanwendung.
Führen Sie in der NuGet-Paket-Manager-Konsole den folgenden Befehl aus:
Install-Package Microsoft.Azure.Management.HDInsight.JobBearbeiten Sie den folgenden Code, um die Werte für Variablen zu initialisieren:
ExistingClusterName, ExistingClusterUsername, ExistingClusterPassword,DefaultStorageAccountName,DefaultStorageAccountKey,DefaultStorageContainerName. Verwenden Sie dann den überarbeiteten Code als gesamten Inhalt von 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); } } } }Drücken Sie F5, um die Anwendung auszuführen.
Die Ausgabe der Anwendung sollte Folgendem ähneln:
Nächste Schritte
In diesem Artikel erfahren Sie, wie Sie Apache Hive-Abfragen mit dem HDInsight .NET SDK übermitteln. Weitere Informationen erhalten Sie in den folgenden Artikeln: