Ранее в нескольких статьях, связанных с Hadoop в Azure — анализом некоторых «больших данных» с использованием C # и извлечением 500 самых популярных ссылок MSDN из переполнения стека, — я показал, как использовать C # Map Reduce Jobs с Hadoop Streaming для выполнения значимой аналитики.
Теперь доступна предварительная версия .NET SDK для Hadoop , облегчающая работу с Hadoop из .NET — с большим количеством типов для поддержки заданий Map Reduce, для создания запросов LINQ to Hive и т. Д. Вы можете экспериментировать с Hadoop и C # либо создав кластер на http://hadooponazure.com, либо вы можете получить Hadoop на своем компьютере, установив Microsoft HDInsight с помощью WebPI.
В случае , если вы новичок в Hadoop на Azure, я предлагаю вам прочитать вводные понятия здесь , прежде чем начать. Этот пост является лишь кратким примером того, как использовать LINQ to Hive.
Hive — это система хранения данных для Hadoop, которая упрощает обобщение данных, специальные запросы и анализ больших наборов данных, хранящихся в совместимых с Hadoop файловых системах.
Установка библиотек
Для начала вы можете запустить Visual Studio, создать консольный проект и установить библиотеки Microsoft.Hadoop.Hive через Nuget.
install-package Microsoft.Hadoop.Hive -pre
Кроме того, зайдите на http://hadoopoonazure.com и создайте новый кластер. И вы сейчас настроены.
Создание набранных оберток
Чтобы получить доступ к Hive, вам нужно создать строго типизированную оболочку — на данный момент вам нужно развернуть ее самостоятельно, так как нет поддержки автоматической генерации. Когда вы предоставляете кластер Hadoop, Hive будет предварительно заполнен образцом таблицы ( hivesampletable ), и я использую то же самое для приведенного ниже примера для краткости. Вы можете подключиться к Hive через ODBC и просмотреть таблицы кустов в Excel.
Итак, давайте продолжим и создадим соединение улья (очень похожее на контекст данных EF) и типизированное представление для строки в таблице. Типы HiveConnection и HiveTable находятся в пространстве имен Microsoft.Hadoop.Hive.
//Our concrete hive connection public class SampleHiveConnection : HiveConnection { public SampleHiveConnection(string hostName, int port) : base(hostName, port, null, null) { } public SampleHiveConnection(string hostName, int port, string username, string password) : base(hostName, port, username, password) { } public HiveTable<DeviceInfo> DeviceInfoTable { get { return this.GetTable<DeviceInfo>("hivesampletable"); } } } //A typed row. Property names based on field names hivesampletable public class DeviceInfo : HiveRow { public string DevicePlatform { get; set; } public string DeviceMake { get; set; } public int ClientId { get; set; } }
Опрос улья с помощью LINQ
Теперь вы можете выполнять LINQ-запросы к своему контексту Hive благодаря Hadoop SDK, который мы установили через Nuget. Просто замените строку подключения, имя пользователя и пароль своим собственным.
class Program { static void Main(string[] args) { //Create a hive connection //I've my cluster in https://www.hadooponazure.com var hive = new SampleHiveConnection( "saintcluster.cloudapp.net", //your connection string 10000, //port "user", //your username "yourpass"); //your password //Get the results //Make sure you goto the dashboard and turn on the ODBC port var res = from d in hive.DeviceInfoTable where d.ClientId < 100 select d; //Dump it to the console if you like var list = res.ToList(); } }
Это круто. Ваш запрос LINQ будет отправлен в кластер Azure через драйвер ODBC, а затем будет скомпилирован и выполнен в Hive.