Blazegraph から Amazon Neptune への移行 - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Blazegraph から Amazon Neptune への移行

オープンソースBlazegraph RDF トリプルストアにグラフがあるなら、次の手順を使用して Amazon Neptune にグラフデータに移行できます。

  • AWS インフラストラクチャーのプロビジョニングをします。まず、AWS CloudFormation テンプレートを使用して、必要な Neptune インフラストラクチャをプロビジョニングを開始します (DB クラスターを作成する を参照)。

  • Blazegraph からデータをエクスポートします。Blazegraph からデータをエクスポートするには、主に SPARQL CONSTRUCT クエリを使用するか、Blazegraph エクスポートユーティリティを使用する方法があります。

  • Neptune にデータをインポートします。その後、Neptune Workbench および 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 では、マルチテナントは、名前付きグラフにデータを格納し、SPARQL クエリに USING NAMED 句を使用するか、テナントごとに個別のデータベースクラスターを作成することによってサポートされます。

  • フェデレーション — Neptune は現在、プライベート VPC 内、VPC 間、または外部のインターネットエンドポイントなど、Neptune インスタンスからアクセス可能な場所への SPARQL 1.1 フェデレーションをサポートしています。特定のセットアップと必要なフェデレーションエンドポイントによっては、追加のネットワーク構成が必要になる場合があります。

  • Blazegraph の標準拡張 — Blazegraph には SPARQL と REST API 標準の両方に対する複数の拡張機能が含まれていますが、Neptune は標準仕様そのものとのみ互換性があります。これにより、アプリケーションの変更が必要になる場合や、移行が困難になる場合があります。

Neptune の AWS インフラストラクチャのプロビジョニング

必要な AWS インフラストラクチャを AWS Management Console または AWS CLI から手動で構築することはできますが、以下で説明するように、代わりに CloudFormation テンプレートを使用する方が便利です。

CloudFormation テンプレートを使用した Neptune のプロビジョニング。
  1. の使用 AWS CloudFormation Neptune DB クラスターを作成するスタック に移動します。

  2. 任意のリージョンで [Launch Stack] (スタックを起動する) を選択します。

  3. 必要なパラメータ (スタック名とEC2SSHKeyPairName) を設定します。また、移行プロセスを容易にするために、次のオプションパラメータを設定します。

    • AttachBulkloadIAMRoleToNeptuneCluster を true に設定します。このパラメータを使用すると、データを一括ロードできるように、適切な IAM ロールを作成してクラスターにアタッチできます。

    • NotebookInstanceType を任意のインスタンスタイプに設定します。このパラメーターは、Neptune への一括ロードを実行し、移行を検証するために使用する Neptune ワークブックを作成します。

  4. [Next] (次へ) をクリックします。

  5. その他のスタックオプションを設定します。

  6. [Next] (次へ) をクリックします。

  7. オプションを確認し、両方のチェックボックスをオンにして、AWSCloudFormation には追加の機能が必要になる場合があることを承認します。

  8. [スタックの作成] を選択します。

プロセスには数分かかることがあります。

Blazegraph からのデータのエクスポート

次のステップでは、Blazegraph からデータを Neptune バルクローダと互換性がある形式でエクスポートします。

Blazegraph でのデータの保存方法(トリプルまたはクワッド)および使用されている名前付きグラフの数に応じて、Blazegraph ではエクスポート処理を複数回実行し、複数のデータファイルを生成する必要があります。

  • データがトリプルとして格納されている場合は、名前付きグラフごとに 1 つのエクスポートを実行する必要があります。

  • データがクアッドとして格納されている場合は、N-Quads 形式でデータをエクスポートするか、名前付きグラフをトリプル形式でエクスポートするかを選択できます。

以下では、単一のネームスペースを N-Quads としてエクスポートすることを前提としていますが、追加のネームスペースまたは目的のエクスポート形式に対してこのプロセスを繰り返すことができます。

Blazegraph をオンラインにして、移行中に使用できるようにする必要がある場合は、SPARQL CONSTRUCT クエリを使用します。これには、アクセス可能な SPARQL エンドポイントを使用して Blazegraph インスタンスをインストール、設定、および実行する必要があります。

Blazegraph をオンラインにする必要がない場合は、BlazeGraph 書き出しユーティリティを使用します。これを行うには Blazegraph をダウンロードする必要があり、データファイルと構成ファイルはアクセス可能である必要がありますが、サーバーが実行されている必要はありません。

SPARQL コンストラクトを使用した Blazegraph からのデータのエクスポート

