如何在Ubuntu16.04上使用Cassandra和ElasticSearch设置TitanGraph数据库
介绍
Titan 是一个高度可扩展的开源图形数据库。 图数据库是一种 NoSQL 数据库,其中所有数据都存储为 nodes 和 edges。 图数据库适用于使用高度连接数据的应用程序,其中数据之间的关系是应用程序功能的重要组成部分,例如社交网站。 Titan 用于存储和查询分布在多台机器上的大量数据。 它可以配置为使用任何各种可用的存储后端,如 Apache Cassandra、HBase 和 BerkeleyDB。 如果您需要更改数据存储,这使得将来更容易避免供应商锁定。
在本教程中,您将安装 Titan 1.0。 然后,您将配置 Titan 以使用 Cassandra 和 ElasticSearch,这两者都与 Titan 捆绑在一起。 Cassandra 充当保存底层数据的数据存储,而 ElasticSearch 是一个自由文本搜索引擎,可用于在数据库中执行一些复杂的搜索操作。 您还将使用 Gremlin 从数据库中创建和查询数据。
先决条件
要完成本教程,您需要:
- 一台 Ubuntu 16.04 服务器,至少 2 GB RAM,非 root 用户和防火墙。 您可以按照 Initial Server Setup with Ubuntu 16.04 进行设置。
- 已安装 Oracle JDK 8,您可以按照 这篇 Java 安装文章 的“安装 Oracle JDK”部分进行操作。
第 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()
在此示例中,我们创建了两个分别带有标签 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 文档 。
按 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 的更多信息。