Статьи

Краткое введение в Hadoop Hive в Azure и запрос к Hive с использованием LINQ в C #

Ранее в нескольких статьях, связанных с 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.