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