Быстрый старт

Описанные ниже шаги помогут создать граф в кластере, импортировать данные и проанализировать граф с помощью запросов Gremlin или визуализации популярных алгоритмов, таких как PageRank, K-Core, Shortest Path, Label Propagation.

Перед началом

Перед созданием графа подготовьте данные для загрузки:

  • CSV-файлы с данными о вершинах и гранях;

  • XML-схему, описывающую свойства вершин и граней.

Пример XML-схемы для графа с данными об аэропортах мира

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<PMML version="3.0" xmlns="http://www.dmg.org/PMML-3-0">
   <labels>
      <label name="node">
         <properties>
            <property name="city" cardinality="single" dataType="string" />
            <property name="code" cardinality="single" dataType="string" />
            <property name="country_code" cardinality="single" dataType="string" />
            <property name="title" cardinality="single" dataType="string" />
            <property name="date" cardinality="single" dataType="string" />
            <property name="desc" cardinality="single" dataType="string" />
            <property name="elev" cardinality="single" dataType="int" />
            <property name="icao" cardinality="single" dataType="string" />
            <property name="labelV" cardinality="single" dataType="string" />
            <property name="lat" cardinality="single" dataType="double" />
            <property name="lon" cardinality="single" dataType="double" />
            <property name="longest" cardinality="single" dataType="int" />
            <property name="region" cardinality="single" dataType="string" />
            <property name="runways" cardinality="single" dataType="int" />
            <property name="type" cardinality="single" dataType="string" />
         </properties>
      </label>
      <label name="edge">
         <properties>
            <property name="dist" cardinality="single" dataType="int" />
            <property name="labelE" cardinality="single" dataType="string" />
         </properties>
      </label>
   </labels>
</PMML>

Создание графа

  1. В консоли управления Object Storage Service создайте бакет для хранения графовых данных.

  2. Загрузите в бакет объекты — XML-схему и данные с вершинами и гранями графа.

  3. В консоли управления Graph Engine Service в разделе Metadata Management нажмите Import.

  4. Выберите тип импорта OBS, в поле Select File Path укажите путь к XML-файлу схемы, который вы загрузили на предыдущем шаге, и введите произвольное название метаданных в поле Name. Сохраните изменения — нажмите OK.

    ../_images/s__import-metadata.png
  5. В разделе Graph Management добавьте граф — нажмите Create Graph.

    • Graph Name — введите название графа;

    • VPC — выберите виртуальную сеть, в которой будет располагаться граф;

    • Subnet — задайте подсеть;

    • Security Group — укажите группу безопасности;

    • Cross-AZ HA — включите опцию, если необходимо поддерживать высокую доступность графа за счет двух зон доступности;

    • Graph Size (Edges) — выберите масштаб графа, основываясь на числе граней.

  6. Включите опцию Initial Data Required. Укажите, с какими данными будет работать граф:

    • Metadata — выберите созданные ранее метаданные;

    • Edge Data — нажмите Select и укажите хранящийся в бакете OBS файл с гранями;

    • Vertex Data — нажмите Select и укажите хранящийся в бакете OBS файл с узлами.

  7. Сохраните параметры — нажмите Apply Now.

  8. На странице Details подтвердите создание графа — нажмите Submit. Через несколько минут граф будет создан, и вы увидите его в разделе Graph Management.

Анализ графа

В консоли управления Graph Engine Service откройте раздел Graph Management и нажмите Access в строке с нужным графом.

Откроется окно с областью визуального представления графовых данных, библиотекой алгоритмов, строкой для ввода запросов на языке Gremlin и боковой панелью с дополнительной информацией и инструментами фильтрации.

../_images/s__graph-analysis.png

Запросы Gremlin

GES совместим с фреймворком Apache TinkerPop Gremlin 3.3.0, поэтому для анализа графа используются запросы на языке Gremlin.

Чтобы отправить запрос, введите команду в поле Gremlin и нажмите Ввод (Enter) на клавиатуре. На вкладке Running Record будет доступен лог выполнения команды, а на вкладке Query Result — ответ в JSON-формате.

Допустим, есть графовая структура с информацией об аэропортах. Узел — это аэропорт с его кодом, координатами, названием, городом и другими данными. Грани представляют связь и расстояние между аэропортами.

Рассмотрим примеры запросов для такого графа.

