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

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

从 Blazegraph 迁移到 Amazon Neptune

如果你在开源中有图表BlazegraphRDF triplestore,您可以使用以下步骤将图表数据迁移到 Amazon Neptune:

  • 预置Amazon基础设施。首先使用配置所需的 Neptune 基础架构AmazonCloudFormation 模板(请参阅创建数据库集群)。

  • 从 Blazegraph 中导出数据。从 Blazegraph 导出数据的主要方法有两种,即使用 SPARQL CONSTARD 查询或使用 Blazegraph 导出实用程序。

  • 将数据导入 Neptune。然后,您可 Neptune 用Neptune 工作台Neptune 散装加载程序.

这种方法通常也适用于从其他 RDF 三仓数据库迁移。

Blazegraph 到 Neptune 的兼容性

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

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

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

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

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

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

  • 联邦— Neptune 目前支持 SPARQL 1.1 联合到可供 Neptune 实例访问的位置,例如私有 VPC 内、VPC 之间或外部互联网终端节点。根据具体的设置和所需的联合终端节点,您可能需要一些额外的网络配置。

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

预置AmazonNeptune 基础设施

虽然你可以构建必需的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. 选择下一步

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

  6. 选择下一步

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

  8. 选择创建堆栈

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

从 Blazegraph 中导出数据

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

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

  • 如果数据存储为三元组,则需要为每个命名图表运行一个导出。

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

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

如果您需要 Blazegraph 在线并在迁移过程中可用,请使用 SPARQL CONVERTION 查询。这要求您安装、配置和运行带有可访问的 SPARQL 终端节点的 Blazegraph 实例。

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

使用 SPARQL 构造从 Blazegraph 导出数据

SPARQL CONSTARD 是 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()

如果数据存储为三元组,则需要更改Acceptheader 参数以适当的格式(N-三元、RDF/XML 或 Turtle)导出数据,使用GitHub 存储库.

使用 Blazegraph 导出实用程序导出数据

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 数据库集群相同的区域中创建一个 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。Neptune 有一个批量加载器,与使用 SPARQL 执行加载操作相比,加载数据的速度更快,开销更少 批量加载器过程是通过调用加载器终端节点 API 启动的,以将存储在已识别的 S3 存储桶中的数据加载到 Neptune。

尽管您可以通过直接调用加载器 REST 终端节点来执行此操作,但您必须能够访问运行目标 Neptune 实例的私有 VPC。你可以设置堡垒主机,SSH 进入那台机器,然后运行 cURL 命令,但是使用Neptune Workbench更容易。

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

要启动批量加载过程,请使用%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 (提交)

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

注意

这些信息也可在博客文章中找到,迁移到云:将 Blazegraph 迁移到 Amazon Neptune.