Одна из причин использовать Hadoop заключается в том, что данные неравноценны по своей природе. Например, данные об операциях по текущим банковским счетам отражают реальный факт перемещения денег, тогда как пост на Twitter – всего лишь чье-то мнение. Твиты далеко не так ценны, как сведения о финансовых транзакциях, поэтому нет смысла хранить их в дорогостоящей системе, где они скорее всего редко будут использоваться. Hadoop же позволяет организациям хранить малоценные данные на тот случай, если вдруг они пригодятся. Также в ней можно хранить необработанные лог-файлы, из которых извлечены фрагменты с важной информацией. Благодаря архивированию необработанных файлов в Hadoop всегда можно вернуться к ним позже и извлечь из них дополнительную информацию, если в ней возникнет необходимость. Использование Hadoop для целей архивирования похоже на непрерывное резервное копирование файлов с последующим легким к ним доступом – вместо неудобной заправки ленты. Наконец, архивирование необработанных данных может очень пригодиться в случае аудиторских проверок или возникновения юридических вопросов.
Hadoop можно сравнить с аффинажным заводом по переработке железорудного сырья. Здесь скальную породу, содержащую руду, загружают в плавильную печь, где породу перемалывают, нагревают и переплавляют в железные слитки, отделяя отходы. Hadoop работает точно так же: собирает большие объемы твитов, перерабатывает их при помощи инструментов текстового анализа и выплавляет из терабайтов мнений гораздо меньшие по размеру (и гораздо более ценные!) подборки информации, скажем, о покупательских предпочтениях или трендах. Затем эти железные слитки (аналитические результаты) передаются в производственную систему (реляционное окружение), где им придается еще большая ценность в виде металлопроката, балок и другой готовой продукции. Сегодня, благодаря низкой стоимости хранения малоценных данных, можно хранить гораздо бо́льшие объемы, чем в прошлом.
Hadoop становится первоначальным хранилищем для многих источников данных. Кроме того, она может быть использована для очистки и обработки данных, как было описано выше, чтобы сделать их пригодными для дальнейшего применения в аналитических целях. Например, текстовые данные из имейлов, отзывов клиентов или постов в социальных сетях не очень полезны в необработанном формате. Чтобы извлечь из таких текстовых данных полезную информацию, к ним необходимо применить алгоритмы текстового анализа. Скажем, ценная информация включает знание того, кто разместил пост в социальных сетях, является ли его тональность положительной, о каких продуктах идет речь и т. д. Hadoop идеально подходит для процессов, предназначенных извлекать такую информацию из текста, поскольку она позволяет осуществлять параллельный анализ текста. Затем уже структурированные данные, извлеченные из текста, можно включать в аналитический процесс.
Среди недостатков Hadoop – потребность тщательно следить за тем, чтобы при программировании в параллельном окружении создавался правильный ответ. Многие выкладки, которые просты для выполнения в однопотоковом окружении, требуют совершенно другого подхода в параллельных системах. Существуют два типа параллелизма: на уровне узлов или исполняемых модулей и на уровне системы. Параллелизм на уровне узлов заключается в простом выполнении одной и той же программы на каждом узле. Узлы не взаимодействуют между собой и не обмениваются информацией. Гораздо сложнее параллелизм на уровне системы, поскольку он предполагает координацию работы всех узлов и обмен информацией между ними для получения правильного результата. Таким образом, программисты должны быть внимательны при написании программы, с тем чтобы она соответствовала уровню параллелизма, который требуется для выполнения данной задачи.
Способность Hadoop работать с любыми объемами данных в любом формате делает ее важной опорой единого аналитического окружения.
Например, вы не можете получить среднее значение, применяя процесс на уровне узлов или исполняемого модуля, поскольку каждый модуль сначала вычислит среднее значение на основе имеющихся у него данных, а затем сообщит вам свое среднее значение. Но, как вы помните из курса введения в статистику, вычисление среднего значения из средних значений не даст вам искомого правильного ответа. Вам нужно подсчитать общую сумму, чтобы затем вычислить общее среднее значение. (В качестве иллюстрации см. рис. 5.5 и 5.6.) Для обеспечения точности вычислений в Hadoop программисты должны заложить в программу надлежащий уровень параллелизма. В противоположность этому параллельное реляционное окружение построено таким образом, что параллелизм на уровне системы является в ней стандартом.