Интеграция Nebula Graph с Apache Spark

Nebula Graph Apache Spark, курсы Spark для Data Science анализ данных дата-инженеров, обучение Apache Spark, Spark ML GraphX GraphFrames, обучение инженеров Machine Learning, Школа Больших Данных Учебный Центр Коммерсант

Продвигая наш новый курс по графовой аналитике больших данных в бизнес-приложениях, сегодня рассмотрим, что такое 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’ов и аналитиков больших данных в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://docs.nebula-graph.io/3.2.0/1.introduction/1.what-is-nebula-graph/
  2. https://nebula-graph.io/posts/work-with-nebula-graph-apache-spark
  3. https://github.com/vesoft-inc/nebula-spark-connector
Поиск по сайту