如何在Ubuntu16.04上使用Cassandra和ElasticSearch设置TitanGraph数据库

来自菜鸟教程
跳转至:导航、​搜索

介绍

Titan 是一个高度可扩展的开源图形数据库。 图数据库是一种 NoSQL 数据库,其中所有数据都存储为 nodesedges。 图数据库适用于使用高度连接数据的应用程序,其中数据之间的关系是应用程序功能的重要组成部分,例如社交网站。 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 以确保一切正常。 切换到 titan-1.0.0-hadoop 目录并调用 shell 脚本来启动 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 依赖于一堆其他工具来工作。 所以每当 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

在下一步中,您将看到如何查询图表。

第 2 步 — 使用 Gremlin 查询图形

Gremlin是一种图遍历语言,用于查询、分析和操作图数据库。 现在 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() 方法使用指定属性文件中的配置选项创建一个新的 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()

输出将如下所示:

Output==>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 提供 thrift 接口:

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 服务器。 打开 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 配置为作为服务运行。

第 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

要了解有关单元文件的更多信息,请阅读教程 Understanding Systemd Units and Unit files

结论

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

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