Читать книгу "Революция в аналитике. Как в эпоху Big Data улучшить ваш бизнес с помощью операционной аналитики - Билл Фрэнкс"
Шрифт:
Интервал:
Закладка:
Hadoop можно сравнить с аффинажным заводом по переработке железорудного сырья. Здесь скальную породу, содержащую руду, загружают в плавильную печь, где породу перемалывают, нагревают и переплавляют в железные слитки, отделяя отходы. Hadoop работает точно так же: собирает большие объемы твитов, перерабатывает их при помощи инструментов текстового анализа и выплавляет из терабайтов мнений гораздо меньшие по размеру (и гораздо более ценные!) подборки информации, скажем, о покупательских предпочтениях или трендах. Затем эти железные слитки (аналитические результаты) передаются в производственную систему (реляционное окружение), где им придается еще большая ценность в виде металлопроката, балок и другой готовой продукции. Сегодня, благодаря низкой стоимости хранения малоценных данных, можно хранить гораздо бо́льшие объемы, чем в прошлом.
Hadoop становится первоначальным хранилищем для многих источников данных. Кроме того, она может быть использована для очистки и обработки данных, как было описано выше, чтобы сделать их пригодными для дальнейшего применения в аналитических целях. Например, текстовые данные из имейлов, отзывов клиентов или постов в социальных сетях не очень полезны в необработанном формате. Чтобы извлечь из таких текстовых данных полезную информацию, к ним необходимо применить алгоритмы текстового анализа. Скажем, ценная информация включает знание того, кто разместил пост в социальных сетях, является ли его тональность положительной, о каких продуктах идет речь и т. д. Hadoop идеально подходит для процессов, предназначенных извлекать такую информацию из текста, поскольку она позволяет осуществлять параллельный анализ текста. Затем уже структурированные данные, извлеченные из текста, можно включать в аналитический процесс.
Среди недостатков Hadoop – потребность тщательно следить за тем, чтобы при программировании в параллельном окружении создавался правильный ответ. Многие выкладки, которые просты для выполнения в однопотоковом окружении, требуют совершенно другого подхода в параллельных системах. Существуют два типа параллелизма: на уровне узлов или исполняемых модулей и на уровне системы. Параллелизм на уровне узлов заключается в простом выполнении одной и той же программы на каждом узле. Узлы не взаимодействуют между собой и не обмениваются информацией. Гораздо сложнее параллелизм на уровне системы, поскольку он предполагает координацию работы всех узлов и обмен информацией между ними для получения правильного результата. Таким образом, программисты должны быть внимательны при написании программы, с тем чтобы она соответствовала уровню параллелизма, который требуется для выполнения данной задачи.
Любые данные, в любом формате, любого объема
Способность Hadoop работать с любыми объемами данных в любом формате делает ее важной опорой единого аналитического окружения.
Например, вы не можете получить среднее значение, применяя процесс на уровне узлов или исполняемого модуля, поскольку каждый модуль сначала вычислит среднее значение на основе имеющихся у него данных, а затем сообщит вам свое среднее значение. Но, как вы помните из курса введения в статистику, вычисление среднего значения из средних значений не даст вам искомого правильного ответа. Вам нужно подсчитать общую сумму, чтобы затем вычислить общее среднее значение. (В качестве иллюстрации см. рис. 5.5 и 5.6.) Для обеспечения точности вычислений в Hadoop программисты должны заложить в программу надлежащий уровень параллелизма. В противоположность этому параллельное реляционное окружение построено таким образом, что параллелизм на уровне системы является в ней стандартом.
Сегодня на рынок приходят пакеты, дополняющие Hadoop синтаксисом наподобие SQL или даже методологией извлечения данных. Однако эти варианты все еще не являются настолько надежными, чтобы удовлетворять требованиям крупных организаций. Это возвращает нас к необходимости использовать каждую платформу в соответствии с ее назначением. Как указывалось в четвертой главе, с некоторыми задачами Hadoop справляется лучше других опций, но есть и задачи, где она проявляет себя неважно.
Как узнать, какой тип обработки подходит для Hadoop? Простейший тест должен определить: могут или нет ваши вычисления осуществляться параллельно и независимо друг от друга на отдельных узлах? Если независимая обработка подмножества данных каждого исполняемого модуля даст вам такой же ответ, как и обработка всего массива данных в одной большой системе, то Hadoop подойдет для таких вычислений. На рис. 5.5 и 5.6 проиллюстрированы примеры неправильного и правильного ее применения. Если же вы хотите узнать средний объем продаж по каждому отдельному потребителю, ответ будет правильным при условии, что все данные по каждому потребителю хранятся в одном модуле. Но если для получения ответа требуется передача данных между модулями, то, чтобы получить такой же ответ, как если бы все данные обрабатывались разом, Hadoop придется очень постараться. Разумеется, я чрезмерно упрощаю ситуацию, из которой имеются свои исключения, но эта рекомендация во многих случаях поможет вам выбрать правильное направление.
Еще один способ определить, насколько Hadoop подходит для управления алгоритмом, – это узнать, какого типа обработки, последовательной или непоследовательной, требует алгоритм. В реляционных системах SQL получает отвечающий комплект и шаги для прохождения каждой колонки цифр по маршруту, применяя к каждой записи заданные функции. SQL плохо справляется с задачами, когда для обработки необходимо перепрыгивать от колонки к колонке и от итерации к итерации (часто на основе результатов предыдущей итерации). Hadoop же использует такие языки программирования, как Java, Python или C++, которые лучше подходят для сложного управления данными, поскольку в этом случае не требуется последовательной построчной обработки.
Одна из интересных особенностей, связанных с использованием в Hadoop языков C++, Java и Python, состоит в том, что Hadoop не столько создает новые функции, сколько расширяет возможности масштабирования существующей функциональности. Любая программа, написанная сегодня на Java для Hadoop, могла быть написана несколько лет назад и реализована в традиционной однопоточной системе. Пусть используемый язык и не нов, зато ново окружение, где он применяется, что в огромной степени масштабирует применение Java.
Подведем итог: Hadoop в ее нынешнем виде лучше всего подходит для начального хранения данных из крупных источников и для начальных уточнения и обработки этих данных. Также Hadoop стоит использовать для хранения малоценных или нечасто используемых данных. Наконец, Hadoop замечательно подходит для архивирования. Однако в ближайшем будущем большинство организаций редко когда смогут использовать Hadoop для поддержки операционно-аналитических процессов в режиме реального времени.
Внимание!
Сайт сохраняет куки вашего браузера. Вы сможете в любой момент сделать закладку и продолжить прочтение книги «Революция в аналитике. Как в эпоху Big Data улучшить ваш бизнес с помощью операционной аналитики - Билл Фрэнкс», после закрытия браузера.