Hadoop для разработчика
Для разработки приложений, работающих с использованием Hadoop, или же алгоритмов для MapReduce framework’а совсем не нужен полномасштабный кластер. На самом же деле для запуска всей системы, описанной мной в одном из предыдущих постов, вполне достаточно одного компьютера и буквально минут 15 свободного времени, как потратить их для решения этой задачи я Вам и поведаю.
Рассказывать я буду на примере своего Gentoo Linux, но большая часть этого повествования будет справедлива и для других unix-like операционных систем.
Подготовка
Перед тем, как приступить собственно говоря к установке Hadoop, необходимо выполнить два элементарных действия, необходимых для правильного функционирования системы:
- открыть доступ одному из пользователей по ssh к этому же компьютеру без пароля, можно например создать отдельного пользователя для этого [hadoop]:
useradd -m -n hadoop
Далее действия выполняем от его имени:
su hadoop
Генерируем RSA-ключ для обеспечения аутентификации в условиях отсутствия возможности использовать пароль:
hadoop@localhost ~ $ ssh-keygen -t rsa -P "" Generating public/private rsa key pair. Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): Your identification has been saved in /home/hadoop/.ssh/id_rsa. Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub. The key fingerprint is: 7b:5c:cf:79:6b:93:d6:d6:8d:41:e3:a6:9d:04:f9:85 hadoop@localhost
И добавляем его в список авторизованных ключей:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Этого должно быть более чем достаточно, проверить работоспособность соединения можно просто написав:
ssh localhost
Не забываем предварительно инициализировать sshd:
/etc/init.d/sshd start
- Помимо этого необходимо убедиться в наличии установленной JVM версии 1.5.0 или выше, а также узнать директорию, где она располагается, вариантов сделать это множество, я нашел ее просто заглянув в самое логичное место — /usr/lib, но при желании никто не может Вам помешать воспользоваться услугами, например, slocate. Найденную директорию с JVM лучше запомнить или записать куда-нибудь, для меня она оказалась:
/usr/lib/jvm/sun-jdk-1.6
Установка
Установка начинается с получения копии исходного кода системы, способов для этого существует несколько. Я перепробовал практически все, самую адекватную версию мне удалось получить из SVN. Для ее получения необходимо выполнить следующую команду:
svn checkout http://svn.apache.org/repos/asf/hadoop/core/branches/branch-0.16 ~
branch-0.16 — последняя доступная версия на данный момент, для определения ее номера достаточно заглянуть по тому же адресу браузером. Предполагается, что Hadoop будет располагаться прямо в /home/hadoop, но запросто можно использовать и другую директорию.
Сразу же стоит скомпилировать различные дополнительные компоненты системы, особенно это актуально из-за HBase, но и помимо него соберется много чего интересного, например plug-in для отличной IDE под названием Eclipse или Hadoop On Demand. Задача также элементарна:
cd ~
ant clean jar compile-contrib
Настройка
Конфигурационные файлы можно редактировать в произвольном порядке, самое главное ничего не забыть
- conf/hadoop-env.sh
# The java implementation to use. Required. export JAVA_HOME=/usr/lib/jvm/sun-jdk-1.6
Единственная обязательная переменная окружения — JAVA_HOME, здесь как раз пригодится заранее найденный путь до JVM, все остальное — по желанию.
- conf/hadoop-site.xml
hadoop.tmp.dir /home/hadoop/data/${user.name} A base for other temporary directories. fs.default.name hdfs://localhost:54310 The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem. mapred.job.tracker localhost:54311 The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task. dfs.replication 1 Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time. Этот конфигурации файл является одним из ключевых, таким образом он выглядит для конфигурации, состоящей из одного компьютера (позаимствован из англоязычного мануала на ту же тему).
- src/contrib/hbase/conf/hbase-site.xml
hbase.master localhost:60000 The host and port that the HBase master runs at hbase.rootdir /hbase location of HBase instance in dfs Как не сложно заметить, этот файл необходим для функционирования HBase, по-моему все просто и очевидно, <description> говорят сами за себя.
Запуск
Начать стоит с ознакомления с кратким описанием доступных команд Hadoop, сделать это можно просто набрав ~/bin/hadoop:
Usage: hadoop [--config confdir] COMMAND where COMMAND is one of: namenode -format format the DFS filesystem secondarynamenode run the DFS secondary namenode namenode run the DFS namenode datanode run a DFS datanode dfsadmin run a DFS admin client fsck run a DFS filesystem checking utility fs run a generic filesystem user client balancer run a cluster balancing utility jobtracker run the MapReduce job Tracker node pipes run a Pipes job tasktracker run a MapReduce task Tracker node job manipulate MapReduce jobs version print the version jarrun a jar file distcp copy file or directories recursively daemonlog get/set the log level for each daemon or CLASSNAME run the class named CLASSNAME Most commands print help when invoked w/o parameters.
Первым делом необходимо отформатировать Namenode:
~/bin/hadoop namenode -format
И дело останется лишь за малым, запустить на выполнение пару bash-скриптов, которые без вашего дальнейшего участия инициализируют всю систему, включая HBase:
~/bin/hadoop/start-all.sh && ~/src/contrib/hbase/bin/start-hbase.sh
Как только они закончат все необходимые действия, у Вас появится возможность удостовериться, что все в порядке. Самым простым способом является запуск клиента Hbase Shell:
~/bin/src/contrib/hbase/bin/hbase shell
Если в ответ Вы получили соответствующее приглашение клиента, значит все было сделано верно!
Вот собственно говоря и все, псевдо-кластер функционирует, доступ к HBase имеется, можно приступать к разработке
P.S.: Остановка системы производится по тому же принципу скриптами stop-all.sh и stop-hbase.sh.
21 comments
Вопрос в том, для каких задач можно использовать Hadoop, кроме индексов… Есть какие-нибудь статьи с разными примерами использования MapReduce?
2Dima
Для задач обработки очень большого количества данных.
Например, статистика или обработка логов (например клсатер из 1K машин в Yahoo! занимается пока только этим).
С индексами, кстати, не столь все просто, мы хорошенько так подза***ись
отличная статья, как раз то чего мне не хватало
если не заломает
может быть напишите пару примеров как все такие работает клиент Hadoop? собственно как на практике выглядит запуск задач?
хотя бы в той же Hbase shell >
[quote comment="271"]Вопрос в том, для каких задач можно использовать Hadoop, кроме индексов… Есть какие-нибудь статьи с разными примерами использования MapReduce?[/quote]Все ограничивается лишь воображением, документации и примеров крайне мало (по крайней мере той ее части, что мне удалось найти в интернете), но примеры, идущие «в комплекте» в состоянии подтолкнуть на несколько неплохих идей. Самый простой и наглядный пример, по-моему: вычисление больших облаков тэгов.
[quote comment="276"]может быть напишите пару примеров как все такие работает клиент Hadoop? собственно как на практике выглядит запуск задач?
хотя бы в той же Hbase shell >[/quote]Запуск задач выглядит ничуть не сложнее, чем запуск любой другой программы — просто консольная команда, в которой обычно указываются все компоненты работы: обработчики данных для этапов Map и Reduce, исходные данные, место для расположения результатов. Но дело-то не в запуске задач, а в написании программ, которые будут обрабатывать данные. Практика написания таких программ для Hadoop у меня минимально, так что от каких-либо более детальных комментариев пока воздержусь (хотя никто не мешает посмотреть исходники примеров — так все более чем ясно и очевидно).
Hbase Shell мало чем отличается от подобных консольных клиентов других СУБД, так что он скорее предназначен для ручного получения результатов запросов; для автоматизированный работы стоит использовать другие интерфейсы HBase, например REST.
Примеров действительно мало, как и документации. Как-то хадуп варится все больше в своем котле )
Из документации действительно хороши исходники, а они у hadoop/lucene/nutch очень неплохо написаны, по javadoc вполне можно сориентироваться что к чему.
также добавлю вот эту презентацию (если не видели), про то, как mapred можно красиво использовать:
http://wiki.apache.org/nutch-data/attachments/Presentations/attachments/mapred.pdf
[quote comment="281"]также добавлю вот эту презентацию (если не видели), про то, как mapred можно красиво использовать[/quote]Спасибо, презентация пришлась «в тему». Кратко и содержательно.
Саму ее раньше не видел, но большую часть информации из нее я уже встречал, на том же apache.org вроде.
[...] также интересные обзоры Ивана Блинкова “Hadoop для разработчика” и “Hadoop“. —> Вы можете Оставить комментарий (0) [...]
[...] также интересные обзоры Ивана Блинкова “Hadoop для разработчика” и [...]
Ошибка в команде инициализации. Нужно:
bin/start-all.sh && ~/src/contrib/hbase/bin/start-hbase.sh
[quote comment="327"]Ошибка в команде инициализации. Нужно:
bin/start-all.sh && ~/src/contrib/hbase/bin/start-hbase.sh[/quote]
Спасибо, недоглядел, надо было всетаки копировать из консоли, а не перенабирать.
Вы, наверное, первый, кто попытался описанное выше повторить
Или просто уже имели большой опыт и сходу заметили?
Дошел до пункта
src/contrib/hbase/conf/hbase-site.xml
а нету такого файла//
как быть?
[quote comment="786"]Дошел до пункта
src/contrib/hbase/conf/hbase-site.xml
а нету такого файла//
как быть?[/quote]
Либо я потерял какой-то пункт в алгоритме, либо его нужно создать…
Хотя возможно и Вы что-то пропустили, например компиляцию contrib проектов.
В последних версиях нету уже hbase. Вот и не получилось
[quote comment="798"]В последних версиях нету уже hbase. Вот и не получилось[/quote]Хм, да, что-то я проворонил этот момент, надо бы пост подкорректировать с учетом этого.
Хотя принцип не должен был сильно измениться — достаточно просто отдельно HBase скачать.
[quote comment="800"][quote comment="798"]В последних версиях нету уже hbase. Вот и не получилось[/quote]Хм, да, что-то я проворонил этот момент, надо бы пост подкорректировать с учетом этого.
Хотя принцип не должен был сильно измениться — достаточно просто отдельно HBase скачать.[/quote]
ни разу не так. пол дня убитые на мэйл-листы показали, что текущий hbase 0.1.2 работает только с hadoop 0.16
попытки запуска hbase 0.1.2 и последнего транка под hadoop 0.18 кричали в лог нэймноды
WARN org.apache.hadoop.ipc.Server: Incorrect header or version mismatch from 127.0.0.1:32957 got version 1 expected version 2
и таймаутом коннекта к hdfs хранилищу со стороны мастер-сервера
хоть бы в вики поместили инфу о этом.
[quote comment="875"][quote comment="800"][quote comment="798"]В последних версиях нету уже hbase. Вот и не получилось[/quote]Хм, да, что-то я проворонил этот момент, надо бы пост подкорректировать с учетом этого.
Хотя принцип не должен был сильно измениться — достаточно просто отдельно HBase скачать.[/quote]Да, совместимость версий у них обеспечивается далеко не всегда. Судя по всему необходимо использовать лишь сборки, сделанные в примерно один и тот же момент времени.
ни разу не так. пол дня убитые на мэйл-листы показали, что текущий hbase 0.1.2 работает только с hadoop 0.16
попытки запуска hbase 0.1.2 и последнего транка под hadoop 0.18 кричали в лог нэймноды
WARN org.apache.hadoop.ipc.Server: Incorrect header or version mismatch from 127.0.0.1:32957 got version 1 expected version 2
и таймаутом коннекта к hdfs хранилищу со стороны мастер-сервера
хоть бы в вики поместили инфу о этом.[/quote]
На сегодняшний момент как узнать какая версия hadoop и hbase совместимы и самые свежие?
[quote comment="917"]На сегодняшний момент как узнать какая версия hadoop и hbase совместимы и самые свежие?[/quote]
Самая свежая версия определенно в SVN: Hadoop и HBase. Совместимость лучше всего практическим методом проб и ошибок. В общем случае обычно относительно совместимы между собой SVN версии в /trunk и последние stable релизы.
Возможно ли в Hadoop добавлять «на лету (in run time)» data-nodes (дополнительные машины с HDD)?? Как это можно сделать или где про это можно почитать??
[quote comment="940"]Возможно ли в Hadoop добавлять «на лету (in run time)» data-nodes (дополнительные машины с HDD)?? Как это можно сделать или где про это можно почитать??[/quote]
При правильной настройке должны подхватываться:
bin/hadoop datanode start
[...] Поднимаем кластер ВНИМАНИЕ! Перед продолжением чтения этого раздела, настоятельно рекомендуется прочитать статью о запуске псевдо-кластера из одного компьютера. [...]