设置 Gremlin 控制台以连接到 Neptune 数据库实例 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

设置 Gremlin 控制台以连接到 Neptune 数据库实例

Gremlin 控制台允许你尝试TinkerPopREL 中的图表和查询 (read-eval-print循环)环境。

安装 Gremlin 控制台并以通常的方式连接到它

您可以使用 Gremlin 控制台连接到远程图形数据库。以下部分将指导您安装和配置 Grimlin 控制台以远程连接到 Neptune 数据库实例。您必须按照与您的 Neptune 数据库实例位于同一 Virtual Private Cloud (VPC) 中的 Amazon EC2 实例中的说明操作。

注意

如果您有启用 IAM 身份验证在 Neptune 数据库集群上,请按照中的说明操作使用 GEMlin 控制台和签名版本 4 签名连接到 Neptune来安装 Gremlin 控制台而不是这里的说明。

安装 Gremlin 控制台并连接到 Neptune

  1. Gremlin 控制台二进制文件需要 Java 8。输入以下命令以在 EC2 实例上安装 Java 8。

    sudo yum install java-1.8.0-devel
  2. 输入以下命令以在 EC2 实例上将 Java 8 设置为默认运行时。

    sudo /usr/sbin/alternatives --config java

    在系统提示时,输入 Java 8 的数量。

  3. 从 Apache 网站下载适当版本的 Gremlin 控制台。你可以查看引擎发布页面对于你当前正在运行的 Neptune 引擎版本,以确定它支持哪个 Gremlin 版本。例如,对于 3.4.8 版,您可以下载Gremlin 控制台来自 的Apache Tinkerpop3像这样将网站连接到 EC2 实例上:

    wget https://archive.apache.org/dist/tinkerpop/3.4.8/apache-tinkerpop-gremlin-console-3.4.8-bin.zip
  4. 解压缩 Gremlin 控制台 zip 文件。

    unzip apache-tinkerpop-gremlin-console-3.4.8-bin.zip
  5. 将目录更改为解压缩的目录。

    cd apache-tinkerpop-gremlin-console-3.4.8
  6. 安装 CA 证书。Gremlin 控制台需要一个证书来验证远程证书。

    1. 下载证书:

      wget https://www.amazontrust.com/repository/SFSRootCAG2.cer
    2. 创建证书目录:

      mkdir /tmp/certs/
    3. 将 Java 证书复制到新目录中:

      cp jre_path/lib/security/cacerts /tmp/certs/cacerts
    4. 将亚马逊证书添加到存储库:

      sudo keytool -importcert \ -alias neptune-tests-ca \ -keystore /tmp/certs/cacerts \ -file /home/ec2-user/apache-tinkerpop-gremlin-console-3.4.8/SFSRootCAG2.cer \ -noprompt \ -storepass changeit
  7. 在提取的目录的 conf 子目录中,创建名为 neptune-remote.yaml 的包含以下文本的文件。Replaceyour-neptune-endpoint使用 Neptune 数据库实例的主机名或 IP 地址。方括号 ([ ]) 是必需的。

    注意

    有关查找您的 Neptune 数据库实例的主机名的信息,请参阅连接到 Amazon Neptune 终端节点部分。

    hosts: [your-neptune-endpoint] port: 8182 connectionPool: { enableSsl: true, trustStore: /tmp/certs/cacerts } serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }}
  8. 在终端中,导航到 Gremlin 控制台目录 (apache-tinkerpop-gremlin-console-3.4.8),然后输入以下命令来运行 Gremlin 控制台。

    bin/gremlin.sh

    您应看到以下输出:

    \,,,/ (o o) -----oOOo-(3)-oOOo----- plugin activated: tinkerpop.server plugin activated: tinkerpop.utilities plugin activated: tinkerpop.tinkergraph gremlin>

    您现在位于 gremlin> 提示符处。将在此提示符处输入剩余步骤。

  9. gremlin>在提示符处,输入以下命令以连接到 Neptune 数据库实例。

    :remote connect tinkerpop.server conf/neptune-remote.yaml
  10. gremlin> 提示符处,输入以下命令以切换到远程模式。这会将所有 Gremlin 查询发送到远程连接。

    :remote console
  11. 输入以下命令以将查询发送到 Gremlin 图形。

    g.V().limit(1)
  12. 完成后,输入以下命令以退出 Gremlin 控制台。

    :exit
注意

使用分号 (;) 或换行符 (\n) 分隔每个语句。

在最后遍历之前的每个遍历必须以要执行的 next() 结尾。仅返回最后遍历中的数据。

有关 Gemlin 的 Neptune 实现的更多信息,请参阅Amazon Neptune 的 Gremlin 标准合规性.

连接到 Gremlin 控制台的另一种方法

正常连接方法的缺点

连接到 Gremlin 控制台的最常见方法是上面解释的方法,使用类似的命令gremlin>提示:

gremlin> :remote connect tinkerpop.server conf/(file name).yaml gremlin> :remote console

这效果很好,并且允许你向 Neptune 发送查询。但是,它使 Groovy 脚本引擎脱离循环,因此 Neptune 将所有查询视为纯 Gremlin。这意味着以下查询表单失败:

gremlin> 1 + 1 gremlin> x = g.V().count()

以这种方式连接时你最接近使用变量的方法是使用result由控制台维护的变量并使用发送查询:>,类似于以下内容:

gremlin> :remote console ==>All scripts will now be evaluated locally - type ':remote console' to return to remote mode for Gremlin Server - [krl-1-cluster.cluster-ro-cm9t6tfwbtsr.us-east-1.neptune.amazonaws.com/172.31.19.217:8182] gremlin> :> g.V().count() ==>4249 gremlin> println(result) [result{object=4249 class=java.lang.Long}] gremlin> println(result['object']) [4249]

 

另一种连接方式

你也可以用不同的方式连接到 Gremlin 控制台,你可能会觉得更好,如下所示:

gremlin> g = traversal().withRemote('conf/neptune.properties')

此处neptune.properties采取这种形式:

gremlin.remote.remoteConnectionClass=org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection gremlin.remote.driver.clusterFile=conf/my-cluster.yaml gremlin.remote.driver.sourceName=g

这些区域有:my-cluster.yaml文件应如下所示:

hosts: [my-cluster-abcdefghijk.us-east-1.neptune.amazonaws.com] port: 8182 serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { serializeResultToString: false } } connectionPool: { enableSsl: true }

像这样配置 Gremlin 控制台连接可以成功执行以下类型的查询:

gremlin> 1+1 ==>2 gremlin> x=g.V().count().next() ==>4249 gremlin> println("The answer was ${x}") The answer was 4249

你可以避免显示结果,像这样:

gremlin> x=g.V().count().next();[] gremlin> println(x) 4249

所有常用的查询方式(没有终端步骤)仍然有效。例如:

gremlin> g.V().count() ==>4249

你甚至可以使用g.io().read()步骤来加载具有这种连接的文件。