- tocdepth
2
Быстрый старт
Описанные ниже шаги помогут создать граф в кластере, импортировать данные и проанализировать граф с помощью запросов Gremlin или визуализации популярных алгоритмов, таких как PageRank, K-Core, Shortest Path, Label Propagation.
Перед началом
Перед созданием графа подготовьте данные для загрузки:
Пример 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>
Создание графа
В консоли управления Object Storage Service создайте бакет для хранения графовых данных.
Загрузите в бакет объекты — XML-схему и данные с вершинами и гранями графа.
В консоли управления Graph Engine Service в разделе Metadata Management нажмите Import.
Выберите тип импорта OBS, в поле Select File Path укажите путь к XML-файлу схемы, который вы загрузили на предыдущем шаге, и введите произвольное название метаданных в поле Name. Сохраните изменения — нажмите OK.
В разделе Graph Management добавьте граф — нажмите Create Graph.
Graph Name — введите название графа;
VPC — выберите виртуальную сеть, в которой будет располагаться граф;
Subnet — задайте подсеть;
Security Group — укажите группу безопасности;
Cross-AZ HA — включите опцию, если необходимо поддерживать высокую доступность графа за счет двух зон доступности;
Graph Size (Edges) — выберите масштаб графа, основываясь на числе граней.
Включите опцию Initial Data Required. Укажите, с какими данными будет работать граф:
Metadata — выберите созданные ранее метаданные;
Edge Data — нажмите Select и укажите хранящийся в бакете OBS файл с гранями;
Vertex Data — нажмите Select и укажите хранящийся в бакете OBS файл с узлами.
Сохраните параметры — нажмите Apply Now.
На странице Details подтвердите создание графа — нажмите Submit. Через несколько минут граф будет создан, и вы увидите его в разделе Graph Management.
Анализ графа
В консоли управления Graph Engine Service откройте раздел Graph Management и нажмите Access в строке с нужным графом.
Откроется окно с областью визуального представления графовых данных, библиотекой алгоритмов, строкой для ввода запросов на языке Gremlin и боковой панелью с дополнительной информацией и инструментами фильтрации.
![../_images/s__graph-analysis.png](../_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)
Визуализация ответа и лог выполнения команды:
Ответ в формате 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))
Визуализация ответа и лог выполнения команды:
Ответ в формате 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 библиотека алгоритмов позволяет визуализировать данные в зависимости от выбранного алгоритма и параметров запроса.
Чтобы выполнить алгоритм, выберите его из библиотеки, задайте параметры и запустите вычисления кнопкой .
![../_images/s__pagerank-run.png](../_images/s__pagerank-run.png)
На вкладке Running Record отобразится лог выполнения команды, и после успешного завершения вычислений результат появится в основной области:
![../_images/s__pagerank-visual.png](../_images/s__pagerank-visual.png)
Примечание
В этом примере показан результат работы алгоритма PageRank. В случае графовой структуры, содержащей информацию об аэропортах, этот алгоритм иллюстрирует связи между аэропортами с учетом расстояния и позволяет увидеть наиболее крупные хабы.
С помощью верхней панели можно выбрать другой режим представления графа, изменить масштаб или найти конкретный узел.
![../_images/s__algorithm-top-panel.png](../_images/s__algorithm-top-panel.png)
Если выбрать узел, можно увидеть его свойства на панели справа.
![../_images/s__pagerank-vertex-details.png](../_images/s__pagerank-vertex-details.png)
Как и в случае с запросами Gremlin, на вкладке Query Result после отработки алгоритма доступен ответ в JSON-формате.
См.также
Была ли статья полезной?
для Dev & Test