понедельник, 5 декабря 2011 г.

Обзор утилит Hadoop




Создатели Hadoop называют свое детище "экосистемой для построения распределенных систем". Такую характеристику он имеет за кучу разных инструментов, которые могут работать поверх него или вместе с ним. С их помощью можно заставить hadoop кластер решать задачи пользователя.
В качестве справочника начинающему я советую читать "Hadoop: the definitive guide" Тома Вайта. Отсылая вас к разным главам в ней я буду называть ее [HDG]

В компоненты hadoop'а входят:

HDFS 
Расшифровывается как hadoop distributed file system, (распределенная файловая система hadoop). Все что hadoop кластер обрабатывает и хранит у себя, содержится в едином распределенном хранилище, называемом HDFS. О нем написано много литературы (вся на английском). Подробно про HDFS можно почитать в 3й главе [HDG]. HDFS ставится с hadoop "в одном флаконе".

hadoop-FUSE
Утилита, работающая строго под Linux, которая позволяет подмонтировать HDFS на любой машине и писать читать данные как в обычный сетевой диск. Здесь все просто, прочитать о тулзе можно на вики hadoop'а.

HBase
NoSQL база данных. Хранит таблицы большого размера формате "ключ-значение". Отвечает она в реальном времени и может использоваться даже в online сервисах. Например Facebook использует ее как базу данных для своего месенджера. Ставится HBase поверх Hadoop'а и все  ее данные хранятся в HDFS.

Я считаю, что это очень важный проект в hadoop, который перекидывает мостик между массивными Map-Reduce вычислениями и online сервисами. HBase полностью посвящена глава 13 в [HDG].
Про HBase была даже написана отдельная книжка Larse George "HBase the definitive guide".

Hive
Хранилище данных в HDFS c SQL подобным синтаксисом обращения к данным. Вообще это любимый инструмент программистов и маркетологов чтобы что-то быстро посчитать, или написать программу средней сложности в виде простого скрипта.  12 глава [HDG] посвящена ей.

Pig
Тоже обертка вокруг hadoop, наподобие hive, но задачи задаются в виде скриптов на языке PigLatin. Что удобнее, использовать скрипты Pig или HiveQL - выбор остается за пользователем. О нем рассказывает глава 11 [HDG].

Oozie 
Это такой демон, который управляет рабочим процессом на hadoop кластере.
Его написали, когда стало понятно, что писать bash скрипты и запускать их в cron'е становится сложно из-за зависимостей между данными, задачами, последовательным и параллельным выполнением.
Ozzie дает возможность составлять план расчетов кластера с зависимостями от времени, выполненных задач, наличия входных данных и т.д.

Судя по всему это мощный инструмент с весьма дохлым описанием. Что-то о нем можно почитать на официальной страничке проекта. Совсем немножно про Oozie упомянуто в главе 5 [HDG].

Zookeeper
"смотритель зоопарка" - высоконадежный и высокодоступный сервис, который координирует распределенные процессы. Существует целая теория в computer science, как сервис, распределенный по сети, сделать отказоустойчивым и хранящим однотипную актуальную информацию.

Zookeeper  сделан как раз по науке и хранит горячие данные для таких быстрых отказоустойчивых сервисов, как например hBase. Подробнее почитать про zookeeper можно в 14 главе выше рекомендованной книжки.

Flume
Распределенный сервис для сбора данных в HDFS. Своеобразный "трубопровод", по которому логи (например апачевые логи веб серверов) собираются со всего кластера и складываются в единое хранилище данных, например HDFS.
В интернете из полезного про Flume есть презенташка и юзергид.

Sqoop
Инструмент для импорта данных из СУБД и HDFS и обратно. Для коннекта к базам данных используется JDBС. При импорте данных в HDFS генерируются Java-классы для работы с ними. Подробнее смотри главу 15 [HDG].

Hue
Графический интерфейс (GUI) для работы с Hadoop кластером. Написан на Python Django. Красивый веб сервис, который выглядит как рабочий стол с приложениями. Веб сервис работает в браузере и никаким пользователям на машину его ставить не надо.
Разработчики можно писать под него красивые графические обертки для задач, выполняемых на хадупе.  Для разработчиков GUI на Hue написан подробный SDK.

Whirr
Быстрый способ запускать hadoop на облачных сервисах. Например если есть большая задача, но она только одна - можно арендовать 100 машин в Amazon EC2, загрузить туда данные и задачу, а через час забрать получившиеся результаты. Это простая библиотека, как с ней работать, описано тут.

Mahout
Набор алгоритмов машинного обучения, которые считаются на кластере.
Тут есть
  • классификаторы, 
  • алгоритмы кластеризации, 
  • коллаборативная фильтрация и системы рекомендации. 
Вообще то алгоритмов тут достаточно мало, но зато все они сделаны распределенными, поэтому могут за разумное время обрабатывать большие данные.
В октябре 2011 вышла книжка про него Sean Owen. "Mahout in Action"

3 комментария: