Продвигая наш новый курс по графовой аналитике больших данных в бизнес-приложениях, сегодня рассмотрим, что такое Nebula Graph и как использовать мощные возможности обработки графов этой NoSQL-СУБД в сочетании с Apache Spark, одним из самых популярных механизмов анализа данных.
Что такое Nebula Graph и как это работает
Nebula Graph — это распределенная, легко масштабируемая графовая база данных с открытым исходным кодом. Она способна размещать графы с сотнями миллиардов вершин и триллионами ребер, обслуживая запросы к ним практически в режиме реального времени. Будучи написана на C++ и оптимизирована для задач графовой аналитике больших данных, Nebula Graph показывает высокую производительность и отличную масштабируемость. Архитектура этой NoSQL-СУБД поддерживает масштабирование без прерывания службы базы данных. Дополнительную скорость и экономическую эффективность использования Nebula Graph дают SSD-диски, которые обеспечивают сбалансированное чтение и запись.
Nebula Graph удобна для разработчиков: она поддерживает клиентов на Java, Python, C++ и Go, а также обеспечивает строгий контроль доступа на основе ролей и внешние серверы аутентификации, в т.ч. LDAP для повышения безопасности данных. Нативный язык запросов Nebula Graph, nGQL, представляет собой декларативный, совместимый с openCypher язык SQL-подобных текстовых запросов. Работать с данными в Nebula Graph можно, не превращая их в реляционные таблицы, с возможностью свободного добавления, обновления и удаления. Nebula Graph поддерживает интеграцию с Apache Spark, Flink и HBase. Эта графовая СУБД используется многими крупными компаниями, среди которых Tencent, Vivo, Meituan и JD Digits, в рамках следующих сценариев:
- обнаружение мошенничества в финансовых транзакциях;
- формирование персональных рекомендаций по контенту, продуктам и услугам в режиме реального времени, аналогично тому, что мы разбирали в этой статье;
- разработка интеллектуальных систем вопросов и ответов — естественные языки могут быть преобразованы в графы знаний и сохранены в Nebula Graph. Вопрос на естественном языке, может быть решен семантическим синтаксическим анализатором, а возможные ответы могут быть извлечены из графа знаний и предоставлены пользователю.
- анализ социальных связей, о чем мы писали здесь – Nebula Graph может обрабатывать информацию из соцсетей о миллиардах людей и триллионах отношений, оперативно предоставляя ответы на запросы для рекомендаций по поиску друзей и сотрудников.
Далее рассмотрим, как использовать мощные возможности обработки графов Nebula Graph в сочетании с Apache Spark, одним из самых популярных механизмов анализа данных.
Интеграция с Apache Spark
Разработчики выделяют следующие способы совместной работы Nebula Graph и Apache Spark: 3 из них основаны на библиотеках Spark Connector, Nebula Exchange и Nebula Algorithm, а 4-ый способ базируется на PySpark, Python-интерфейс Spark.
Начнем с Nebula Spark Connector — это библиотека Spark, позволяющая Spark-приложениям считывать и записывать данные в Nebula Graph в виде датафреймов. Nebula Exchange, построенный поверх Nebula Spark Connector, представляет собой библиотеку и приложение Spark для переноса различных источников данных, таких как MySQL, Neo4j, PostgreSQL, ClickHouse, Hive и пр., в Nebula Graph. Помимо записи непосредственно в Nebula Graph, он также может дополнительно генерировать SST-файлы (Sorted String Table) для переноса вычислений хранилища из кластера Nebula Graph в кластер Apache Spark. Файл SST — это внутренний файл, содержащий произвольно длинный набор упорядоченных пар ключ-значение для эффективного хранения больших объемов таких данных. Весь процесс создания файлов SST в основном выполняется Exchange Reader, sstProcessor и sstWriter. Библиотека Nebula Algorithm на основе Nebula Spark Connector и GraphX, представляет собой модуль Spark для запуска графовых алгоритмов этого фреймворка (PageRank, LPA и пр.) поверх данных графов из Nebula Graph.
Рассмотрим подробнее Nebula Spark Connector. В 3-ей версии этой библиотеки, выпущенной 14 февраля 2022 года, добавлены следующие новые функции:
- поддержка большего количества конфигураций подключения – настройка тайм-аута, число повторные попытки и пр.;
- больше конфигураций данных, например, может ли vertexId быть записан как свойство вершины, могут ли атрибуты srcId, dstId и rank быть записаны как свойства ребра;
- Spark Reader поддерживает чтение данных из Nebula Graph в GraphX как VertexRD и EdgeRDD, а также поддерживает vertexId типа String;
- использование SparkSQL DataSourceV2 для расширения источника данных;
- поддержка обновления в рамках режима записи UPDATE в NebulaGraph;
- поддержка удаления в режиме записи DELETE в NebulaGraph.
Например, следующий код отвечает за чтение вершин и ребер из Nebula Graph, чтобы построить граф в GraphX Apache Spark:
val config = NebulaConnectionConfig .builder() .withMetaAddress("127.0.0.1:9559") .build() val nebulaReadVertexConfig = ReadNebulaConfig .builder() .withSpace("exchange") .withLabel("person") .withNoColumn(false) .withReturnCols(List("birthday")) .withLimit(10) .withPartitionNum(10) .build() val nebulaReadEdgeConfig = ReadNebulaConfig .builder() .withSpace("exchange") .withLabel("knows1") .withNoColumn(false) .withReturnCols(List("timep")) .withLimit(10) .withPartitionNum(10) .build() val vertex = spark.read.nebula(config, nebulaReadVertexConfig).loadVerticesToGraphx() val edgeRDD = spark.read.nebula(config, nebulaReadEdgeConfig).loadEdgesToGraphx() val graph = Graph(vertexRDD, edgeRDD)
Как работать с инструментами графовой аналитики больших данных для реальных бизнес-задач, вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков больших данных в Москве:
Источники