Настройка графовой базы данных Titan, Cassandra и ElasticSearch в Ubuntu 16.04

Titan – это открытая графовая база данных высокой масштабируемости. Графовые базы данных – это БД NoSQL, которые хранят данные в узлах и ребрах. Графовые базы данных подходят для приложений, которые используют высокосвязные данные, где взаимосвязь между данными является важной частью функциональности приложения. К примеру, такие данные лежат в основе работы социальных сетей. Titan используется для хранения и извлечения больших объемов данных, которые распределяются между несколькими машинами. Titan может взаимодействовать с другими системами хранения на бэкенде, например, с Apache Cassandra, HBase и BerkeleyDB.

Данный мануал поможет установить Titan 1.0 и настроить взаимодействие с Cassandra и ElasticSearch, которые поставляются вместе с Titan. Cassandra работает как хранилище базовых данных, а полнотекстовая поисковая система ElasticSearch обрабатывает сложные операции поиска в БД. Также вы узнаете, как создавать и запрашивать данные из базы с помощью Gremlin.

Требования

1: Загрузка, распаковка и запуск Titan

Откройте сайт Titan. На странице вы увидите два доступных дистрибутива Titan. В этом мануале используется стабильный релиз Titan 1.0.0 with Hadoop 1. Загрузите его:

wget http://s3.thinkaurelius.com/downloads/titan/titan-1.0.0-hadoop1.zip

Как только загрузка будет завершена, распакуйте zip-файл. Программа для распаковки файлов по умолчанию не установлена в системе. Установите ее:

sudo apt-get install unzip

Распакуйте архив Titan:

unzip titan-1.0.0-hadoop1.zip

Это создаст каталог titan-1.0.0-hadoop.

Запустите Titan. Перейдите в каталог titan-1.0.0-hadoop и вызовите сценарий оболочки.

cd titan-1.0.0-hadoop1
./bin/titan.sh start

Вы увидите такой вывод:

Forking Cassandra...
Running `nodetool statusthrift`... OK (returned exit status 0 and printed string "running").
Forking Elasticsearch...
Connecting to Elasticsearch (127.0.0.1:9300)...... OK (connected to 127.0.0.1:9300).
Forking Gremlin-Server...
Connecting to Gremlin-Server (127.0.0.1:8182)...... OK (connected to 127.0.0.1:8182).
Run gremlin.sh to connect.
Titan зависит от некоторых других инструментов. Поэтому при запуске Titan также запускаются Cassandra, ElasticSearch и Gremlin-Server.

Проверьте состояние Titan:

./bin/titan.sh status
Gremlin-Server (org.apache.tinkerpop.gremlin.server.GremlinServer) is running with pid 7490
Cassandra (org.apache.cassandra.service.CassandraDaemon) is running with pid 7077
Elasticsearch (org.elasticsearch.bootstrap.Elasticsearch) is running with pid 7358

2: Запрос графа с помощью Gremlin

Gremlin – это предметно-ориентированный язык для обхода графа, который используется для запроса, анализа и управления графовыми базами данных. После запуска Titan можно использовать Gremlin для создания и запроса узлов и ребер БД Titan.

Откройте Gremlin Console:

./bin/gremlin.sh

На экране появится:

         \,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.hadoop
plugin activated: tinkerpop.utilities
plugin activated: aurelius.titan
plugin activated: tinkerpop.tinkergraph
gremlin>

Консоль Gremlin загружает несколько плагинов для поддержки функций Titan и Gremlin.

Сначала создайте экземпляр объекта графа. Этот объект представляет собой граф, с которым вы работаете в настоящее время. Он имеет несколько методов, которые могут помочь управлять графом, например, добавлять вершины, создавать ярлыки и обрабатывать транзакции. Выполните эту команду, чтобы создать экземпляр объекта графа:

graph = TitanFactory.open('conf/titan-cassandra-es.properties')
==>standardtitangraph[cassandrathrift:[127.0.0.1]]

Вывод указывает тип объекта, возвращаемого методом TitanFactory.open(), который является стандартным графом standardtitangraph. Он также показывает сервер хранения, который использует граф (cassandrathrift), и что он подключен через localhost (127.0.0.1).

Метод open() создает новый граф Titan или открывает существующий граф на основе параметров конфигурации, которые хранятся в указанном файле properties. Файл конфигурации содержит параметры высшего уровня: хранилище на бэкенде, бэкэнд кэширования и несколько других параметров. Вы можете создать пользовательский конфигурационный файл и использовать его вместо стандартного (об этом – в разделе 3).

Теперь полученный объект графа хранится в переменной graph. Чтобы взглянуть на доступные свойства и методы объекта, введите graph. и нажмите TAB.

