如何使用Cassandra和ElasticSearch在Ubuntu 16.04上设置Titan Graph数据库

Titan是一个高可扩展性的开源图形数据库。 Graph数据库是一种NoSQL,其中所有数据都作为节点和边存储。图形数据库适用于使用高度连接的数据的应用程序,其中...

介绍

Titan是一个高度可扩展的开源图形数据库。 图形数据库是一种NoSQL数据库,其中所有数据都作为节点存储。 图形数据库适用于使用高度连接的数据的应用程序,数据之间的关系是应用程序功能的重要组成部分,如社交网站。 Titan用于存储和查询分布在多台机器上的大容量数据。 它可以配置为使用任何可用的存储后端,如Apache Cassandra,HBase和BerkeleyDB。 这样,如果您需要更改数据存储,将来更容易避免供应商锁定。

在本教程中,您将安装Titan 1.0。 然后,您将配置Titan使用Cassandra和ElasticSearch,两者都与Titan捆绑在一起。 Cassandra作为保存底层数据的数据存储,而ElasticSearch是一种免费文本搜索引擎,可用于在数据库中执行一些复杂的搜索操作。 您还将使用Gremlin从数据库创建和查询数据。

先决条件

要完成本教程,您将需要:

第1步 - 下载,开箱和启动Titan

要下载Titan数据库,请转到他们的下载页面 您将看到两个Titan发行版可供下载。 对于本教程,我们希望Titan 1.0.0与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-1.0.0-hadoop目录,并调用shell脚本启动Titan。

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取决于一大堆其他工具。 所以每当泰坦开始,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是一种图形遍历语言 ,用于查询,分析和操作Graph数据库。 现在,Titan已经建立起来,您将使用Gremlin来创建和查询Titan的节点和边缘。

要使用Gremlin,请通过发出以下命令打开Gremlin控制台。

./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图,或者打开一个现有的图。 配置文件包含高级配置选项,如要使用的存储后端,缓存后端以及其他一些选项。 您可以创建自定义配置文件,并使用它,而不是默认值,您将在第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中的字段。 执行此命令:

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()

在这个例子中,我们分别创建了两个带有fishcompany标签的顶点。 我们还定义了两个属性,即第一个顶点的nameresidence ,第二个顶点的namewebsite 我们现在使用变量sammycompany访问这些顶点。

例如,为了列出第一个顶点的所有属性,请执行以下命令:

g.V(sammy).properties()

输出将如下所示:

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

您还可以向顶点添加新属性。 让我们添加一个颜色:

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

现在,我们来定义这两个顶点之间的关系。 这是通过在它们之间创建一个edge来实现的。

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

这创建了sammycompany之间的一个边缘,标签为hasMascot ,一个名为status的属性的值为high

现在,让我们得到公司的吉祥物:

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

这将从company顶点返回传出的顶点,并将它们之间的边缘标记为hasMascot 我们也可以做相反的事情,让公司与吉祥物sammy相关联:

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

这些是几个基本的Gremlin命令开始使用。 要了解更多信息,请查看描述性Apache Tinkerpop3文档

CTRL+C退出Gremlin控制台。

现在我们为Titan添加一些自定义配置选项。

第3步 - 配置Titan

让我们创建一个新的配置文件,您可以使用它来定义Titan的所有自定义配置选项。

Titan有一个可插拔的存储层; Titan不是处理数据存储本身,而是使用另一个数据库来处理它。 Titan目前为存储数据库提供三个选项:Cassandra,HBase和BerkeleyDB。 在本教程中,我们将使用Cassandra作为存储引擎,因为它具有高度可扩展性并具有高可用性。

首先,创建配置文件:

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

添加这些行以定义存储后台是什么以及可用的位置。 存储后端设置为cassandrathrift ,它说我们正在使用Cassandra与Cassandra的节俭接口进行存储:

CONF /小鬼服务器/ custom-titan-config.properties
storage.backend=cassandrathrift
storage.hostname=localhost

然后添加这三行来定义要使用的搜索后端。 我们将使用elasticsearch搜索作为搜索后端。

CONF /小鬼服务器/ custom-titan-config.properties
...
index.search.backend=elasticsearch
index.search.hostname=localhost
index.search.elasticsearch.client-only=true

第三行表示ElasticSearch是不存储数据的瘦客户机。 将其设置为false会创建一个可以存储数据的常规ElasticSearch集群节点,我们现在不需要。

最后,添加这一行告诉Gremlin Server它将要提供的图形的类型。

CONF /小鬼服务器/ custom-titan-config.properties
...
gremlin.graph=com.thinkaurelius.titan.core.TitanFactory

conf目录中有许多示例配置文件可供您查看以供参考。

保存文件并退出编辑器。

我们需要将这个新的配置文件添加到Gremlin Server中。 打开Gremlin Server的配置文件。

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

导航到graphs部分,找到以下行:

CONF /小鬼服务器/小鬼,server.yaml
..
 graph: conf/gremlin-server/titan-berkeleyje-server.properties}
..

替换为:

CONF /小鬼服务器/小鬼,server.yaml
..
 graph: conf/gremlin-server/custom-titan-config.properties}
..

保存并退出文件。

现在通过停止Titan重新启动Titan并再次启动它。

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

现在我们有一个自定义配置,我们来配置Titan作为服务运行。

第4步 - 使用Systemd管理Titan

我们应该确保每当我们的服务器启动时,Titan都会自动启动。 如果我们的服务器意外重新启动或由于任何原因必须重新启动,我们希望Titan也启动。

要配置这个,我们将为Titan创建一个Systemd单元文件,以便我们管理它。

要开始,我们在/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

我们指定服务应达到网络目标开始。 换句话说,我们只有在网络服务准备好之后才启动这个服务。

[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。 我们分配命令将Titan启动到ExecStart变量。

ExecStop变量定义如何停止服务。

最后,我们添加[Install]部分,如下所示:

/etc/systemd/system/titan.service
[Install]
WantedBy=multi-user.target

Install部分允许您启用和禁用该服务。 WantedBy指令在/etc/systemd/system目录下创建一个名为multi-user.target的目录。 Systemd将在那里创建该单元文件的符号链接。 禁用此服务将从目录中删除此文件。

保存文件,关闭编辑器并启动新服务:

sudo systemctl start titan

然后启用此服务,以便每次服务器启动时,Titan启动:

sudo systemctl enable titan

您可以使用以下命令检查Titan的状态:

sudo systemctl status titan

要了解有关单元文件的更多信息,请阅读“ 了解系统单位和单位”文档

结论

您现在在服务器上安装了一个基本的Titan安装。 如果您想更深入地了解泰坦的架构,请不要犹豫,查看他们的官方文档

现在,您已经建立了Titan,您应该通过查看官方文档来了解更多关于Tinkerpop3和Gremlin的信息