Настройка графовой базы данных Titan, Cassandra и ElasticSearch в Ubuntu 16.04
Java, Ubuntu | Комментировать запись
Titan – это открытая графовая база данных высокой масштабируемости. Графовые базы данных – это БД NoSQL, которые хранят данные в узлах и ребрах. Графовые базы данных подходят для приложений, которые используют высокосвязные данные, где взаимосвязь между данными является важной частью функциональности приложения. К примеру, такие данные лежат в основе работы социальных сетей. Titan используется для хранения и извлечения больших объемов данных, которые распределяются между несколькими машинами. Titan может взаимодействовать с другими системами хранения на бэкенде, например, с Apache Cassandra, HBase и BerkeleyDB.
Данный мануал поможет установить Titan 1.0 и настроить взаимодействие с Cassandra и ElasticSearch, которые поставляются вместе с Titan. Cassandra работает как хранилище базовых данных, а полнотекстовая поисковая система ElasticSearch обрабатывает сложные операции поиска в БД. Также вы узнаете, как создавать и запрашивать данные из базы с помощью Gremlin.
Требования
- Сервер Ubuntu 16.04 (2 Гб RAM минимум).
- Пользователь с доступом к sudo и настроенный брандмауэр (об этом можно прочесть в руководстве по начальной настройке).
- Oracle JDK 8 (инструкции по установке вы найдете в специальном разделе руководства Установка Java в Ubuntu 16.04).
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: Cassandra, ElasticSearch, Gremlin, Oracle JDK 8, Titan, Ubuntu 16.04