从 Blazegraph 迁移到 Amazon Neptune - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

从 Blazegraph 迁移到 Amazon Neptune

如果你有一个图形在开源火焰仪RDF 三重存储,您可以使用以下步骤将图形数据迁移到 Amazon Neptune:

  • 已预置Amazon基础设施。首 Neptune 用AmazonCloudFormation 模板(请参阅创建数据库集群)。

  • 从 Blazegraph 中导出数据。有两种主要方法可用于从 “射线图” 中导出数据,即使用 SPARQL 构造查询或使用 “射线图导出” 实用程序。

  • 将数据导入到 Neptune。然后,您可 Neptune 用Neptune Workbench加载程序 Neptune.

此方法通常也适用于从其他 RDF 三路存储数据库迁移。

雷射仪到 Neptune 的兼容性

在将图形数据迁移到 Neptune 之前,Blazegraph 和 Neptune 之间存在几个显著差异,您应该注意这些差异。这些差异可能需要更改查询、应用程序体系结构或两者,甚至使迁移变得不切实际:

  • Full-text search— 在 Blazegraph 中,您可以通过与 Apache Solr 集成使用内部全文搜索或外部全文搜索功能。如果您使用这些功能之一,请随时了解 Neptune 支持的全文搜索功能的最新更新。请参阅Neptune 全文搜索

  • Query hints— 使用查询提示的概念来扩展 SPARQL 和 Neptune。在迁移过程中,您需要迁移您使用的任何查询提示。有关 Neptune 支持的最新查询提示的信息,请参阅SPARQL 查询提示.

  • 推理— Blazegraph 支持推断作为三倍模式下的可配置选项,但在四边形模式下不支持。Neptune 尚不支持推断。

  • 地理空间搜索— Blazegraph 支持启用地理空间支持的命名空间的配置。此功能尚不可用于 Neptune。

  • 多租户— Blazegraph 支持单个数据库中的多租户。在 Neptune 中,通过将数据存储在命名图形中,并使用 USION CORYT 子句进行 SPARQL 查询,或者为每个租户创建一个单独的数据库集群来支持多租户。

  • 联合身份验证— Neptune 目前支持 SPARQL 1.1 联合身份验证到 Neptune 实例可访问的位置,例如私有 VPC 内、跨 VPC 或外部互联网终端节点。根据特定的设置和所需的联合端点,您可能需要一些额外的网络配置。

  • 标准扩展— Blazegraph 包括对 SPARQL 和 REST API 标准的多个扩展,而 Neptune 仅与标准规范本身兼容。这可能需要更改您的应用程序,或使迁移变得困难。

预置Amazon针对的 Neptune 基础设施

虽然您可以构造所需的Amazon基础结构手动通过Amazon Web Services Management Console或者Amazon CLI,使用 CloudFormation 模板通常更方便,如下所述:

使用 CloudFormation 模板配置 Neptune:

  1. 导航到 使用Amazon CloudFormation堆栈创建 Neptune 数据库集群

  2. 选择启动堆栈(位于您首选区域)。

  3. 设置所需的参数(堆栈名称和EC2SSHKeyPairName)。还设置以下可选参数以简化迁移过程:

    • AttachBulkloadIAMRoleToNeptuneCluster 设置为 true。此参数允许创建适当的 IAM 角色并将其附加到您的集群,以允许批量加载数据。

    • SetNotebookInstanceType设置为您首选的实例类型。此参数创建一个 Neptune 工作簿,您可以使用该工作簿将批量加载运行到 Neptune 并验证迁移。

  4. 选择 Next (下一步)

  5. 设置您想要的任何其他堆栈选项。

  6. 选择 Next (下一步)

  7. 查看您的选项并选中两个复选框以确认AmazonCloudFormation 可能需要额外的功能。

  8. 选择创建堆栈

堆栈创建过程可能耗时数分钟。

从 Blazegraph 中导出数据

下一步是将数据导出到与 Neptune 批量加载器兼容的格式.

根据数据在 Blazegraph 中的存储方式(三倍或四边形)以及正在使用的命名图形数量,Blazegraph 可能要求您多次执行导出过程并生成多个数据文件:

  • 如果数据以三倍形式存储,则需要为每个命名图形运行一次导出。

  • 如果数据以四边形形式存储,则可以选择以 N-Quads 格式导出数据,或以三倍格式导出每个命名图形。

下面我们假设您将单个命名空间导出为 N-Quads,但您可以对其他命名空间或所需的导出格式重复此过程。

如果您需要在迁移过程中联机并可用,请使用 SPARQL 构造查询。这要求您安装、配置和运行具有可访问 SPARQL 终结点的 Blazegraph 实例。

如果您不需要在线显示器,请使用显示图导出实用程序. 要做到这一点,您必须下载 Blazegraph,并且数据文件和配置文件需要可访问,但服务器不需要运行。

使用 SPARQL 构造从射线图导出数据

SPARQL 构造是 SPARQL 的一个功能,它返回与指定查询模板匹配的 RDF 图形。对于此用例,您可以使用它一次将数据导出一个命名空间,使用如下所示的查询:

CONSTRUCT WHERE { hint:Query hint:analytic "true" . hint:Query hint:constructDistinctSPO "false" . ?s ?p ?o }

尽管存在其他 RDF 工具来导出此数据,但运行此查询的最简单方法是使用 Blazegraph 提供的 REST API 端点。下面的脚本演示了如何使用 Python (3.6+) 脚本将数据导出为 N-四边形:

import requests # Configure the URL here: e.g. http://localhost:9999/sparql url = "http://localhost:9999/sparql" payload = {'query': 'CONSTRUCT WHERE { hint:Query hint:analytic "true" . hint:Query hint:constructDistinctSPO "false" . ?s ?p ?o }'} # Set the export format to be n-quads headers = { 'Accept': 'text/x-nquads' } # Run the http request response = requests.request("POST", url, headers=headers, data = payload, files = []) #open the file in write mode, write the results, and close the file handler f = open("export.nq", "w") f.write(response.text) f.close()

如果数据以三倍形式存储,则需要更改Accept头参数以适当的格式(N 三倍、RDF/XML 或龟)导出数据,使用闪光 GitHub 回购.

使用 “射线图” 导出实用程序导出数据

Blazegraph 包含一个用于导出数据的实用方法,即ExportKB类。ExportKB有助于从 Blazegraph 导出数据,但与之前的方法不同,要求服务器在导出运行时处于脱机状态。这使得它成为当您可以在迁移过程中使 Blazegraph 脱机时使用的理想方法,或者可以通过数据备份进行迁移时使用的理想方法。

您从安装了 Blazegraph 但未运行的计算机上的 Java 命令行运行该实用程序。运行此命令的最简单方法是下载最新的blazegraph.jar发布位于 GitHub 上。运行此命令需要几个参数:

  • log4j.primary.configuration— log4j 属性文件的位置。

  • log4j.configuration— log4j 属性文件的位置。

  • output— 导出数据的输出目录。文件位于tar.gz在知识库中记录的子目录中。

  • format— 所需的输出格式后跟RWStore.properties文件。如果您使用的是三倍,则需要将-format参数到N-TriplesTurtle,或者RDF/XML.

例如,如果您有 Blazegraph 日志文件和属性文件,请使用以下代码将数据导出为 N-Quads:

java -cp blazegraph.jar \ com.bigdata.rdf.sail.ExportKB \ -outdir ~/temp/ \ -format N-Quads \ ./RWStore.properties

如果导出成功执行,您会看到类似以下内容的输出:

Exporting kb as N-Quads on /home/ec2-user/temp/kb Effective output directory: /home/ec2-user/temp/kb Writing /home/ec2-user/temp/kb/kb.properties Writing /home/ec2-user/temp/kb/data.nq.gz Done

创建 Amazon Simple Storage Service (Amazon S3) 存储桶,并将导出的数据复制到其中

从 Blazegraph 导出数据后,请在与目标 Neptune 数据库集群相同的区域中创建 Amazon Simple Storage Service (Amazon S3) 存储桶,供 Neptune 批量加载器用于从中导入数据。

有关如何创建 Amazon S3 存储桶的说明,请参阅如何创建 S3 存储桶?中的Amazon Simple Storage Service 用户指南, 和创建存储桶的示例中的Amazon Simple Storage Service 用户指南.

有关如何将已导出的数据文件复制到新 Amazon S3 存储桶的说明,请参阅将对象上传到存储桶中的Amazon Simple Storage Service 用户指南,或者通过 使用高级别 (s3) 命令AmazonCLI. 您也可以使用如下所示的 Python 代码逐个复制文件:

import boto3 region = 'region name' bucket_name = 'bucket name' s3 = boto3.resource('s3') s3.meta.client.upload_file('export.nq', bucket_name, 'export.nq')

使用 Neptune 批量加载器将数据导入 Neptune

从 Blazegraph 导出您的数据并将其复制到 Amazon S3 存储桶后,您就可以将数据导入到 Neptune。与使用 SPARQL 执行加载操作相比,Neptune 具有一个批量加载加载程序更快、更少的开销。批量加载器过程通过调用加载器终端节点 API 启动,以将存储在已识别的 S3 存储桶中的数据加载到 Neptune 中。

尽管您可以通过直接调用加载器 REST 终端节点来执行此操作,但您必须具有对运行目标 Neptune 实例的私有 VPC 的访问权限。您可以设置一个堡垒主机,SSH 到该机器中,然后运行 cURL 命令,但使用Neptune Workbench更容易。

Neptune 工作台是一个预配置的 Jupyter 笔记本电脑运行作为一个 Amazon SageMaker 笔记本电脑,与几个海王星专用的笔记本魔术安装。这些魔术简化了常见的 Neptune 操作,例如检查群集状态、运行 SPARQL 和 Gemlin 遍历以及运行批量加载操作。

要启动批量加载过程,请使用%load魔术,它提供了一个接口来运行Neptune 加载程序命令

  1. 登录到Amazon管理控制台,然后通过以下网址打开 Amazon Neptune 控制台:https://console.aws.amazon.com/neptune/home.

  2. Selectaws-海王星-爆炸式到海王星.

  3. 选择打开笔记本.

  4. 在 Jupyter 的正在运行的实例中,选择现有笔记本或使用 Python 3 内核创建一个新笔记本。

  5. 在笔记本中,打开单元格,输入%load,然后运行单元格。

  6. 设置批量加载器的参数:

    1. 适用于中,输入要导入的源文件的位置:s3://{bucket_name}/{file_name}.

    2. 适用于格式,请选择适当的格式,在此示例中为nquads.

    3. 适用于加载 ARN中,输入针对的 ARNIAMBulkLoad角色(此信息位于 IAM 控制台的角色)。

  7. 选择 Submit

结果包含请求的状态。批量加载通常是长时间运行的进程,因此响应并不意味着加载已经完成,而只是表示加载已经开始。此状态信息会定期更新,直到它报告作业已完成。

注意

这些信息也可以在博客文章中获得,迁移到云:将火焰仪迁移到 Amazon Neptune.