Сейчас огромное количество компаний собирает все возможные данные, с огромного количества девайсов и интернет-ресурсов, иногда они даже не представляют, как они будут использовать эти данные в дальнейшем. Количество таких данных растёт в геометрической прогрессии. Для чего они это делают? Делают это они для перестраховки – так как никто не знает, до чего дойдут технологии в будущем. Уже сейчас многие данные можно использовать для анализа поведения клиентов, чтобы выдавать им нужные предложения и улучшать сервис. В основном, большие данные собираются для того, чтобы на основе этих данных делать какие-либо предсказания. И одно из самых интересных направлении связанных с Big Data, конечно, является искусственный интеллект.
На текущий момент, наверное, уже каждый слышал такое модное сочетание слов, как Big Data. Давайте для начала поймём, что такое данные?
Данные (data) – сведения, полученные путем измерения, наблюдения, логических или арифметических операций и представленные в форме, пригодной для постоянного хранения, передачи и (автоматизированной) обработки. Самым классическим способом хранения данных, являются Базы Данных.
База данных (data base) – совокупность хранимых в памяти компьютера данных, относящихся к определенному объему или кругу деятельности, специально организованных, обновляемых и логически связанных между собой. Они представляют собой своеобразную информационную модель объекта.
База данных, размещенная и работающая на одном компьютере, называется локальной, а на нескольких связанных между собой компьютерах – распределенной.
Реляционные базы данных представляют собой базы данных, которые используются для хранения и предоставления доступа к взаимосвязанным элементам информации. Реляционные базы данных основаны на реляционной модели — интуитивно понятном, наглядном табличном способе представления данных. Каждая строка, содержащая в таблице такой базы данных, представляет собой запись с уникальным идентификатором, который называют ключом. Столбцы таблицы имеют атрибуты данных, а каждая запись обычно содержит значение для каждого атрибута, что дает возможность легко устанавливать взаимосвязь между элементами данных.
Например, мы хотим хранить историю всех наших покупок. В таком случае нам нужно понять, где эту информацию записывать, но если мы будем просто записывать каждую покупку, сохраняя все поля, которые мы хотим: имя, фамилию, номер телефона и т.д., то у нас будет очень много повторяющихся полей и, соответственно, это будет занимать очень много места. То есть если человек 1, сделал N покупок, то нам придётся иметь N записей про этого человека, а в табличке будет изменятся только товар, а всё остальное будет дублироваться. Более удобным вариантом будет использование нескольких табличек с их связыванием. Например - одна табличка содержит клиентов и информацию о них и их id, вторая табличка будет содержать - id номер и все транзакции вместо того, чтобы дублировать всю информации о конкретном контрагенте, таким образом, мы просто будем дублировать id - который и будет связывать все таблички. Это и есть реляционные базы данных, помимо этого, подобные данные могут храниться в excel, json и прочих текстовых файлах - такое хранение информации называется не реляционными базами данных, т.е. не реляционные базы данных размещают информацию в коллекциях документов.
Что же такое большие данные. Большие данные — это понятие относительное, для кого-то большими будет 1 ТБ, а для кого-то 1Петабайт. Но в принципе, если взять очень много-много данных и сложить их в одно место, то данные могут потеряться, система может перестать работать из-за нехватки ресурсов, в такие моменты неопределённости и появился метод "больших данных". Один из самых популярных — это hadoop.
Hadoop или HDFS (Hadoop Distributed File System) - это система, которая позволяет хранить нам данные, но на нескольких серверах одновременно. Hadoop - набор утилит, и программный каркас для выполнения распределённых программ, работающих на кластерах. Основные принципы: мы храним данные в разных местах, постоянно их копируем. При выходе из строя одного кластера, в другом остаются те же файлы, не требует больших и дорогих серверов. Как это было придумано? Для того, чтобы хранить такое количество информации, нам бы понадобились очень мощные и дорогие серверы, а у многих малых компаний, да и даже более крупных, финансов на такое оборудование просто нет, таким образом, появилась концепция - взять много старых ПК, сложить их друг на друга, т.е. объединить мощность, и совершать между ними непрерывный файловый обмен, таким образом, если у нас ломается один ПК, то данные остаются, потому что они скопированы на другом, это и есть hadoop.
На картинке вы можете увидеть пример работы этой системы, Hadoop автоматически разделяет информацию на блоки и хранит части на разных компьютерах в нескольких экземплярах, что позволяет нам, при отвале первого блока, в данном случае, не потерять важную для нас информацию.
Классический пайплайн работы с данными можно разделить на такой:
Мы получаем данные откуда-либо. Это могут быть базы данных, структурированные или неструктурированные, логи.
С помощью Spark, Flume, Apache Kafka мы загружаем данные в наше хранилище, например hadoop, сохраняем в любой из всевозможных типов файлов.
Далее нам их нужно обрабатывать, например, с помощью Spark, Hadoop Map Reduce и т.д.
Остаётся анализировать, анализировать мы можем где угодно, либо это всякие BI-инструменты для постарения графиков и красивых дашбордов, PowerBI; можем выгружать в Excel и там анализировать, или выгружать в Python или R, анализировать и строить модели машинного обучения уже там.
Разберём пример как устроена архитектура. Один из хороших примеров, который есть в открытой сети – это AIRBNB Data Infrastructure. AIRBNB – это крупнейшая компания по сдачи в аренду жилья. Компании необходимо постоянно собирать данные о том, кто, где и какие квартиры сдаёт и также собирать данные клиентов, которые эти квартиры бронируют, просматривают, платят за них и так далее.
Спрос и предложение на такие вещи огромный и в данном случае количество хранимой информации просто огромное. Также её необходимо анализировать. Посмотрим на реализацию, которая предложила компания: на входе у нас есть event logs, т.е. все события, которые происходят на сайте. Далее у нас есть простая База данных SQL, которая может говорить какие у нас есть квартиры, где они находятся, в каком городе, какие условия проживания они могут предложить т.е. данные, которые не так часто меняются. Event logs – это клик каждого клиента на сайте, следовательно, это огромные массивы информации. Мы это всё хотим сложить в один кластер - наш Hadoop. Для этого, чтобы из базы данных переместить информацию в наш кластер используется Sqoop (приложение с интерфейсом командной строки для передачи данных между реляционными базами данных и Hadoop). Для того, чтобы логи событий попадали в базу, используется kafka.
Всё это попадет в Hadoop, Hadoop реплицируется в золотой и серебряный кластер, каждый служит для разных вещей. Cверху у нас есть Apache Airflow Sheduling – инструмент, который позволяет грамотно назначать порядок действий «что должно быть выполнено после чего». Справа мы видим Spark Cluster. Он позволяет нам анализировать огромные потоки данных, не выгружая из Hadoop, важно отметить, что всё анализируется на серебряном кластере, золотой кластер, только хранит информацию и не должен выключаться.
Большой популярностью пользуются такие технологии как Real-time и не Real-time данные. – то, что у нас процессится в реальном времени, или с небольшой задержкой. Для этого была придумана лямбда архитектура. Зачем она нужна?
Давайте представим, что мы хотим анализировать сколько людей каждую секунду пользуется нашей картой? А если у нас несколько миллионов людей и миллиарды транзакций, это становится невозможно - так как любая система не сможет это сделать.
В лямбда архитектуре есть два слоя: Real-time слой и Batch слой. Batch - это то, что у нас особо не меняется, то, что мы уже посчитали. Например, у нас есть люди, которые пользуются нашими картами. Таким образом, мы посчитали сколько у нас людей попользовались за последние 10 часов: мы считаем за всё предыдущее время, а за новый час - мы считаем каждую секунду в Real-time слое, а на выходе мы считаем результат Batch слоя + Real-time слоя.
Все мы слышали про распределённые базы данных, они также имеют название NOSQL. В чем преимущества Hadoop, Hbase легко можно понять.
Посмотрев на график, видно, как различные базы данных отвечают на один и тот же запрос на одинаковой конфигурации: чем больше секунд, тем хуже. Самая классическая и популярная MySQL отвечает на запрос 329 секунд, при этом если посмотреть на не реляционные базы данных, типа Hive, Vertica, то они гораздо быстрее, но в том, что они так быстро работают, есть и свои негативные стороны.
Вообще, когда мы говорим про большие данные, мы говорим про принцип 3V: объём, скорость обработки и разнообразность (Volume, Variety, Velocity). Но когда мы говорим про реальный мир, нам важны ещё два пункта, которые очень важны — это лимит времени на ответ и отказоустойчивость.
Что такое MapReduce?
Достарыңызбен бөлісу: |