Возможно ли развернуть кластер Hadoop в Windows Azure? Конечно же, да, и как вы сможете убедиться, это совсем нетрудно. В этой статье я продемонстрирую порядок того, как создать типовой кластер с серверами Name Node, Job Tracker и управляемым числом Slave-серверов. Вы сможете динамически изменять число Slave-серверов с помощью портала Azure Management Portal. Описание механики этого управления я оставлю на следующий пост. Следуйте следующим шагам для того, чтобы создать пакет Azure для вашего кластера Hadoop с нуля: Файл cluster-config.zip, который вы загрузили ранее содержит все необходимые файлы для конфигурации вашего кластера Hadoop. Вы можете обнаружить в нем знакомые файлы [core|hdfs|mapred]-site.xml. Пока не обращайте на них внимания, я расскажу про их назначение в следующей статье. Отредактируйте файлы *-site.xml согласно требуемым вам параметрам конфигурации кластера. Убедитесь в том, что вы только добавили новые свойства и не изменяли существующие. Создайте новый архив cluster-config.zip, если вы вносили какие либо изменения в конфигурацию кластера. Создайте контейнер с именем bin и загрузите в него все созданные ранее zip-архивы. Используйте для этого свой любимый инструмент, например, ClumsyLeaf’s CloudXplorer. После этого у вас в контейнере должны быть следующие файлы:  Распакуйте проект 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 для установки размера и количества ролей.  Создайте новый сервис для размещения Hadoop в Azure. Проект, который у вас есть, сконфигурирован для возможности удаленного доступа к машинам в кластере. Если вы не меняли конфигурацию проекта, то вам необходимо загрузить сертификат AzureHadoop.pfx в корень проекта вашего сервиса. Пароль для сертификата – hadoop. Размещение не будет завершено успешно, если у вас не будет этого сертификата. Если вы используете Visual Studio 2010, вы можете разместить проект просто нажав правой кнопкой мыши на проекте и выбрав команду Deploy. Если вы не используете VS2010, то просто запустите buildPackage.cmd из корня проекта с помощью консольного инструмента Windows Azure SDK Command Prompt. Вы получите пакет Hadoop.cspkg для размещения в Azure с помощью Azure Management Portal. Разместите ваш сервис в Azure. Подождите окончания размещения и вы увидите что-то похожее на эту структуру:  Теперь, когда все настроено и работает, вы можете перейти на страницу 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! Кластер полнофункциональный. Вы можете выполнить любую задачу какую пожелаете. Кроме того, вы можете использовать Azure Management Portal для динамической смены числа Slave-узлов. Hadoop обнаружит новый или удаленный узел или узлы и соответственно переконфигурирует кластер.  Я добавил дополнительный Slave-узел:  И мой кластер соответственно изменился:  Если вы уже использовали Hadoop на практике, то знаете, что требуется несколько дополнительных шагов для подготовки Name Node, в основном для обеспечения отказоустойчивости. Это отдельная тема, которую я планирую обсудить в следующей статье. Если вы не хотите ждать и хотите сами установить узел для бэкапа и или checkpoint-узел, то вперед, это может быть частью решения. Использование Azure Drive может быть другой частью решения. И дайте мне знать о своем опыте использования Hadoop в Windows Azure. Chief Architect