Как настроить базу данных Titan Graph с помощью Cassandra и ElasticSearch в Ubuntu 16.04

Вступление

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

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

Предпосылки

Для завершения этого урока вам понадобится:

  • Один сервер Ubuntu 16.04 с не менее 2 ГБ ОЗУ с пользователем без полномочий root и брандмауэром. Вы можете настроить это, следуяInitial Server Setup with Ubuntu 16.04.

  • Установлен Oracle JDK 8, что можно сделать, следуя разделу «Установка Oracle JDK» вthis Java installation article.

[[step-1 -—- download-unpacking-and-start-titan]] == Шаг 1. Скачивание, распаковка и запуск Titan

Чтобы загрузить базу данных Titan, перейдите наtheir downloads page. Вы увидите два дистрибутива Titan, доступных для скачивания. Для этого урока нам нуженTitan 1.0.0 with Hadoop 1. Это стабильный выпуск. Загрузите его на свой сервер с помощьюwget:

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

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

sudo apt-get install unzip

Затем распакуйте Титан:

unzip titan-1.0.0-hadoop1.zip

Это создает каталог с именемtitan-1.0.0-hadoop.

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

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

Вы увидите вывод, похожий на этот:

OutputForking 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, Cassandra, ElasticSearch и Gremlin-Server также запускаются вместе с ним.

Вы можете проверить статус Titan, выполнив следующую команду.

./bin/titan.sh status

Вы увидите этот вывод:

OutputGremlin-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

На следующем шаге вы увидите, как запросить график.

[[step-2 -—- querying-the-graph-using-gremlin]] == Шаг 2 - Запрос графика с использованием Gremlin

Gremlin - этоGraph Traversal Language, который используется для запроса, анализа и управления базами данных Graph. Теперь, когда Titan настроен и запущен, вы будете использовать Gremlin для создания и запроса узлов и ребер из Titan.

Чтобы использовать Gremlin, откройте консоль Gremlin, введя следующую команду.

./bin/gremlin.sh

Вы увидите ответ, подобный этому:

Output          \,,,/
         (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')

Вы увидите этот вывод:

Output==>standardtitangraph[cassandrathrift:[127.0.0.1]]

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

Методopen() создает новый график Титана или открывает существующий, используя параметры конфигурации, представленные в указанном файле свойств. Файл конфигурации содержит параметры конфигурации высокого уровня, например, какой сервер хранения используется, сервер кэширования и некоторые другие параметры. Вы можете создать собственный файл конфигурации и использовать его вместо значений по умолчанию, что вы и сделаете на шаге 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(
...
...

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

g = graph.traversal()

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

sammy = g.addV(label, 'fish', 'name', 'Sammy', 'residence', 'The Deep Blue Sea').next()
company = g.addV(label, 'company', 'name', 'DigitalOcean', 'website', 'www.digitalocean.com').next()

В этом примере мы создали две вершины с меткамиfish иcompany соответственно. Мы также определили два свойства, а именноname иresidence для первой вершины иname иwebsite для второй вершины. Теперь обратимся к этим вершинам с помощью переменныхsammy иcompany.

Например, чтобы вывести список всех свойств первой вершины, выполните следующую команду:

g.V(sammy).properties()

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

Output==>vp[name->Sammy]
==>vp[residence->The Deep Blue Sea]

Вы также можете добавить новое свойство в вершину. Давайте добавим цвет:

g.V(sammy).property('color', 'blue')

Теперь давайте определим отношения между этими двумя вершинами. Это достигается за счет создания между нимиedge.

company.addEdge('hasMascot', sammy, 'status', 'high')

Это создает границу междуsammy иcompany с меткойhasMascot и свойство с именемstatus со значениемhigh.

Теперь давайте возьмем талисман компании:

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

Это возвращает исходящие вершины из вершиныcompany и ребро между ними, помеченное какhasMascot. Мы также можем сделать обратное и получить компанию, связанную с талисманомsammy, следующим образом:

g.V(sammy).in('hasMascot')

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

Выйдите из консоли Gremlin, нажавCTRL+C.

Теперь давайте добавим несколько пользовательских настроек для Titan.

[[step-3 -—- configuring-titan]] == Шаг 3 - Настройка Titan

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

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

Сначала создайте файл конфигурации:

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

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

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

storage.backend=cassandrathrift
storage.hostname=localhost

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

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

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

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

Наконец, добавьте эту строку, чтобы сообщить Gremlin Server тип графика, который он будет обслуживать.

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

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

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

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

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

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

Перейдите в разделgraphs и найдите эту строку:

conf/gremlin-server/gremlin-server.yaml

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

Замените это на это:

conf/gremlin-server/gremlin-server.yaml

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

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

Теперь перезапустите Titan, остановив Titan и запустив его снова.

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

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

[[step-4 -—- manage-titan-with-systemd]] == Шаг 4. Управление Titan с помощью Systemd

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

Чтобы настроить это, мы создадим файл модуля Systemd для Titan, чтобы мы могли управлять им.

Для начала мы создаем файл для нашего приложения внутри каталога/etc/systemd/system с расширением.service:

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

Файл блока состоит из разделов. В разделе[Unit] указаны метаданные и зависимости нашей службы, включая описание нашей службы и время ее запуска.

Добавьте эту конфигурацию в файл:

/etc/systemd/system/titan.service

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

Мы указываем, что служба должна запускатьafter, цель сети была достигнута. Другими словами, мы запускаем этот сервис только после того, как сетевые сервисы готовы.

После раздела[Unit] мы определяем раздел[Service], в котором мы указываем, как запустить службу. Добавьте это в файл конфигурации:

/etc/systemd/system/titan.service

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

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

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

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

Наконец, мы добавляем раздел[Install], который выглядит так:

/etc/systemd/system/titan.service

[Install]
WantedBy=multi-user.target

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

Сохраните файл, закройте редактор и запустите новый сервис:

sudo systemctl start titan

Затем включите эту службу, чтобы при каждом запуске сервера Titan запускался:

sudo systemctl enable titan

Вы можете проверить статус Titan с помощью следующей команды:

sudo systemctl status titan

Чтобы узнать больше о файлах модулей, прочитайте руководствоUnderstanding Systemd Units and Unit files.

Заключение

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

Теперь, когда вы настроили Titan, вы должны узнать больше о Tinkerpop3 и Gremlin, посмотрев наofficial documentation.

Related