gremlin> graph.
addVertex(                    assignID(                     buildTransaction()            close()
closeTransaction(             commit(                       compute(                      compute()
configuration()               containsEdgeLabel(            containsPropertyKey(          containsRelationType(
containsVertexLabel(          edgeMultiQuery(               edgeQuery(                    edges(
features()                    getEdgeLabel(                 getOrCreateEdgeLabel(         getOrCreatePropertyKey(
...
...

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

g = graph.traversal()

Для обхода будет использоваться переменная g. Теперь создайте пару вершин. Вершины – это как ряды в SQL. Каждая вершина имеет свой тип (или label) и свойства, как и поля в SQL. Выполните команду:

8host = g.addV(label, 'user', 'name', '8host', 'residence', 'Everywhere').next()
company = g.addV(label, 'company', 'name', '8hostBlog', 'website', 'www.8host.com').next()

Эти команды создадут две вершины с метками user и company. У первой вершины есть свойства name и residence, а у второй вершины — name и website. Теперь попробуйте получить доступ к вершинам с помощью переменных 8host и company.

К примеру, чтобы просмотреть свойства первой вершины, можно ввести:

g.V(8host).properties()
==>vp[name->8host]
==>vp[residence->Everywhere]

Также вы можете добавить новое свойство вершины:

g.V(8host).property('color', 'blue')

Теперь нужно определить связь между этими вершинами. Для этого нужно создать между ними ребро.

company.addEdge('hasUser', 8host, 'status', 'high')

Эта команда создаст ребро между 8host и company с меткой hasUser, свойством status и значением high.

С помощью этой метки можно узнать пользователя company:

g.V(company).out('hasUser')

Эта команда возвращает исходящие вершины из вершины company, и ребро между ними с меткой hasUser. Также можно сделать обратное и связать вершину company с пользователем 8host следующим образом:

g.V(8host).in('hasUser')

Вот несколько основных команд Gremlin, которых хватит для начала. Чтобы узнать больше, ознакомьтесь с документацией Apache Tinkerpop3.

Чтобы закрыть консоль Gremlin, нажмите Ctrl+C.

3: Пользовательская настройка Titan

Создайте новый конфигурационный файл для пользовательских параметров Titan.

Titan имеет подключаемый уровень хранения. Это значит, что Titan использует другую БД для хранения данных вместо того, чтобы хранить данные самостоятельно. В настоящее время Titan предоставляет три варианта для такого хранилища: Cassandra, HBase и BerkeleyDB. В этом мануале используется Cassandra, так как эта БД обладает высокой масштабируемостью и доступностью.

Создайте файл:

nano conf/gremlin-server/custom-titan-config.properties

Добавьте в него следующие параметры, чтобы определить хранилище на бэкенде. Значение cassandrathrift установит Cassandra в качестве такого хранилища и включит интерфейс thrift.

storage.backend=cassandrathrift
storage.hostname=localhost

Затем добавьте эти три строки, чтобы определить поисковую систему. В качестве поискового сервера используется elasticsearch.

...
index.search.backend=elasticsearch
index.search.hostname=localhost
index.search.elasticsearch.client-only=true

Третья строка указывает, что ElasticSearch – это клиент, который не хранит данные. Если установить значение false, программа создаст обычный узел кластера ElasticSearch, который может хранить данные, а сейчас это не нужно.

В конец файла добавьте параметры Gremlin Server:

...
gremlin.graph=com.thinkaurelius.titan.core.TitanFactory

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

Сохраните файл и выйдите из редактора.

Теперь нужно добавить новый конфигурационный файл в настройки Gremlin Server. Откройте файл:

nano conf/gremlin-server/gremlin-server.yaml

Найдите раздел graphs и строку:

..
graph: conf/gremlin-server/titan-berkeleyje-server.properties}
..

Замените ее:

..
graph: conf/gremlin-server/custom-titan-config.properties}
..

Сохраните и закройте файл.

Перезапустите Titan:

./bin/titan.sh stop
./bin/titan.sh start

4: Управление Titan с помощью Systemd

База данных Titan должна запускаться автоматически вместе с сервером. Если сервер случайно перезагрузится или случится сбой, БД Titan должна запуститься автоматически.

Для этого создайте unit-файл для сервиса Titan.

Создайте файл с расширением .service в каталоге /etc/systemd/system.

sudo nano /etc/systemd/system/titan.service

Unit-файл состоит из нескольких разделов. Раздел [Unit] содержит метаданные и зависимости сервиса, а также его описание и порядок запуска.

Добавьте в файл:

[Unit]
Description=The Titan database
After=network.target

Этот сервис будет запускаться только после сетевых сервисов.

Затем нужно определить раздел [Service], в котором указаны условия запуска сервиса. Вставьте в файл:

[Service]
User=8host
Group=www-data
Type=forking
Environment="PATH=/home/8host/titan-1.0.0-hadoop1/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
WorkingDirectory=/home/8host/titan-1.0.0-hadoop1/
ExecStart=/home/8host/titan-1.0.0-hadoop1/bin/titan.sh start
ExecStop=/home/8host/titan-1.0.0-hadoop1/bin/titan.sh stop

Сначала здесь определяются пользователь и группа, которые запускают сервис. Затем нужно указать тип сервиса. Тип по умолчанию — simple. Поскольку сценарий запуска Titan запускает также и дочерние программы, нужно указать тип сервиса forking.

Затем указывается переменная среды PATH, рабочий каталог Titan и команда для запуска Titan. Команду запуска Titan можно поместить в переменную ExecStart.

Переменная ExecStop определяет команду отключения сервиса.

Добавьте раздел [Install]:

[Install]
WantedBy=multi-user.target

Этот раздел позволяет включать и отключать сервис. Директива WantedBy создает каталог multi-user.target внутри каталога /etc/systemd/system. Systemd создаст символическую ссылку на этот файл. Отключение сервиса приведет к удалению этого файла из каталога.

Сохраните и закройте файл.

Запустите новый сервис:

sudo systemctl start titan

Чтобы добавить Titan в автозагрузку, включите сервис:

sudo systemctl enable titan

Проверьте состояние Titan:

sudo systemctl status titan

Читайте также: Основы Systemd: управление сервисами и журналирование

Заключение

Теперь на сервере есть базовая настройка Titan. Если вы хотите получить больше информации об архитектуре Titan, обратитесь к официальной документации.

Также вам может пригодиться официальная документация Tinkerpop3 и Gremlin.

Tags: , , , , ,