Hadoop Лекция 4. Разработка и запуск программ в Hadoop
План Запуск программ в Hadoop из командной строки Контроль состояния задач и очереди Hadoop Eclipse Plug-in для Hadoop Karmasphere Studio
Запуск программ в Hadoop Запуск и управление работой программ в Hadoop выполняется командой: $ bin/hadoop Пример для HDFS: $ bin/hadoop dfs -ls Без параметров выводится подсказка по доступным командам
Команды Hadoop Полный список команд в «Hadoop Command Guide» КомандаНазначение dfs (fs) Операции с HDFS jar Запустить программу, упакованную в архив Jar CLASSNAME Запустить класс с указанным именем job Управление задачами Hadoop queue Просмотр очереди задач
Пример запуска класса Программа работы с HDFS из лекции 2 Компиляция (нужно установить CLASSPATH): javac HDFSHelloWorld.java Результат: HDFSHelloWorld.class Запуск: $ bin/hadoop HDFSHelloWorld Hello, world!
Запуск архива 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 Готовые примеры: wordcount – подсчет количества слов sort, terasort – сортировка randomwriter, teragen – генерация тестовых данных pentomino, sudoku – решатели головоломок Полный список примеров: $ 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 cvf WordCount.jar WordCount.class WordCount$Map.class WordCount$Reduce.class Создание архива jar из каталога: jar cvf WordCount.jar –C WordCount/. Распаковка архива jar jar xvf WordCount.jar
Пример запуска WordCount Компиляция (нужно установить CLASSPATH): javac WordCount.java Результат: WordCount.class, WordCount$Map.class, WordCount$Reduce.class Создание архива jar: 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_ _ hadoop NORMAL NA job_ _ 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 UserName Priority SchedulingInfo job_ _ hadoop NORMAL NA $ bin/hadoop job -status job_ _0012 $ bin/hadoop job -list all
Управление задачами через Web
Разработка для Hadoop Eclipse plug-in для Hadoop Karmasphere Studio: Eclipse Netbeans Бесплатный вариант: Karmasphere Studio Community Edition
Eclipse plug-in для Hadoop Входит в дистрибутив Hadoop 1 : contrib/eclipse-plugin Plug-in позволяет: Запускать программы на сервере Hadoop из Eclipse Работать с HDFS из Eclipse Установка: Скопировать файл hadoop-eclipse-plugin*.jar в каталог plugins Eclipse 1 В текущей версии Hadoop (0.20.2) plugin не работает. Работающий plugin можно скачать по ссылке:
Использование 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 – имя пользователя, не работает в текущей версии ( и )
Дополнительные параметры соединения с 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 программ
Запуск программы: Правой кнопкой мыши щелкнуть в 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 Зарегистрироваться на сайте karmasphere 1 и получить код для Community Edition 1
Установка Karmasphere Studio В меню Eclipse выбрать пункт Help-> Install new software Создать новый репозиторий с Location: /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
В «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 Karmasphere Studio Community Edition community-edition.html community-edition.html
Вопросы?