Для чего система hadoop
Big Data от А до Я. Часть 2: Hadoop
Привет, Хабр! В предыдущей статье мы рассмотрели парадигму параллельных вычислений MapReduce. В этой статье мы перейдём от теории к практике и рассмотрим Hadoop – мощный инструментарий для работы с большими данными от Apache foundation.
В статье описано, какие инструменты и средства включает в себя Hadoop, каким образом установить Hadoop у себя, приведены инструкции и примеры разработки MapReduce-программ под Hadoop.
Общая информация о Hadoop
Как известно парадигму MapReduce предложила компания Google в 2004 году в своей статье MapReduce: Simplified Data Processing on Large Clusters. Поскольку предложенная статья содержала описание парадигмы, но реализация отсутствовала – несколько программистов из Yahoo предложили свою реализацию в рамках работ над web-краулером nutch. Более подробно историю Hadoop можно почитать в статье The history of Hadoop: From 4 nodes to the future of data
Изначально Hadoop был, в первую очередь, инструментом для хранения данных и запуска MapReduce-задач, сейчас же Hadoop представляет собой большой стек технологий, так или иначе связанных с обработкой больших данных (не только при помощи MapReduce).
Основными (core) компонентами Hadoop являются:
Некоторым из перечисленных компонент будут посвящены отдельные статьи этого цикла материалов, а пока разберём, каким образом можно начать работать с Hadoop и применять его на практике.
Установка Hadoop на кластер при помощи Cloudera Manager
Раньше установка Hadoop представляла собой достаточно тяжёлое занятие – нужно было по отдельности конфигурировать каждую машину в кластере, следить за тем, что ничего не забыто, аккуратно настраивать мониторинги. С ростом популярности Hadoop появились компании (такие как Cloudera, Hortonworks, MapR), которые предоставляют собственные сборки Hadoop и мощные средства для управления Hadoop-кластером. В нашем цикле материалов мы будем пользоваться сборкой Hadoop от компании Cloudera.
Для того чтобы установить Hadoop на свой кластер, нужно проделать несколько простых шагов:
После установки вы получите консоль управления кластером, где можно смотреть установленные сервисы, добавлять/удалять сервисы, следить за состоянием кластера, редактировать конфигурацию кластера:
Более подробно с процессом установки Hadoop на кластер при помощи cloudera manager можно ознакомиться по ссылке в разделе Quick Start.
Если же Hadoop планируется использовать для «попробовать» – можно не заморачиваться с приобретением дорогого железа и настройкой Hadoop на нём, а просто скачать преднастроенную виртуальную машину по ссылке и пользоваться настроенным hadoop’ом.
Запуск MapReduce программ на Hadoop
Теперь покажем как запустить MapReduce-задачу на Hadoop. В качестве задачи воспользуемся классическим примером WordCount, который был разобран в предыдущей статье цикла. Для того, чтобы экспериментировать на реальных данных, я подготовил архив из случайных новостей с сайта lenta.ru. Скачать архив можно по ссылке.
Напомню формулировку задачи: имеется набор документов. Необходимо для каждого слова, встречающегося в наборе документов, посчитать, сколько раз встречается слово в наборе.
Решение:
Map разбивает документ на слова и возвращает множество пар (word, 1).
Reduce суммирует вхождения каждого слова:
Теперь задача запрограммировать это решение в виде кода, который можно будет исполнить на Hadoop и запустить.
Способ №1. Hadoop Streaming
Самый простой способ запустить MapReduce-программу на Hadoop – воспользоваться streaming-интерфейсом Hadoop. Streaming-интерфейс предполагает, что map и reduce реализованы в виде программ, которые принимают данные с stdin и выдают результат на stdout.
Программа, которая исполняет функцию map называется mapper. Программа, которая выполняет reduce, называется, соответственно, reducer.
Streaming интерфейс предполагает по умолчанию, что одна входящая строка в mapper или reducer соответствует одной входящей записи для map.
Вывод mapper’a попадает на вход reducer’у в виде пар (ключ, значение), при этом все пары соответствующие одному ключу:
Данные, которые будет обрабатывать Hadoop должны храниться на HDFS. Загрузим наши статьи и положим на HDFS. Для этого нужно воспользоваться командой hadoop fs:
Утилита hadoop fs поддерживает большое количество методов для манипуляций с файловой системой, многие из которых один в один повторяют стандартные утилиты linux. Подробнее с её возможностями можно ознакомиться по ссылке.
Теперь запустим streaming-задачу:
Утилита yarn служит для запуска и управления различными приложениями (в том числе map-reduce based) на кластере. Hadoop-streaming.jar – это как раз один из примеров такого yarn-приложения.
Дальше идут параметры запуска:
В интерфейсе доступном по этому URL можно узнать более детальный статус выполнения задачи, посмотреть логи каждого маппера и редьюсера (что очень полезно в случае упавших задач).
Сам результат можно получить следующим образом:
Способ №2
Сам по себе hadoop написан на java, и нативный интерфейс у hadoop-a тоже java-based. Покажем, как выглядит нативное java-приложение для wordcount:
Этот класс делает абсолютно то же самое, что наш пример на Python. Мы создаём классы TokenizerMapper и IntSumReducer, наследуя их от классов Mapper и Reducer соответсвенно. Классы, передаваемые в качестве параметров шаблона, указывают типы входных и выходных значений. Нативный API подразумевает, что функции map на вход подаётся пара ключ-значение. Поскольку в нашем случае ключ пустой – в качестве типа ключа мы определяем просто Object.
В методе Main мы заводим mapreduce-задачу и определяем её параметры – имя, mapper и reducer, путь в HDFS, где находятся входные данные и куда положить результат.
Для компиляции нам потребуются hadoop-овские библиотеки. Я использую для сборки Maven, для которого у cloudera есть репозиторий. Инструкции по его настройке можно найти по ссылке. В итоге файл pom.xmp (который используется maven’ом для описания сборки проекта) у меня получился следующий):
Соберём проект в jar-пакет:
После сборки проекта в jar-файл запуск происходит похожим образом, как и в случае streaming-интерфейса:
Дожидаемся выполнения и проверяем результат:
Как нетрудно догадаться, результат выполнения нашего нативного приложения совпадает с результатом streaming-приложения, которое мы запустили предыдущим способом.
Резюме
В статье мы рассмотрели Hadoop – программный стек для работы с большими данными, описали процесс установки Hadoop на примере дистрибутива cloudera, показали, как писать mapreduce-программы, используя streaming-интерфейс и нативный API Hadoop’a.
В следующих статьях цикла мы рассмотрим более детально архитектуру отдельных компонент Hadoop и Hadoop-related ПО, покажем более сложные варианты MapReduce-программ, разберём способы упрощения работы с MapReduce, а также ограничения MapReduce и как эти ограничения обходить.
Спасибо за внимание, готовы ответить на ваши вопросы.
Hadoop
Apache Hadoop — это пакет утилит, библиотек и фреймворков, его используют для построения систем, которые работают с Big Data. Он хранит и обрабатывает данные для выгрузки в другие сервисы. У Hadoop открытый исходный код, написанный на языке Java. Это значит, что пользователи могут работать с ним и модифицировать его бесплатно.
Hadoop разделен на кластеры — группу серверов (узлов), которые используют как единый ресурс. Так данные удобнее и быстрее собирать и обрабатывать. Деление позволяет выполнять множество элементарных заданий на разных серверах кластера и выдавать конечный результат. Это нужно в первую очередь для перегруженных сайтов, например Facebook.
Внутри Hadoop существует несколько проектов, которые превратились в отдельные стартапы: Cloudera, MapR и Hortonworks. Эти проекты — дистрибутивы или установочный пакет программы, которые обрабатывают большие данные.
Архитектура Hadoop
Основные компоненты
Hadoop разделен на четыре модуля: такое деление позволяет эффективно справляться с задачами для анализа больших данных.
Hadoop Common — набор библиотек, сценариев и утилит для создания инфраструктуры, аналог командной строки.
Hadoop HDFS (Hadoop Distributed File System) — иерархическая система хранения файлов большого размера с возможностью потокового доступа. Это значит, что HDFS позволяет легко находить и дублировать данные.
HDFS состоит из NameNode и DataNode — управляющего узла и сервера данных. NameNode отвечает за открытие и закрытие файлов и управляет доступом к каталогам и блокам файлов. DataNode — это стандартный сервер, на котором хранятся данные. Он отвечает за запись и чтение данных и выполняет команды NameNode. Отдельный компонент — это client (пользователь), которому предоставляют доступ к файловой системе.
MapReduce — это модель программирования, которая впервые была использована Google для индексации своих поисковых операций. MapReduce построен по принципу «мастер–подчиненные». Главный в системе — сервер JobTracker, раздающий задания подчиненным узлам кластера и контролирующий их выполнение. Функция Map группирует, сортирует и фильтрует несколько наборов данных. Reduce агрегирует данные для получения желаемого результата.
YARN решает, что должно происходить в каждом узле данных. Центральный узел, который управляет всеми запросами на обработку, называется диспетчером ресурсов. Менеджер ресурсов взаимодействует с менеджерами узлов: каждый подчиненный узел данных имеет свой собственный диспетчер узлов для выполнения задач.
Дополнительные компоненты
Hive: хранилище данных
Система хранения данных, которая помогает запрашивать большие наборы данных в HDFS. До Hive разработчики сталкивались с проблемой создания сложных заданий MapReduce для запроса данных Hadoop. Hive использует HQL (язык запросов Hive), который напоминает синтаксис SQL.
Pig: сценарий преобразований данных
Pig преобразовывает входные данные, чтобы получить выходные данные. Pig полезен на этапе подготовки данных, поскольку он может легко выполнять сложные запросы и хорошо работает с различными форматами данных.
Flume: прием больших данных
Flume — это инструмент для приема больших данных, который действует как курьерская служба между несколькими источниками данных и HDFS. Он собирает, объединяет и отправляет огромные объемы потоковых данных (например файлов журналов, событий, созданных десктопными версиями социальных сетей) в HDFS.
Zookeeper: координатор
Zookeeper это сервис-координатор и администратор Hadoop, который распределяет информацию на разные сервера.
Data Scientist с нуля
Получите востребованные IT-навыки за один год и станьте перспективным профессионалом. Мы поможем в трудоустройстве. Дополнительная скидка 5% по промокоду BLOG.
Для чего система hadoop
Hadoop – это свободно распространяемый набор утилит, библиотек и фреймворк для разработки и выполнения распределённых программ, работающих на кластерах из сотен и тысяч узлов. Эта основополагающая технология хранения и обработки больших данных (Big Data) является проектом верхнего уровня фонда Apache Software Foundation.
Из чего состоит Hadoop: концептуальная архитектура
Изначально проект разработан на Java в рамках вычислительной парадигмы MapReduce, когда приложение разделяется на большое количество одинаковых элементарных заданий, которые выполняются на распределенных компьютерах (узлах) кластера и сводятся в единый результат [1].
Проект состоит из основных 4-х модулей:
Сегодня вокруг Hadoop существует целая экосистема связанных проектов и технологий, которые используются для интеллектуального анализа больших данных (Data Mining), в том числе с помощью машинного обучения (Machine Learning) [2].
Как появился хадуп: история разработки и развития
Технология хадуп появилась почти 15 лет назад и постоянно развивается. Далее показаны основные вехи ее истории:
2005 – публикация сотрудников Google Джеффри Дина и Санжая Гемавата о вычислительной концепции MapReduce сподвигла Дуга Каттинга на инициацию проекта. Разработку в режиме частичной занятости вели Дуг Каттинг и Майк Кафарелла, чтобы построить программную инфраструктуру распределённых вычислений для свободной программной поисковой машины на Java. Свое название проект получил в честь игрушечного слонёнка ребёнка основателя [1]. Именно поэтому хадуп неформально называют “железный слон” и изображают его в виде этого животного.
2006 – корпорация Yahoo пригласила Каттинга возглавить специально выделенную команду разработки инфраструктуры распределённых вычислений, благодаря чему Hadoop выделился в отдельный проект [1].
2008 – Yahoo запустила кластерную поисковую машину на 10 тысяч процессорных ядер под управлением Hadoop, который становится проектом верхнего уровня системы проектов Apache Software Foundation. Достигнут мировой рекорд производительности в сортировке данных: за 209 секунд кластер из 910 узлов обработал 1 Тбайт информации. После этого технологию внедряют Last.fm, Facebook, The New York Times, облачные сервисы Amazon EC2 [1].
2010 – корпорация Google предоставила Apache Software Foundation права на использование технологии MapReduce. Hadoop позиционируется как ключевая технология обработки и хранения больших данных (Big Data). Начала формироваться Hadoop-экосистема: возникли продукты Avro, HBase, Hive, Pig, Zookeeper, облегчающие операции управления данными и распределенными приложениями, а также анализ информации [1].
2013 – появление модуля YARN в релизе Hadoop 2.0 значительно расширяет парадигму MapReduce, повышая надежность и масштабируемость распределенных систем [3].
Где и зачем используется Hadoop
Выделяют несколько областей применения технологии [4]:
Все подробности о распределенной обработке данных, администрировании и применении Hadoop для проектов Big Data и Machine Learning на наших компьютерных курсах обучения разных групп пользователей, от «чайников» до профессионалов – хадуп для инженеров, администраторов и аналитиков больших данных в Москве:
Зачем нужен Hadoop
Неструктурированные большие данные для задач бизнеса
Большие данные необходимы крупным компаниям, чтобы совершенствовать бизнес-процессы, обгонять конкурентов и улучшать клиентский сервис. Массивы информации о клиентах, сотрудниках, финансовых показателях, транзакциях, операционной деятельности нужно хранить, обрабатывать, анализировать.
Hadoop — одно из решений для хранения и анализа больших данных. Его используют Google, Amazon, Facebook, Twitter, eBay и другие гиганты рынка. При этом технология подходит для любого бизнеса, работающего с объемами данных свыше терабайта, оптимизирована для работы на виртуальных машинах, удобно масштабируется. Поэтому облачные провайдеры предлагают ее компаниям как сервис в облаке, который легко внедрить и применять.
В статье разберем, что такое Hadoop и какие его функции полезны для бизнеса.
Что такое Hadoop
Hadoop помогает хранить и обрабатывать массивы информации, готовить ее для выгрузки в другие сервисы, собирать статистику. По сути, это конструктор, на основе которого строят хранилища данных под потребности бизнеса.
Лучше всего Hadoop подходит для работы с неструктурированными данными — неупорядоченной информацией без определенной структуры, которую сложно классифицировать и разбить на группы. Например, с файлами документов, сообщениями, аудио- и видеозаписями, изображениями.
Система может искать нужные сведения в огромном архиве, получать из массива «пустой» информации небольшое количество значимой для компании. Например, подсчитать уникальных пользователей в трафике с миллионов IP-адресов.
Так, крупная сеть универмагов может собирать и обрабатывать информацию о поведении и предпочтениях клиентов из интернета, обрабатывать ее, помещать в хранилище. Там данные объединяют с информацией о продажах, анализируют, в результате становится ясно, какие действия на сайте приводят к покупкам.
Hadoop состоит из нескольких инструментов, в частности файловой базы данных и готовых решений для их обработки, его преимущества:
Функции Hadoop: для чего ваш бизнес может использовать технологию
Hadoop подходит для управления безопасностью и рисками, оптимизации маркетинга, финансового анализа, научных и маркетинговых исследований, индексации веб-сайтов, анализа «озер данных» — большого объема неструктурированной информации, собранной компанией.
По данным исследования Syncsort, 71% компаний применяют Hadoop не только для решения новых проблем с большими данными, но и чтобы улучшить работу с типами информации, которую они используют много лет.
Hadoop для анализа «озер данных»
«Озера данных» — несистематизированная информация, которую компания собирает из разных источников для дальнейшего анализа. Такие данные могут пригодиться в будущем или их обязывает хранить закон.
Когда информация хранится в разных источниках и форматах, она недоступна для анализа, моделирования, прогнозирования, а значит, бесполезна для компании. С помощью Hadoop собранные данные можно распределить и структурировать, настроить аналитику для построения моделей и проверки предположений.
Hadoop для обработки данных из соцсетей
В социальных сетях есть массивы данных, анализ которых важен, чтобы понять потребности клиентов. Hadoop помогает извлекать информацию для обогащения клиентских профилей: идентификационные данные, семейное положение, интересы, образование, социальный статус и т. д.
Аналитика помогает управлять репутацией компании, таргетировать рекламу на нужную аудиторию, повышать эффективность социальных сетей как канала продаж.
Hadoop для анализа отношения к бренду
Hadoop может собирать и анализировать мнения и эмоции, которые пользователи высказывают в социальных сетях, блогах, онлайн-обзорах, отзывах. Это помогает понять, как люди относятся к продуктам и услугам компании или ее конкурентов, оценить репутацию на рынке, скорректировать продвижение продукта, спрогнозировать продажи.
Hadoop для обработки данных о поведении клиентов
Hadoop может быть полезен для сбора и оценки данных о вовлеченности и поведении клиентов на сайте компании. Платформа собирает данные, откуда пользователи приходят на сайт, на какую веб-страницу, по какому поисковому запросу, куда переходят, сколько времени проводят на сайте, что покупают и с каких страниц уходят.
Анализируя эту информацию, компании могут оптимизировать путь пользователя к покупке, повысить конверсию страниц, сделать удобнее сайт и корзину интернет-магазина, спрогнозировать, какие товары купят пользователи.
Hadoop для обеспечения безопасности и управления рисками
Hadoop анализирует данные серверных журналов и помогает реагировать на нарушения безопасности.
Серверные журналы генерирует компьютер, там собраны данные о работе сети, важные для безопасности и соответствия нормативам. Hadoop подходит для извлечения ошибок, подсчета сбоев системы, получения информации об использовании корпоративных сетей и кибератаках.
С помощью Hadoop определяют причины нарушения безопасности, оценивают и моделируют риски, обнаруживают сетевые вторжения. Это помогает разработать способы защиты от злоумышленников.
Hadoop для анализа геоданных
Компании розничной торговли, автомобильной промышленности, производства и магазины могут с согласия клиентов собирать данные об их передвижениях через смартфоны и планшеты, затем хранить и анализировать информацию. Это позволяет прогнозировать визиты покупателей, делать пользователям предложения с учетом их геолокации, строить оптимальные маршруты для транспорта. Hadoop поможет сохранить, оптимизировать и обработать огромное количество геоданных.
Hadoop для обработки данных от интернета вещей
Hadoop подходит для обработки данных с различных устройств интернета вещей. Это могут быть персональные IoT, например: фитнес-трекеры, которые отдают информацию о местоположении и привычках пользователя, или устройства умного дома.
IoT также применяют в городских экосистемах и промышленности для поддержки процесса производства и управления инфраструктурой, мониторинга транспортных средств и грузов, разработки умных инженерных систем, например, электро-, газо- и водоснабжения.
Обработка данных от систем IoT позволяет компаниям сократить расходы, улучшить качество выпускаемой продукции, оптимизировать производство и увеличить продажи.
Hadoop для создания корпоративного центра данных
С помощью Hadoop обрабатывают и анализируют массивы внутренних данных компании, получаемых в процессе работы или взаимодействия с клиентами.
Например, ритейлеры анализируют данные о покупках, складских остатках, ассортименте магазинов. Транспортные компании анализируют движение и скорость автомобилей, время грузоперевозок. Банки прогнозируют и оценивают число транзакций, поток клиентов, риск мошеннических действий.
Также на базе Hadoop можно создать корпоративный центр данных, из которого пользователи будут брать информацию для работы.
Как компании используют Hadoop
По результатам исследования iDatalabs, технологию чаще используют компании, работающие в сферах программного обеспечения, IT-технологий и услуг, рекрутинга, образования, здравоохранения.
Сфера деятельности | Как применяют Hadoop |
Ритейлеры и продавцы услуг | Собирают данные о продажах и транзакциях, поведении покупателей на сайте, информацию из соцсетей и с других ресурсов, финансовую информацию, отчетность об ассортименте и складских остатках. Зная, как ведут себя клиенты, можно делать персональные предложения и акции, предлагать востребованные товары, разрабатывать программы лояльности, повышать продажи. |
Предприятия, работающие в ресурсоемких отраслях | Поставщики коммунальных услуг, нефти и газа, промышленные производства, фабрики и заводы используют информацию от датчиков, внутренних сервисных служб, внешних производителей активов. Так можно прогнозировать интервалы технического обслуживания, цены на продукцию и другие важные факторы, уменьшить затраты на производство и оптимизировать рабочие процессы. |
Финансовые организации, в том числе банки | Анализируют финансовую информацию и риски, выявляют мошеннические действия и разрабатывают защиту от них. Банки работают с большими объемами данных о клиентах и транзакциях, их анализ помогает предсказывать количество посетителей в отделениях, остатки средств в банкоматах, приток и отток корпоративных клиентов. Hadoop успешно справляется с такими задачами: по данным Syncsort, ⅔ организаций финансовой отрасли отмечают, что платформа делает бизнес более гибким и повышает операционную эффективность. |
Организации здравоохранения, частные клиники | Около 80% медицинских данных — неструктурированные. Сбор и анализ такой информации помогает снизить риск мошенничества со страховками, увеличить прибыльность медцентров, проводить научные исследования, выявлять факторы риска заболеваний и оценивать эффективность лечения. |
Транспортные компании | Используют Hadoop для сбора и анализа данных о транспортировке грузов, перемещении автомобилей, сроках доставки. Это помогает уменьшить расходы на топливо, прогнозировать лучшие маршруты, определять сроки технического обслуживания транспорта. |
Как быстро внедрить Hadoop
У Hadoop есть обширная экосистема дополнительных проектов с открытым исходным кодом, поэтому большинству компаний сложно внедрять и применять технологию. Например, нужны отдельные специалисты, которые занимаются построением хранилищ данных. Это затрудняло использование Hadoop как самостоятельного решения.
Сейчас настроенные инструменты Hadoop можно получить в виде облачного сервиса.Такие решения упрощают внедрение Hadoop, поскольку не требуют капитальных затрат для пилотных проектов. Кроме того, провайдеры берут на себя экспертное администрирование Hadoop, что снимает с пользователей необходимость искать экспертов в штат и делает применение и масштабирование Hadoop дешевле и проще.
Наконец, интеграция облачных решений Hadoop с недорогими S3-хранилищами снижает затраты на хранение больших данных — обслуживание локальной инфраструктуры обходится дороже.