company_banner

Запуск и работа с Hadoop в Windows Azure

Автор оригинала: Mario Kosmiskas
  • Перевод

imageimage 



Возможно ли развернуть кластер Hadoop в Windows Azure? Конечно же, да, и как вы сможете убедиться, это совсем нетрудно.



В этой статье я продемонстрирую порядок того, как создать типовой кластер с серверами Name Node, Job Tracker и управляемым числом Slave-серверов. Вы сможете динамически изменять число Slave-серверов с помощью портала Azure Management Portal. Описание механики этого управления я оставлю на следующий пост.



Следуйте следующим шагам для того, чтобы создать пакет Azure для вашего кластера Hadoop с нуля:



Загрузка необходимых инструментов

  • этот шаблон проекта для Visual Studio 2010 сконфигурирован по умолчанию с ролями для каждого компонента кластера Hadoop. Если у вас нет Visual Studio или вы не хотите установить бесплатную Express-версию, вы сможете выполнить всю работу из командной строки;
  • шаблоны конфигурации кластера;
  • установите последнюю версию Azure SDK, на момент написания (и перевода) этой статьи – это была версия 1.4;
  • Бинарные компоненты Hadoop. Я использовал версию 0.21. Hadoop распространяется в виде файла tar.gz, вам потребуется сконвертировать его в ZIP-архив, для чего вы можете использовать бесплатный архиватор 7-zip;
  • теперь вам потребуется установить Cygwin, а затем упаковать его в zip-архив. Hadoop 0.21 требует Cygwin под Windows. Ничего страшного, если вы ничего не знаете про Cygwin, Hadoop использует его сам, так что вам даже не придется самостоятельно запускать его. В будущем, вероятно, Hadoop 0.22 лишится этой зависимости, но пока эта версия еще не готова. Просто запустите инсталятор Cygwin и примите все установленные по умолчанию параметры в мастере установки. Cygwin будет установлен в папку C:\сygwin, упакуйте эту папку в архив cygwin.zip;
  • загрузите последнюю версию Yet Another Java Service Wrapper. На момент написания статьи, это была версия Beta-10.6;
  • последний компонент, который вам потребуется – это виртуальная Java-машина для запуска Hadoop и YAJSW. Если вы не захотите обновлять конфигурационные файлы представленные в этом руководстве, то вам потребуется упаковать вашу любимую JVM в zip-архив под названием jdk.zip. Все файлы JVM могут быть найдены по адресу C:\Program Files\Java\jdk1.6.0_<номер ревизии>\. Вам необходимо скопировать все файлы из этой папки в папку jdk и упаковать ее в zip-архив.

Конфигурирование вашего кластера


Файл cluster-config.zip, который вы загрузили ранее содержит все необходимые файлы для конфигурации вашего кластера Hadoop. Вы можете обнаружить в нем знакомые файлы [core|hdfs|mapred]-site.xml. Пока не обращайте на них внимания, я расскажу про их назначение в следующей статье. Отредактируйте файлы *-site.xml согласно требуемым вам параметрам конфигурации кластера. Убедитесь в том, что вы только добавили новые свойства и не изменяли существующие.



Создайте новый архив cluster-config.zip, если вы вносили какие либо изменения в конфигурацию кластера.



Загрузка всех компонент на Azure Storage


Создайте контейнер с именем bin и загрузите в него все созданные ранее zip-архивы. Используйте для этого свой любимый инструмент, например, ClumsyLeaf’s CloudXplorer. После этого у вас в контейнере должны быть следующие файлы:



image



Конфигурирование размещения на Azure


Распакуйте проект Visual Studio 2010. Далее вы можете использовать либо Visual Studio 2010 либо любой текстовый редактор. Я включил пакетный файл в шаблон для тех из вас, кто будет использовать командную строку.



Если вы используете Visual Studio, то вам потребуется изменить только один файл NameNode\SetEnvironment.cmd. Он находится среди прочих файлов проектов. Если вы не используете Visual Studio, то вам потребуется изменить этот файл по трем прочим путям NameNode\bin\Debug, JobTracker\bin\Debug и Slaves\bin\Debug. Воспользуйтесь своим ключом доступа к вашей учетной записи хранилища Azure и постройте строку соединения, затем замените ею текст [your connection string] в первой строке файлов SetEnvironment.cmd. Строка соединения Azure имеет следующий формат:



DefaultEndpointsProtocol=http;AccountName=[your_account_name];AccountKey=[key]



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



Размещение в Azure будет настроено на использование одной роли Large для Name Node, одной роли Large для Job Tracker и 4 роли Extra Large для Slave-узлов. Если вас устраивает такая конфигурация, то переходите к следующему шагу. Если вы, наоборот, хотите изменить конфигурацию ролей, то воспользуйтесь возможностью Visual Studio по конфигурации ролей либо или отредактируйте вручную файлы HadoopAzure\ServiceDefinition.csdef и HadoopAzure\ServiceConfiguration.cscfg для установки размера и количества ролей.



Размещение вашего кластера в Azure