SPARQL コンストラクトは、指定されたクエリテンプレートに一致する RDF グラフを返す SPARQL の機能です。このユースケースでは、次のようなクエリを使用して、一度に 1 つの名前空間データをエクスポートします。

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

このデータをエクスポートする他の RDF ツールが存在しますが、このクエリを実行する最も簡単な方法は、Blazegraph で提供される REST API エンドポイントを使用することです。次のスクリプトは、Python (3.6+) スクリプトを使用してデータを N-Quads としてエクスポートする方法を示しています。

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 ヘッダーパラメーターを変更し、Blazegraph GitHub レポで指定した値を使用して、適切な形式 (N-トリプル、RDF/XML、または Turtle) でデータをエクスポートします。。

Blazegraph エクスポートユーティリティを使用してデータをエクスポートする

Blazegraph には、データをエクスポートするためのユーティリティメソッド、すなわち ExportKB クラスが含まれています。ExportKB によって Blazegraph からのデータのエクスポートが容易になりますが、以前の方法とは異なり、エクスポートの実行中はサーバーをオフラインにする必要があります。移行中にBlazegraph をオフラインにしたり、データのバックアップから移行を実行したりする場合に使用するのが理想的な方法です。

Blazegraph がインストールされているが実行されていないマシンで、Java コマンドラインからユーティリティを実行します。このコマンドを実行する最も簡単な方法は、GitHub にある最新の blazegraph.jar リリースをダウンロードすることです。このコマンドを実行するには、いくつかのパラメータが必要です。

  • 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 DB クラスターと同じリージョンに Amazon Simple Storage Service (Amazon S3) バケットを作成し、Neptune バルクローダーがデータをインポートするために使用します。

Amazon S3 のバケットの作成方法については、Amazon Simple Storage Service ユーザーガイドにあるS3 バケットを作成する方法および Amazon Simple Storage Service ユーザーガイドにあるバケットを作成する例を参照してください。

新しい Amazon S3 バケットにエクスポートしたデータファイルのコピー方法の手順については、Amazon Simple Storage Service ユーザーガイドにあるバケットにオブジェクトをアップロードする、またはAWS CLI と高レベル (s3) コマンドを使用するを参照してください。次のような Python コードを使用して、ファイルを 1 つずつコピーすることもできます。

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 を使用してロード操作を実行するよりも高速で少ないオーバーヘッドでデータをロードできる一括ローダがあります。一括ローダープロセスは、特定された S3 バケットに格納されているデータを Neptune にロードするためのローダーエンドポイント API の呼び出しによって開始されます。

ローダー REST エンドポイントへの直接呼び出しでこれを行うことができますが、ターゲット Neptune インスタンスが実行されるプライベート VPC にアクセスできる必要があります。踏み台ホストをセットアップし、そのマシンに SSH をセットアップし、cURL コマンドを実行できますが、Neptune Workbenchを使う方が簡単です。

Neptune Workbench は、Amazon SageMaker ノートブックとして実行される、あらかじめ構成された Jupyter ノートブックであり、いくつかの Neptune 固有のノートブック magic がインストールされています。これらのマジックは、クラスターの状態のチェック、SPARQL および Gremlin トラバーサルの実行、一括ロード操作の実行など、一般的な Neptune オペレーションを簡素化します。

一括ロードプロセスを開始するには、%load magic を使いますが、これは Neptune ローダーコマンド を実行するためのインターフェースの役割をします。

  1. AWS マネジメントコンソールにサインインして Amazon Neptune コンソール (https://console.aws.amazon.com/neptune/home) を開きます。

  2. aws-neptune-blazegraph to Neptune を選択します。

  3. [Open notebook] (ノートブックを開く) を選択します。

  4. Jupyter の実行中のインスタンスで、既存のノートブックを選択するか、Python 3 カーネルを使用して新しいノートブックを作成します。

  5. ノートブックでセルを開き、%load を入力し、セルを実行します。

  6. 一括ローダーのパラメータを設定します。

    1. 送信元には、インポートするソースファイルの場所を次のように入力します。s3://{bucket_name}/{file_name}

    2. 形式には、適切な形式を選択します。この例では nquads です。

    3. ARN のロードには、IAMBulkLoad ロールの ARN を入力します (この情報はロールの IAM コンソールにあります)。

  7. [Submit] (送信) を選択します。

結果には、リクエストのステータスが含まれます。一括ロードは多くの場合、長時間実行されるプロセスであるため、応答はロードが完了したことを意味するものではなく、開始されたという意味しかありません。このステータス情報は、ジョブが完了したことを報告するまで定期的に更新されます。

注記

この情報は、ブログ記事、クラウドへの移行:Amazon Neptune への Blazegraph の移行でも入手できます。