Проблема с большим количеством данных
Хочу поделиться личным опытом и наблюдениями о том, как лучше приручить этот информационный хаос. Ведь в Облакотеке — нашем облачном сервисе хранения и обработки данных — мы с партнерами ежедневно помогаем разным компаниям, в том числе промышленным, превращать разрозненные файлы в полезную информацию.
Неструктурированные данные повсюду. Мы привыкли, что данные — это аккуратные таблички в базе, но реальность иная. В производстве и промышленности львиную долю информации генерируют машины и датчики: файлы журналов (лог-файлы) с оборудования, потоковые показания сенсоров, изображения с камер наблюдения, отчеты в PDF. Всё это летит в хранилища каждую секунду. Помню, несколько лет назад к нашему партнеру обратился ИТ-директор одного завода с почти панической просьбой: «Данные с наших станков валятся нескончаемым потоком, мы тонем в логах. Как с ними работать?» Ситуация типичная.
Оборудование нового поколения оснащено десятками датчиков, каждую минуту пишущих телеметрию: температура, вибрации, давление, состояние узлов. За сутки набегает гигантский файл, за месяц — терабайты. А нужно же не просто хранить их, но и анализировать: предсказывать поломки, искать узкие места в производстве, повышать эффективность.
Выбираем правильное хранилище
Первое, что оказалось критически важным, — правильное хранилище. Мой совет, проверенный практикой: с самого начала складывайте все сырые данные в надежное и масштабируемое облачное хранилище. В нашем случае выбор пал на объектное хранилище — по сути, бездонное облачное «ведро» для файлов. Почему не традиционная база или файловый сервер? Потому что объектные хранилища лучшего всего переваривают огромные объемы разношерстных данных. Им всё равно, видео это или текст, а масштабируются они практически бесконечно.
В упомянутом заводском проекте мы настроили сброс логов с каждой машины прямо в такое хранилище в режиме реального времени. Данные прилетают пачками, складируются по простому принципу — скажем, папка на каждый день для каждого станка. Этот «склад сырья» получился довольно хаотичный, зато мы больше не боялись, что ценный бит информации потеряется или не влезет.
Наводим порядок в хаосе данных
Однако просто собрать данные мало — их нужно обработать. И вот тут на авансцену выходит Apache Spark. Признаюсь, я поначалу скептически относился: неужели один фреймворк справится и с потоками текстовых логов, и с цифрами телеметрии? Оказалось, еще как справляется. Spark — настоящий трудяга, способный параллельно переваривать гигантские массивы информации. Мы развернули кластер Spark в облаке (удобно, что заводу не пришлось закупать серверы, — ресурсы подняли по требованию, а после вычислений они могут их отключить, чтобы не тратить деньги впустую).
Каждую ночь Spark собирает свежие суточные данные из объектного хранилища и начинает волшебство: парсит неструктурированный текст логов, вытаскивает оттуда структурированные фрагменты (например, временные метки, коды ошибок, показания датчиков), чистит явный мусор. Одновременно другие узлы кластера жонглируют потоком телеметрии, сглаживают выбросы датчиков, объединяют данные с разных устройств по времени.
В результате ночь кропотливой работы превращает вчерашний хаос из разрозненных строчек в более-менее стройный набор метрик и событий.
Конечно, не всё шло гладко. Поделюсь парой «граблей» (то есть ошибок), на которые мы с партнерами наступили, и уроками, которые из них вынесли. Во-первых, мы поняли, что недостаточно просто собрать данные, — нужно тщательно продумать их организацию и очистку.
С какими проблемами столкнулись на этом пути
В ранних экспериментах мы складывали всё в одну гигантскую папку без разбивки по дате или источнику. Spark при чтении такого массива захлебывался: слишком много мелких файлов, трудно параллелить, сложно фильтровать по времени. Получили тормоза и раздутые расходы на вычисление. Пришлось переделать: теперь строго договорились, что структура каталогов должна отражать логику данных (день/месяц/год, тип устройства и т. п.). Это классическая практика partitioning, о которой я раньше только читал, а тут прочувствовал на себе.
Во-вторых, изначально мы весьма легкомысленно относились к качеству исходных данных. Мол, уж что есть, то и анализируем. Это быстро аукнулось: грязные данные порождают грязные результаты. Теперь перед серьезным анализом обязательно запускаем этап очистки: убираем дубликаты, явно поврежденные записи, приводим форматы к единообразию (например, единицы измерения, часовые пояса). Казалось бы, мелочи, а без них никуда.
Были и приятные открытия-«находки». Одно из них — сила комбинирования разных инструментов. Например, в проекте с видеоархивами (несколько терабайт видеозаписей с дронов, обследующих трубопроводы) мы хранили сами видеофайлы всё в том же объектном хранилище, а вот извлекать из них информацию помогал не только Spark. Мы подключили специальный сервис компьютерного зрения, который прогонял видео и выдавал нам уже структурированные данные: обнаруженные дефекты, координаты, временные отметки. А дальше Spark брал эту сводку и делал то, что у него получается лучше всего: быстро проходился по миллионам записей, ища тенденции (например, в каком сегменте трубы чаще возникают дефекты) и формируя отчеты.
Получилась многоступенчатая связка: хранение данных отдельно, узкоспециализированная обработка отдельно и финальная агрегация и анализ — отдельным этапом. Такая модульность оказалась очень устойчивой: можно в любой момент заменить или доработать один из блоков, не ломая весь конвейер. С тех пор я придерживаюсь принципа: сложную задачу обработки данных лучше разбить на этапы и не пытаться решить одним монолитным скриптом.
Еще один положительный момент — гибкость и экономия в облаке. Раньше я видел, как команды боялись растущих объемов данных: закупать новое хранилище долго, сервер для обработки дорогой. В итоге данные либо удалялись по-тихому, либо их пытались ужать до потери полезности. Сейчас же, используя облачную инфраструктуру, они имеют возможность просто расширить пространство хранения по мере поступления данных (облако подстраивается под рост, и платишь только за использованные гигабайты).
А когда нужен мощный расчет — разворачиваем на час десяток дополнительных узлов Spark. Клиенту не нужно держать постоянный парк дорогих машин, и это снимает психологический барьер: можно хранить все данные, даже если сразу не ясно, пригодятся ли. Из практики скажу: зачастую ценность находят спустя месяцы, когда аналитики придумывают новый запрос к старым данным. Хорошо, когда эти данные вообще сохранились.
Какие принципы мы вывели
Для себя я их формулирую так: храни всё, что можешь; обрабатывай поступательно; автоматизируй, но понимай данные. Первое означает: не выбрасывай сырые логи и файлы, пока позволяет бюджет, — лучше иметь исторический архив. Второе: выстрой конвейер, где каждый шаг готовит почву для следующего (сырые данные → очищенные → агрегированные → проанализированные). А автоматизация нужна, чтобы справиться с объемами: вручную тут не управиться, да и человеческий фактор исключается.
Но при всех чудесах машинной обработки финально ценные инсайты рождаются из сочетания алгоритмов и экспертного взгляда. Мы в Облакотеке нередко видели, как простой вопрос инженера («А почему у нас эти параметры прыгают по ночам?») наводил на мысль посчитать кое-что дополнительное в данных — и открывалась картина, до которой алгоритм сам не додумался бы.
Конечно, технологии не стоят на месте. Сегодня на горизонте появляются новые инструменты для работы с неструктурированной информацией — например, системы вроде Lakehouse, объединяющие плюсы озера данных и традиционных баз, или специальные платформы для реального времени, способные в момент появления данных сразу применять к ним анализ. Мы тоже экспериментируем с ними, однако базовые принципы остаются неизменны.
Заключение
В заключение отмечу, что лучший способ приручить неструктурированные данные — перестать их бояться. Да, поначалу кажется, будто открываешь склад, набитый разномастным хламом. Но если организовать пространство (подходящее хранилище), наладить инструменты разбора (тот же Spark и компания) и потихоньку вырабатывать правила работы с вещами, то со временем в этом хаосе проступает система.
Лог-файлы начинают «разговаривать» и рассказывать, что не так с оборудованием. Видео и телеметрия показывают узкие места и аномалии. Документы превращаются в знания. Для меня как для практика лучшие кейсы работы с такими данными сводятся к простым истинам: хранить, обрабатывать грамотно и учиться на опыте.
Порой ценность данных раскрывается не сразу, но подход «сначала соберем и разберем, а выводы придут» уже не раз оправдал себя в проектах. Неструктурированные данные — это не проблема, а ресурс, пусть и требующий чуть более креативного подхода. Зато награда за этот подход — новые инсайты и возможности для бизнеса, которые без «бардака» в данных было бы не получить.