Пример 1. Найти кратчайший путь из Домодедово (DME) в Катманду (KTM).
  • Команда:

    g.V("DME").repeat(out().simplePath()).until(hasId("KTM")).path().limit(1)
    
  • Визуализация ответа и лог выполнения команды:

    ../_images/s__example-dme.png
  • Ответ в формате JSON

    {
        "data": {
           "vertices": [
              {
                 "id": "DME",
                 "label": "airport"
              },
              {
                 "id": "SIN",
                 "label": "airport"
              },
              {
                 "id": "KTM",
                 "label": "airport"
              }
           ],
           "runtime": 0.440911073
        }
     }
    
Пример 2. Показать связи аэропорта Шереметьево на расстоянии до 500 км.
  • Команда:

    g.V('SVO').outE('route').has('dist', lt(500))
    
  • Визуализация ответа и лог выполнения команды:

    ../_images/s__example-svo.png
  • Ответ в формате JSON

    {
       "data": {
          "edges": [
             {
                "index": "79",
                "source": "SVO",
                "id": "SVO-KBP-79",
                "label": "route",
                "properties": {
                   "labelE": [
                      "route"
                   ],
                   "dist": [
                      473
                   ]
                },
                "target": "KBP"
             },
             {
                "index": "80",
                "source": "SVO",
                "id": "SVO-LED-80",
                "label": "route",
                "properties": {
                   "labelE": [
                      "route"
                   ],
                   "dist": [
                      372
                   ]
                },
                "target": "LED"
             },
             {
                "index": "97",
                "source": "SVO",
                "id": "SVO-MSQ-97",
                "label": "route",
                "properties": {
                   "labelE": [
                      "route"
                   ],
                   "dist": [
                      399
                   ]
                },
                "target": "MSQ"
             },
             {
                "index": "101",
                "source": "SVO",
                "id": "SVO-VNO-101",
                "label": "route",
                "properties": {
                   "labelE": [
                      "route"
                   ],
                   "dist": [
                      485
                   ]
                },
                "target": "VNO"
             },
             {
                "index": "115",
                "source": "SVO",
                "id": "SVO-GOJ-115",
                "label": "route",
                "properties": {
                   "labelE": [
                      "route"
                   ],
                   "dist": [
                      246
                   ]
                },
                "target": "GOJ"
             },
             {
                "index": "124",
                "source": "SVO",
                "id": "SVO-HRK-124",
                "label": "route",
                "properties": {
                   "labelE": [
                      "route"
                   ],
                   "dist": [
                      420
                   ]
                },
                "target": "HRK"
             },
             {
                "index": "171",
                "source": "SVO",
                "id": "SVO-EGO-171",
                "label": "route",
                "properties": {
                   "labelE": [
                      "route"
                   ],
                   "dist": [
                      369
                   ]
                },
                "target": "EGO"
             },
             {
                "index": "173",
                "source": "SVO",
                "id": "SVO-KZN-173",
                "label": "route",
                "properties": {
                   "labelE": [
                      "route"
                   ],
                   "dist": [
                      461
                   ]
                },
                "target": "KZN"
             },
             {
                "index": "175",
                "source": "SVO",
                "id": "SVO-ULV-175",
                "label": "route",
                "properties": {
                   "labelE": [
                      "route"
                   ],
                   "dist": [
                      442
                   ]
                },
                "target": "ULV"
             },
             {
                "index": "177",
                "source": "SVO",
                "id": "SVO-SKX-177",
                "label": "route",
                "properties": {
                   "labelE": [
                      "route"
                   ],
                   "dist": [
                      334
                   ]
                },
                "target": "SKX"
             }
          ],
          "runtime": 0.038627908
       }
    }
    

Визуализация алгоритмов

Встроенная в GES библиотека алгоритмов позволяет визуализировать данные в зависимости от выбранного алгоритма и параметров запроса.

Чтобы выполнить алгоритм, выберите его из библиотеки, задайте параметры и запустите вычисления кнопкой Кнопка Run.

../_images/s__pagerank-run.png

На вкладке Running Record отобразится лог выполнения команды, и после успешного завершения вычислений результат появится в основной области:

../_images/s__pagerank-visual.png

Примечание

В этом примере показан результат работы алгоритма PageRank. В случае графовой структуры, содержащей информацию об аэропортах, этот алгоритм иллюстрирует связи между аэропортами с учетом расстояния и позволяет увидеть наиболее крупные хабы.

С помощью верхней панели можно выбрать другой режим представления графа, изменить масштаб или найти конкретный узел.

../_images/s__algorithm-top-panel.png

Если выбрать узел, можно увидеть его свойства на панели справа.

../_images/s__pagerank-vertex-details.png

Как и в случае с запросами Gremlin, на вкладке Query Result после отработки алгоритма доступен ответ в JSON-формате.

Запустили Evolution free tier
для Dev & Test
Получить