Возможно ли развернуть кластер 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. После этого у вас в контейнере должны быть следующие файлы:
Конфигурирование размещения на 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. Подождите окончания размещения и вы увидите что-то похожее на эту структуру:
Использование вашего кластера Hadoop
Теперь, когда все настроено и работает, вы можете перейти на страницу Name Node Summary. URL для этой страницы будет
httр://<имя вашего сервиса>.cloudapp.net:50070
Если вы перейдете по ссылке “Browse the filesystem”, то Hadoop построит для вас URL с IP-адресом одного из вашего Slave-узла. В таком видео URL недоступен для навигации, так что вам необходимо заменить IP-адрес в нем на строку <имя вашего сервиса>.cloudapp.net. После этого вы сможете перейти к структуре файловой системы:
Давайте запустим одну из демонстрационных задач, которые поставляются с Hadoop, для того, чтобы убедиться что кластер работает. Согласно текущей конфигурации, вам необходимо произвести логин в Job Tracker для запуска новой задачи. В следующих статьях я расскажу про альтернативы этому шагу (подсказка – Azure Connect).
Вернитесь Azure Management Portal и перейдите с помощью RDP на Job Tracker, выбрав его и нажав Connect на панели управления. Используйте логин hadoop и пароль H1Doop. После того, как вы подключитесь откройте панель командной строки и выполните несколько команд:
E:\AppRoot\SetEnvironment.cmd
cd /d %HADOOP_HOME%
Теперь вы можете запустить задачу. Я совместил скрипты для Hadoop, так что вам не придется иметь дел с Cygwin при запуске задач. Синтаксис команды такой же как и при выполнении обычных скриптов. Давайте запустим простую команду:
bin\hadoop jar hadoop-mapred-examples-0.21.0.jar pi 20 200
Если теперь вы перейдете на страницу Job Tracker вы увидите, что задача запущена. URL — httр://<имя вашего сервиса>.cloudapp.net:50030.
Поздравляю, вы только что запустили первую задачу Hadoop на Windows Azure!
Что я могу сделать со своим кластером Hadoop?
Кластер полнофункциональный. Вы можете выполнить любую задачу какую пожелаете. Кроме того, вы можете использовать Azure Management Portal для динамической смены числа Slave-узлов. Hadoop обнаружит новый или удаленный узел или узлы и соответственно переконфигурирует кластер.
Я добавил дополнительный Slave-узел:
И мой кластер соответственно изменился:
Если вы уже использовали Hadoop на практике, то знаете, что требуется несколько дополнительных шагов для подготовки Name Node, в основном для обеспечения отказоустойчивости. Это отдельная тема, которую я планирую обсудить в следующей статье. Если вы не хотите ждать и хотите сами установить узел для бэкапа и или checkpoint-узел, то вперед, это может быть частью решения. Использование Azure Drive может быть другой частью решения.
И дайте мне знать о своем опыте использования Hadoop в Windows Azure.