Process Mining на Hadoop
Что делать, если у Вас большой лог-файл для построения графа процесса и ваш компьютер очень долго пытается произвести все необходимые вычисления? Есть решение: вы можете использовать Hadoop и библиотеку PM4PY!
В данной статье будет рассказано, как можно на Hadoop проанализировать и обработать лог, рассчитать граф и отрисовать его на локальном компьютере, используя Graphviz.
Для начала нужно загрузить данные на HDFS. Самый простой способ — копирование файлов через веб-интерфейс файлового менеджера в Hue. Веб-интерфейс интуитивно понятен и расположен по адресу http://[Hue_node]:8888/filebrowser/. Однако, если размер файла от нескольких гигабайт, то таким способом данные скорее всего могут не загрузиться. В таком случае можно рекомендовать использовать WinSCP.
Когда файлы будут загружены с помощью WinSCP, необходимо выполнить команду для их перемещения в HDFS:
hadoop fs -put /путь_куда_загружен_файл /путь_куда_переместить_файл
Если планируется загружать данные в таблицы и работать с HiveQL запросами, то каждый файл при перемещении на HDFS нужно размещать в отдельной директории.
Прежде, чем рассчитывать и отрисовывать граф, нужно проанализировать лог. По моему опыту удобнее проводить анализ лога в Hive. С помощью HiveQL запросов можно ознакомиться с данными: узнать какие столбцы есть в логе, найти и удалить технические события. Итоговый лог лучше загрузить в новую таблицу и затем сохранить в файл.
Примеры HiveQL-запросов:
Когда лог проанализирован и очищен, можно приступать к расчету графа. На данном этапе можно использовать PySpark. Код для подключения в JupyterHub к PySpark приведен ниже:
Чтобы узнать актуальные директории для подключения, нужно выполнить следующие команды:
Данные из файла загружаем в RDD.
RDD — основная концепция Spark
Ключ к пониманию Spark — это RDD: Resilient Distributed Dataset. По сути это надежная распределенная таблица (на самом деле RDD содержит произвольную коллекцию, но удобнее всего работать с кортежами, как в реляционной таблице). RDD может быть полностью виртуальной и просто знать, как она породилась, чтобы, например, в случае сбоя узла, восстановиться. А может быть и материализована — распределенно, в памяти или на диске (или в памяти с вытеснением на диск). Также, внутри, RDD разбита на партиции — это минимальный объем RDD, который будет обработан каждым рабочим узлом.
Перед расчетом графа нужно определить какие столбцы являются time:timestamp, case:concept:name, case:concept, с помощью PySpark дату нужно преобразовать к необходимому формату YYYY-MM-DD HH:MI:SS, отсортировать лог по времени. Затем лог передать в PM4PY и произвести расчет с помощью выбранного майнера.
И в завершении статьи небольшой лайфхак
Предположим, на Hadoop отсутствует возможность установить Graphviz и отрисовать рассчитанный граф можно только на локальном компьютере. Есть простое решение! Рассчитанный граф сохраняется в файл pickle, скачивается на локальный компьютер и затем отрисовывается. Расчет графа и сохранение в pickle-файл:
«Отрисовка» графа на компьютере:
Итак, если у Вас большой лог-файл и необходимо построить граф процесса, то вы не ограничены возможностями вашего компьютера и в обработке больших данных вам может помочь Hadoop.