Создайте новый сервис для размещения Hadoop в Azure. Проект, который у вас есть, сконфигурирован для возможности удаленного доступа к машинам в кластере. Если вы не меняли конфигурацию проекта, то вам необходимо загрузить сертификат AzureHadoop.pfx в корень проекта вашего сервиса. Пароль для сертификата – hadoop. Размещение не будет завершено успешно, если у вас не будет этого сертификата.



Если вы используете Visual Studio 2010, вы можете разместить проект просто нажав правой кнопкой мыши на проекте и выбрав команду Deploy. Если вы не используете VS2010, то просто запустите buildPackage.cmd из корня проекта с помощью консольного инструмента Windows Azure SDK Command Prompt. Вы получите пакет Hadoop.cspkg для размещения в Azure с помощью Azure Management Portal.



Разместите ваш сервис в Azure. Подождите окончания размещения и вы увидите что-то похожее на эту структуру:



image



Использование вашего кластера Hadoop


Теперь, когда все настроено и работает, вы можете перейти на страницу Name Node Summary. URL для этой страницы будет


httр://<имя вашего сервиса>.cloudapp.net:50070



image



Если вы перейдете по ссылке “Browse the filesystem”, то Hadoop построит для вас URL с IP-адресом одного из вашего Slave-узла. В таком видео URL недоступен для навигации, так что вам необходимо заменить IP-адрес в нем на строку <имя вашего сервиса>.cloudapp.net. После этого вы сможете перейти к структуре файловой системы:



image



Давайте запустим одну из демонстрационных задач, которые поставляются с Hadoop, для того, чтобы убедиться что кластер работает. Согласно текущей конфигурации, вам необходимо произвести логин в Job Tracker для запуска новой задачи. В следующих статьях я расскажу про альтернативы этому шагу (подсказка – Azure Connect).



Вернитесь Azure Management Portal и перейдите с помощью RDP на Job Tracker, выбрав его и нажав Connect на панели управления. Используйте логин hadoop и пароль H1Doop. После того, как вы подключитесь откройте панель командной строки и выполните несколько команд:


E:\AppRoot\SetEnvironment.cmd


cd /d %HADOOP_HOME%



image



Теперь вы можете запустить задачу. Я совместил скрипты для Hadoop, так что вам не придется иметь дел с Cygwin при запуске задач. Синтаксис команды такой же как и при выполнении обычных скриптов. Давайте запустим простую команду:


bin\hadoop jar hadoop-mapred-examples-0.21.0.jar pi 20 200



Если теперь вы перейдете на страницу Job Tracker вы увидите, что задача запущена. URL — httр://<имя вашего сервиса>.cloudapp.net:50030.



image



Поздравляю, вы только что запустили первую задачу Hadoop на Windows Azure!



Что я могу сделать со своим кластером Hadoop?


Кластер полнофункциональный. Вы можете выполнить любую задачу какую пожелаете. Кроме того, вы можете использовать Azure Management Portal для динамической смены числа Slave-узлов. Hadoop обнаружит новый или удаленный узел или узлы и соответственно переконфигурирует кластер.



Я добавил дополнительный Slave-узел:



image



И мой кластер соответственно изменился:



image



Если вы уже использовали Hadoop на практике, то знаете, что требуется несколько дополнительных шагов для подготовки Name Node, в основном для обеспечения отказоустойчивости. Это отдельная тема, которую я планирую обсудить в следующей статье. Если вы не хотите ждать и хотите сами установить узел для бэкапа и или checkpoint-узел, то вперед, это может быть частью решения. Использование Azure Drive может быть другой частью решения.



И дайте мне знать о своем опыте использования Hadoop в Windows Azure.

  • +14
  • 4,9k
  • 3
Microsoft
384,00
Microsoft — мировой лидер в области ПО и ИТ-услуг
Поделиться публикацией

Комментарии 3

    +1
    Можно уточнить на счет профита, который получили в данном случае? Получилось выгоднее чем арендовать Linux-инстанции Amazon EC 2 и запускать все на родном Linux без сygwin?
      0
      Хотя опять же — кому нужна именно Windows-машина — вопрос не актуален.
      0
      Конечно можно и так, но из опыта использования наиболее просто разворачивается hadoop от cloudera под linux, достаточно прописать репозитории и пару командами у вас стоят все компоненты.
      Вопросы остаются только с конфиг файлами.
      С амазоном дел не имел, разворачивал внутренний сервис на hadoop.

      По поводу кому нужен hadoop под win, то случаи разные бывают, да и в 0.22 патчи уже смержены, основная функциональность от cygwin это, как не смешно бы звучало: выдача свободного места на диске и сколько уже занято. Да, ява до сих пор не умеет этого, поэтому для lin используются вызовы через шел скрипты и bash (для этого если захочешь развернуть под фрёй надо ставишь на машины дополнительно баш, или патчить хадуп), а под виндой раньше был cygwin, сейчас всё это обернули внутрь jni.

      но в любом случае разворачивание под linux намного проще «этого».

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое