Статьи

Microsoft и Hadoop — Windows Azure HDInsight

Вступление

Традиционно Microsoft Windows была своего рода пасынком в мире Hadoop — команда ‘hadoop’ для управления действиями из командной строки и сценарии запуска / выключения были написаны в Linux / * nix с учетом bash. Таким образом, если вы хотите запустить Hadoop в Windows, вам нужно было установить Cygwin.

 Также в документе Apache Hadoop говорится следующее (цитаты из документации по Hadoop R1.1.0):
«• GNU / Linux поддерживается как платформа для разработки и производства. Hadoop был продемонстрирован на кластерах GNU / Linux с 2000 узлами.
• Win32 поддерживается в качестве платформы разработки. Распределенная операция не была хорошо протестирована на Win32, поэтому она не поддерживается как производственная платформа ».

Microsoft и Hortonworks объединили свои усилия, чтобы сделать Hadoop доступным на Windows Server для локальных развертываний, а также на Windows Azure для поддержки больших данных в облаке.

Этот пост посвящен Windows Azure HDInsight (Hadoop для Azure, см. Https://www.hadooponazure.com ). На момент написания, сервису требуется приглашение для участия в CTP (Community Technology Preview), но процесс приглашения очень эффективно управляется — после заполнения опроса я получил код доступа к сервису в течение нескольких дней.

Новый запрос кластера

Первым шагом является запрос нового кластера, вам необходимо определить имя кластера и учетные данные, чтобы иметь возможность войти в головной узел. По умолчанию кластер состоит из 3 узлов.

Через несколько минут у вас будет запущенный кластер, затем нажмите ссылку «Перейти к кластеру», чтобы перейти на главную страницу.

WordCount с HDInsight в Azure

Ни один тест Hadoop не обходится без стандартного приложения WordCount — Microsoft Azure HDInsight предоставляет файл примера (davinci.txt) и файл jar Java для запуска wordcount — Hello World of Hadoop.

Сначала вам нужно перейти на консоль JavaScript, чтобы загрузить текстовый файл с помощью fs.put ():

js> fs.put()

Choose File ->  Browse
Destination: /user/istvan/example/data/davinci

Создать работу:

CreateJob

Фактическая команда, которую выполняет Microsoft Azure HDInsight, выглядит следующим образом:

c:\apps\dist\hadoop-1.1.0-SNAPSHOT\bin\hadoop.cmd jar c:\apps\Jobs\templates\634898986181212311.hadoop-examples-1.1.0-SNAPSHOT.jar wordcount /user/istvan/example/data/davinci davinci-output

Вы можете проверить вывод из консоли JavaScript:

js> result = fs.read("davinci-output")
"(Lo)cra"	1
"1490	1
"1498,"	1
"35"	1
"40,"	1
"AS-IS".	1
"A_	1
"Absoluti	1
"Alack!	1

Microsoft HDInsight Streaming — задание Hadoop в C #

Hadoop Streaming — это утилита для поддержки запуска внешней карты и сокращения рабочих мест. Эти внешние задания могут быть написаны на разных языках программирования, таких как Python или Ruby — если мы поговорим о Microsoft HDInsight, пример лучше основывать на .NET C #…

Демонстрационное приложение для потоковой передачи C # снова является примером WordCount с использованием имитации команд Unix cat и wc. Вы можете запустить демонстрацию из плитки «Samples», но я предпочитаю демонстрировать Hadoop Streaming из командной строки, чтобы ближе рассмотреть происходящее под капотом.

Чтобы запустить командную строку Hadoop из командной строки Windows, необходимо войти в головной узел HDInsight с помощью удаленного рабочего стола. Сначала вам нужно нажать на плитку «Удаленный рабочий стол», затем войти в систему на удаленном узле, используя учетные данные, которые вы определили во время создания кластера. После входа в систему нажмите на ярлык Hadoop Coomand Line.

В командной строке Hadoop перейдите в каталог распространения Hadoop (на момент написания этого поста Microsoft Azure HDInsight основан на Hadoop 1.1.0):

c:> cd \apps\dist
c:> hadoop fs -get /example/apps/wc.exe .
c:> hadoop fs -get /example/apps/cat.exe .
c:> cd \apps\dist\hadoop-1.1.0-SNAPSHOT
c:\apps\dist\hadoop-1.1.0-SNAPSHOT> hadoop jar lib\hadoop-streaming.jar -input "/user/istvan/example/data/davinci" -output "/user/istvan/example/dataoutput" -mapper "..\..\jars\cat.exe" -reducer "..\..\jars\wc.exe" -file "c:\Apps\dist\wc.exe" -file "c:\Apps\dist\cat.exe"

Код C # для wc.exe выглядит следующим образом:

using System;
using System.IO;
using System.Linq;

namespace wc
{
    class wc
    {
        static void Main(string[] args)
        {
            string line;
            var count = 0;

            if (args.Length > 0){
                Console.SetIn(new StreamReader(args[0]));
            }

            while ((line = Console.ReadLine()) != null) {
                count += line.Count(cr => (cr == ' ' || cr == '\n'));
            }
            Console.WriteLine(count);
        }
    }
}

И код для cat.exe:

using System;
using System.IO;

namespace cat
{
    class cat
    {
        static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                Console.SetIn(new StreamReader(args[0])); 
            }

            string line;
            while ((line = Console.ReadLine()) != null) 
            {
                Console.WriteLine(line);
            }

        }

    }
}

Интерактивная консоль

Microsoft Azure HDInsight поставляется с двумя типами интерактивных консолей: одна — стандартная консоль Hadoop Hive, другая — уникальная в мире Hadoop, она основана на JavaScript.

Давайте начнем с улья. Вам необходимо загрузить свои данные, используя метод javascript fs.put (), как описано выше. Затем вы можете создать свою таблицу Hive и выполнить запрос на выборку следующим образом:

CREATE TABLE stockprice (yyyymmdd STRING, open_price FLOAT, high_price FLOAT, low_price FLOAT, close_price FLOAT, stock_volume INT, adjclose_price FLOAT)
row format delimited fields terminated by ',' lines terminated by '\n' location '/user/istvan/input/';

select yyyymmdd, high_price, stock_volume from stockprice order by high_price desc;

InteractiveHive

InteractiveHive-Select

Другая разновидность интерактивной консоли HDInsight основана на JavaScript — как уже было сказано, это уникальное предложение от Microsoft — на самом деле команды JavaScript преобразуются в операторы Pig.

JavascriptConsole

Синтаксис напоминает запрос типа LINQ, но не тот же:

js> pig.from("/user/istvan/input/goog_stock.csv", "date,open,high,low,close,volume,adjclose", ",").select("date, high, volume").orderBy("high DESC").to("result")

js> result = fs.read("result")
05/10/2012	774.38	2735900
04/10/2012	769.89	2454200
02/10/2012	765.99	2790200
01/10/2012	765	3168000
25/09/2012	764.89	6058500

Под капотом

Microsoft и Hortonworks повторно внедрили ключевые двоичные файлы (namenode, jobtracker, secondnamenode, datanode, tasktracker) в виде исполняемых файлов (exe-файлов), и они работают в качестве служб в фоновом режиме. Ключевая команда ‘hadoop’ — которая традиционно является скриптом bash — также повторно реализована как hadoop.cmd.

Распределение состоит из Hadoop 1.1.0, Pig-0.9.3, Hive 0.9.0, Mahout 0.5 и Sqoop 1.4.2.