Hadoop Лекция 4. Разработка и запуск программ в Hadoop План Запуск программ в Hadoop из командной строки Контроль состояния задач и очереди Hadoop Eclipse Plug-in для Hadoop Karmasphere Studio Запуск программ в Hadoop Запуск и управление работой программ в Hadoop выполняется командой: $ Пример для HDFS: $ bin/hadoop bin/hadoop dfs -ls Без параметров выводится подсказка по доступным командам Команды Hadoop Команда dfs (fs) Назначение Операции с HDFS jar Запустить программу, упакованную в архив Jar CLASSNAME Запустить класс с указанным именем job Управление задачами Hadoop queue Просмотр очереди задач Полный список команд в «Hadoop Command Guide» Пример запуска класса Программа работы с HDFS из лекции 2 Компиляция (нужно установить CLASSPATH): Результат: javac HDFSHelloWorld.java HDFSHelloWorld.class Запуск: $ bin/hadoop Hello, world! HDFSHelloWorld Запуск архива jar Синтаксис: $ bin/hadoop jar jarFile [mainClass] args… Пример: bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+‘ hadoop-examples-*.jar – Имя архива с примерами из дистрибутива Hadoop grep – Имя класса с примером input – Каталог входных данных output – Каталог выходных данных 'dfs[a-z.]+‘ – Шаблон для поиска Примеры в составе Hadoop Готовые примеры: – подсчет количества слов sort, terasort – сортировка randomwriter, teragen – генерация тестовых данных pentomino, sudoku – решатели головоломок wordcount Полный список примеров: $ bin/hadoop jar hadoop-examples-*.jar Открытый исходный код, можно изучать Выходные файлы Результат работы программы Hadoop записывается в файлы вида: part-XXXXX, где XXXXX – номер процесса Reduce Каждый процесс Reduce выводит данные в отдельный файл Для корректной работы необходимо, чтобы каталог для выходных файлов не существовал (Почему?) Основы Jar Jar (Java Archive) – архив Java Использует формат Zip Включает: Программу на Java все необходимые компоненты Манифест (метаданные, включая основной выполняемый класс) Создается командой jar из JDK Команда Jar Синтаксис jar похож на tar Создание архива jar: Создание архива jar из каталога: jar cvf WordCount.jar WordCount.class WordCount$Map.class WordCount$Reduce.class jar cvf WordCount.jar –C WordCount/ . Распаковка архива jar jar xvf WordCount.jar Пример запуска WordCount Компиляция (нужно установить CLASSPATH): Результат: WordCount.class, WordCount$Map.class, WordCount$Reduce.class Создание архива jar: javac WordCount.java jar cvf WordCount.jar WordCount.class WordCount$Map.class WordCount$Reduce.class Запуск: $ bin/hadoop jar WordCount.jar WordCount input output Очередь задач Hadoop В Hadoop задачи запускаются в пакетном режиме Вызов $ bin/hadoop jar ставит задачу в очередь Запуск может быть выполнен не сразу, а через некоторое время Каждый узел кластера имеет ограниченное количество «слотов» JobTracker отслеживает количество свободных слотов и при их наличии запускает задачу Команды работы с очередью Список существующих очередей: $ bin/hadoop queue -list Queue Name : default Queue State : running Scheduling Info : N/A Задачи в очереди: $ bin/hadoop queue -info default -showJobs … Job List JobId State StartTime UserName Priority SchedulingInfo job_201107011004_0009 1 1309503759318 hadoop NORMAL NA job_201107011004_0010 1 1309504015179 hadoop NORMAL NA Просмотр очереди через Web Задача в очереди Управление задачами Команда: $ bin/hadoop job cmd Команда list Назначение Печать списка задач status Сведения о задаче kill Остановить задачу kill-task Остановить task Управление задачами Список работающих задач: $ bin/hadoop job -list 1 jobs currently running JobId State StartTime job_201107011004_0012 1 UserName Priority SchedulingInfo 1309506512793 hadoop NORMAL NA Информация о задаче: $ bin/hadoop job -status job_201107011004_0012 Список всех задач, в том числе завершенных: $ bin/hadoop job -list all Управление задачами через Web Разработка для Hadoop Eclipse plug-in для Hadoop Karmasphere Studio: Eclipse Netbeans Бесплатный вариант: Karmasphere Studio Community Edition Eclipse plug-in для Hadoop Входит в дистрибутив Hadoop1: contrib/eclipse-plugin Plug-in позволяет: Запускать программы на сервере Hadoop из Eclipse Работать с HDFS из Eclipse Установка: Скопировать файл hadoop-eclipse-plugin*.jar в каталог plugins Eclipse 1В текущей версии Hadoop (0.20.2) plugin не работает. Работающий plugin можно скачать по ссылке: http://wiki.apache.org/hadoop/EclipsePlugIn Использование Eclipse plug-in Для компиляции программ нужен дистрибутив Hadoop на компьютере разработчика Создание проекта для Hadoop в Eclipse: Создайте проект «Map/Reduce Project» Укажите имя проекта и путь к дистрибутиву Hadoop Eclipse автоматически подключит нужные библиотеки из диструбутива Hadoop к проекту Использование Eclipse plug-in Подключение к серверу Hadoop Выберите перспективу «Map/Reduce» В нижней части экрана выберите закладку «Map/Reduce Locations» Нажмите кнопку «New Hadoop Location…» Введите данные о кластере или сервере Hadoop Подключение к серверу Hadoop Параметры соединения с Hadoop Location name – имя соединения в Eclipse, может быть любым Map/Reduce Master – адрес (host:port) сервера JobTracker DFS Master – адрес (host:port) сервера имен (NameNode) DFS User name – имя пользователя, не работает в текущей версии (0.20.2 и 0.20.203) Дополнительные параметры соединения с Hadoop hadoop.job.ugi – имя пользователя Hadoop до первой запятой mapred.system.dir – путь в HDFS к общим системным файлам MapReduce (рекомендуется /hadoop/mapred/system) hadoop.tmp.dir – путь к временным каталогам Hadoop (рекомендуется /tmp/hadoop) Работа с HDFS из Eclipse Шаблоны классов Mapper –класс для функции Map Reducer – класс для функции Reduce MapReduce Driver – класс для запуска задачи Hadoop Использование: меню File->New… Шаблоны используют устаревший API Запуск MapReduce программ Запуск MapReduce программ Запуск программы: Правой кнопкой мыши щелкнуть в Project Explorer на имени нужного класса В контекстном меню выбрать пункт Run As -> Run on Hadoop В появившемся окне выбрать сервер Hadoop и нажать Finish В окно консоли выводится лог запуска Результаты работы можно посмотреть в окне HDFS Karmasphere Studio Среда разработки для Hadoop, созданная компанией Karmasphere Варианты: Professional Edition (платный) Community Edition (бесплатный) Поддерживает IDE Eclipse и Netbeans Karmasphere Studio Включает сконфигурированные дистрибутивы Hadoop нескольких версий Ничего дополнительно устанавливать не нужно (исключение: для Windows требуется cygwin) Самый простой способ начать программировать для Hadoop В курсе используется Karmasphere Studio Community Edition для Eclipse При желании допускается использовать платную версию и/или NetBeans Установка Karmasphere Studio Установить Eclipse В файле eclipse.ini прописать параметры: -vmargs -Xmx1024m -XX:MaxPermSize=512m -Dosgi.classloader.lock=classname -Dosgi.requiredJavaVersion=1.6 Зарегистрироваться на сайте karmasphere1 и получить код для Community Edition 1http://www.karmasphere.com/Download/register-for-community-edition.html Установка Karmasphere Studio В меню Eclipse выбрать пункт Help-> Install new software Создать новый репозиторий с Location: http://updates.karmasphere.com/dist/<Ключ>/eclipse/ В появившемся списке выбрать и установить Karmasphere Studio Community Edition Перезапустить Eclipse Установка Karmasphere Studio Использование Karmasphere Karmasphere Studio создает новую перспективу «Hadoop» Новый типа проекта не создается, используется обычный Java проект Библиотеки Hadoop к проекту подключаются вручную из состава Karmasphere Подключение библиотек Основные понятия Karmasphere Workflow – поток работ MapReduce Hadoop Job – задача Hadoop, генерируется автоматически на базе Workflow WordCount в Karmasphere Создайте проект Java Подключите библиотеки Hadoop MapReduce 0.20 Создайте задачу Hadoop MapReduce Job (0.20.2) (File->New->Other->Hadoop 0.20-> Hadoop MapReduce Job (0.20.2) ) Приложение WordCount готово! Используются Mapper и Reducer из состава Hadoop WordCount в Karmasphere WordCount Workflow Мастер для настройки всех фаз MapReduce Код на Java генерируется автоматически Просмотр обработки данных без запуска задачи на Hadoop WordCount Workflow Автоматически сгенерированная задача (фрагмент) public class WordCountJob { public static void main(String[] args) throws Exception { Job job = new Job(); /* Autogenerated initialization. */ initJob(job); /* Custom initialization. */ initCustom(job); /* Tell Task Tracker this is the main */ job.setJarByClass(WordCountJob.class); /* This is an example of how to set input and output. */ FileInputFormat.setInputPaths(job, args[0]); FileOutputFormat.setOutputPath(job, new Path(args[1])); /* You can now do any other job customization. */ // job.setXxx(...); /* And finally, we submit the job. */ job.submit(); job.waitForCompletion(true); } ... Шаблоны классов Karmasphere включает шаблоны классов Mapper, Reducer и др. Собственные классы после создания можно включать в WorkFlow Запуск задач в Karmasphere Karmasphere включает сконфигурированные дистрибутивы Hadoop нескольких версий для локального запуска Поддерживается запуск задач на удаленных кластерах Для запуска нажмите кнопку «Deploy To A Cluster» в Workflow Локальный запуск Подключение к кластеру Настройка соединения с кластером Hadoop выполняется в окне «Hadoop Services» Для запуска задачи на кластере необходимо настроить: Соединение с HDFS, «Remote File Systems» Соединение с кластером, «Remote Clusters» Соединение с HDFS Соединение с HDFS В «Hadoop Services» нажмите правой кнопкой мыши на «Remote Filesystems» и в меню выберите «New Filesystem» Введите имя файловой системы (может быть любым), нажмите «Next» Введите параметры файловой системы: имя и порт сервера имен, версию Hadoop, имя пользователя и группу Hadoop Нажмите «Finish» Просмотр HDFS Соединение с кластером Соединение с кластером В «Hadoop Services» нажмите правой кнопкой мыши на «Remote Clusters» и в меню выберите «New Cluster» Введите имя кластера (может быть любым), выберите версию Hadoop и файловую систему по умолчанию, нажмите «Next» Введите параметры кластера: имя и порт сервера задач, имя пользователя Hadoop Нажмите «Finish» Запуск задачи на кластере Итоги Запуск задач Hadoop из командной строки: Подготовить Jar архив с задачей Запустить командой bin/hadoop jar Задачи Hadoop выполняются в пакетном режиме Просмотр состояния очереди и задач из командной строки bin/hadoop queue и bin/hadoop job Также очередь и состояние задач можно контролировать через Web Среда разработки для Hadoop: Karmasphere для Eclipse (рекомендуется) или NetBeans Eclipse plugin для Hadoop Дополнительные материалы Hadoop Commands Guide Hadoop Eclipse Plug-in http://hadoop.apache.org/common/docs/current/commands_manual.html http://wiki.apache.org/hadoop/EclipsePlugIn Karmasphere Studio Community Edition http://www.karmasphere.com/Products-Information/karmasphere-studiocommunity-edition.html Вопросы?