Революция в области данных, о которой давно говорили аналитики, свершилась: IDC утверждает, что в 2011 году данных будет произведено на порядок больше, чем в 2006 году, их объем оценивается примерно в 2 зеттабайта, и по большей части они будут неструктурированными. Это мнение поддерживают и аналитики Gartner, прогнозирующие рост корпоративных данных на 650% в период до 2014 года, причем 85% из них попадает в категорию неструктурированных. Этих показателей вполне достаточно, чтобы признать — доминировавшие десятилетиями классические базы данных с подобной нагрузкой не справятся. СУБД создавались в период, когда данные порождались в процессе офисной и близкой к ней деятельности, а сейчас данные поступают из самых разных источников, и как следствие возникли качественно новые проблемы (например, проблема Big Data), а у ИТ-подразделений появилась новая задача — разработка данных и добыча информации. Аналитики утверждают, что компании, которые сумеют извлечь из доступных им данных больше полезной для себя и своего бизнеса информации, будут в выигрыше. Отсюда следуют два тривиальных вывода: с одной стороны, нужны недорогие и надежные устройства, способные сохранить и сделать доступными эти данные, а с другой — нужны современные средства для анализа как структурированных, так и неструктурированных данных. Есть еще и третий вывод — между накопителями и средствами аналитики должна быть некоторая связывающая технология, обеспечивающая аналитическим системам доступ к большим объемам данных и решающая проблему Big Data. Одна из таких систем создается в рамках проекта Apache Software Foundation, это Hadoop, коммерческую поддержку которого осуществляет компания Cloudera.
Высокая надежность Hadoop при умеренной цене проистекает из того, что обработка организуется на кластере машин, и, если одна из них выходит из строя, работа перераспределяется между оставшимися с незначительной потерей производительности. Ядром Hadoop служит отказоустойчивая распределенная файловая система HDFS (Hadoop Distributed File System), оперирующая системами хранения, разбивая входящие данные на блоки, каждый блок попадает на отведенные ему места в пуле серверов, причем обычно хранится не менее трех копий, отсюда полная надежность. Если HDFS обнаруживает исчезновение блока, то она автоматически восстанавливает резервную копию, снова доводя их число до трех. Преимущество HDFS по сравнению с традиционной технологией RAID состоит в том, что не требуется специальной аппаратуры, а достаточно простого набора серверов, что особенно привлекательно при использовании облачных инфраструктур. Однако за все приходится платить: HDFS расточительнее в использовании дискового пространства, но в условиях постоянного снижения цен на диски это не является серьезным ограничением.
Область применения Hadoop — анализ больших данных (Big Data Analysis), следовательно, эту технологию нельзя напрямую сравнивать с другими. Например, реляционные СУБД создавались в расчете на ускорение и упрощение обработки запросов, поэтому применяются методы индексации, ограничивающие объем одновременно анализируемых данных, и нет ничего удивительного, что при относительно небольших объемах данных реляционных СУБД работает быстрее Hadoop. Однако неразумно сравнивать такси с автобусом — Hadoop, использующий технику MapReduce, адресуется без индексации сразу ко всем данным, что дает преимущества при работе с гигантскими объемами, распределенными по сотням и тысячам серверов. Hadoop не имеет единого центрального узла, но узлов очень много, и, хотя каждый узел работает относительно медленно, общая производительность высока. В то же время «медлительность» отдельного узла упрощает мониторинг и динамическую замену вышедших из строя узлов.
Помимо собственно Hadoop, в проект Apache входят: конструкция Hive, ориентированная на использование SQL-запросов и работу с хранилищами данных, Pig — язык высокого уровня для работы с потоками данных, база данных Hbase, а также СУБД типа Hypertable, Cassandra и др.
Hadoop появилась благодаря компании Google, которая известна не только своими технологическими достижениями, но и способностью их скрывать: основополагающая идея MapReduce пришла именно оттуда. Статья Джефри Дина и Санжая Чемавата «MapReduce: упрощенная обработка данных на больших кластерах» (MapReduce: Simplified Data Processing on Large Clusters) лишь чуть приоткрыла завесу таинственности, скрывавшую собственные технологии компании, предназначенные для работы с большими объемами данных, но ее недосказанность была компенсирована работой Ральфа Ламмеля из лаборатории Microsoft Research в Редмонде «Модель программирования MapReduce компании Google» (Google’s MapReduce Programming Model).
Гениальность конструкции MapReduce заключается в том, что она позволяет обеспечить автоматическое распараллеливание данных и их обработку на кластерах. Все действия, связанные с делением данных на фрагменты, выполнение обработки на пуле серверов, обеспечение надежности и резервирования, коммуникации между машинами осуществляются в режиме реального времени, без участия человека. Такой подход дает возможность программисту, не имеющему соответствующего опыта работы, использовать ресурсы больших параллельных распределенных систем.
С тех пор термин MapReduce стал употребляться не только для обозначения технологии, но наряду с аспирином и ксероксом теперь применяется для именования близких по смыслу технологических решений, в нашем случае — ориентированных на распараллеливание работы с базами данных. За шесть лет на рынке появилось больше десяти продуктов, в которых так или иначе реализованы принципы, предложенные авторами MapReduce. Широко известны продукты компаний Teradata, Aster Data, Netezza, DATAllegro, Microsoft (SQL Server, Project Madison), Dataupia, Vertica, ParAccel, Neoview, Greenplum, IBM (DB2, проект Database Partitioning Feature) и Oracle (проект Exadata). Но наибольшую популярность приобрел проект в открытых кодах Hadoop, зародившийся в Yahoo! и развиваемый компанией Cloudera. По собранному в Cloudera коллективу разработчиков, составу менеджеров и инвесторов этой компании предрекают место второй Red Hat. Из производимых Cloudera программных продуктов и сервисов можно выделить Cloudera Distribution for Hadoop и Cloudera Enterprise. В мае 2010 Cloudera была признана самой многообещающей компанией из числа созданных в 2009 году.
Первые шаги к Hadoop были сделаны Дагом Каттингом и Майклом Кафареллой в 2002 году, когда они приступили к созданию Nutch — поисковой машины для Web в открытых кодах. Первые результаты они опубликовали в журнале ACM Queue в 2004 году, и тогда же было обнародовано описание технологии MapReduce и файловой системы Google File System (GFS). Совместно они образуют каркасную структуру, позволяющую распределить работу с большими объемами данных по кластеру, состоящему из сотен или тысяч узлов, собранных из простейших серверов. Конструкция MapReduce оказалась именно тем, чего им не хватало, поэтому они дополнили возможности Nutch аналогичной функциональностью. Так стартовал проект, названный Hadoop, по имени любимого игрушечного слоненка, принадлежащего дочери Каттинга. Несколько позже проект заинтересовал Yahoo!, и руководство компании пригласило Каттинга в штат, создало команду, которая породила большую часть существующих кодов Hadoop.
Спустя пару лет Каттингу стало ясно, что Hadoop имеет более широкий спектр приложений, чем поисковые машины, — прежде всего, его можно использовать для работы с большими объемами данных, и особенно эффектным может оказаться решение на основе облачных платформ. Но это несколько отличалось от того, что хотели в Yahoo!, и дальше развитие пошло, следуя традиционному для стартапов стереотипу. Была создана новая компания с отражающим замысел названием Cloudera, и группа инженеров во главе с Каттингом ушла в нее из Yahoo!. Облако выполняет функцию, обратную тому, что делает гипервизор. Если гипервизор разбивает один физический сервер на множество виртуальных машин, то Hadoop объединяет множество физических серверов, образующих облако, в один виртуальный и предоставляющий облачные сервисы. Например, Hadoop поддерживает сервисы Amazon Elastic MapReduce, в паре Amazon-Cloudera первая предоставляет сервисы, а вторая их поддерживает. Открытая модель Hadoop позволяет развивать это ПО параллельно в Yahoo! и Cloudera.
Hadoop имеет ряд принципиальных отличий от традиционных СУБД. Во-первых, Hadoop не хранит данные, это система обработки данных нового типа, можно сказать, что это решение ближе к операционной системе или связующему ПО, но классические ОС в конечном итоге обрабатывают команды и управляют потоками команд, а Hadoop обрабатывает данные и управляет их потоками. Во-вторых, независимо от того, какие технологии применяются для обеспечения параллельной работы в СУБД и какие данные распределяются между узлами, монолитный образ данных сохраняется, и эти данные должны быть специальным образом организованы. Hadoop естественным образом распределяет работу между узлами, и на данные не накладывается никаких ограничений — они могут быть неструктурироваными и поступать в Hadoop из Web-серверов, RFID-меток, из мобильных телефонов и других источников.
Hadoop создавался в «дооблачную» эпоху и был рассчитан для работы на кластерах Yahoo!, однако позже приятной неожиданностью оказалось его соответствие облакам типа Amazon Elastic Compute Cloud (EC2), что позволило использовать дистрибутив, предоставляемый Cloudera. Благодаря этому круг пользователей Hadoop заметно меняется, если поначалу это было в основном исследовательское сообщество, для которого главным критерием была возможность масштабирования, то сейчас он все шире проникает в корпоративную среду, где не менее важна надежность. В качестве типичного примера использования Hadoop можно привести систему бизнес-аналитики в компании Netflix, специализирующейся на потоковом видео для просмотра на домашних ПК и телевизорах. Netflix собирает все логи со своего сайта, оперируя объемом данных, равным примерно 0,6 Тбайт, обрабатывая их на 50 узлах Amazon S3 с применением пакета Business Intelligence компании MicroStrategy.
Необходимость обработки петабайтных массивов данных вызвала к жизни новые подходы, которые получили название Data-Intensive Computing.
В классическом определении компьютера как программируемой машины, которая получает, хранит, обрабатывает и воспроизводит данные в удобном для восприятия формате, нет ни слова про оборудование или программы, и тем не менее до сих пор именно они были в центре внимания. Однако сегодня ситуация меняется в сторону примата данных.