Blazegraph에서 Amazon Neptune으로의 마이그레이션 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Blazegraph에서 Amazon Neptune으로의 마이그레이션

오픈 소스 Blazegraph RDF 트리플스토어에 그래프가 있는 경우 다음 단계를 사용하여 그래프 데이터를 Amazon Neptune으로 마이그레이션할 수 있습니다.

  • AWS 인프라를 프로비저닝합니다. 먼저 AWS CloudFormation 템플릿을 사용하여 필요한 Neptune 인프라를 프로비저닝합니다(DB 클러스터 생성 참조).

  • Blazegraph에서 데이터를 내보냅니다. Blazegraph에서 데이터를 내보내는 두 가지 주요 방법이 있습니다. 하나는 SPARQL CONSTRUCT 쿼리를 사용하는 것이고 다른 하나는 Blazegraph 내보내기 유틸리티를 사용하는 것입니다.

  • 데이터를 Neptune으로 가져옵니다. 그런 다음 Neptune WorkbenchNeptune 대량 로더를 사용하여 내보낸 데이터 파일을 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 Management Console 또는 AWS CLI를 통해 필요한 AWS 인프라를 수동으로 구성할 수 있지만, 아래 설명과 같이 CloudFormation 템플릿을 대신 사용하는 것이 더 편리한 경우가 많습니다.

CloudFormation 템플릿을 사용하여 Neptune을 프로비저닝:
  1. 사용 AWS CloudFormation Neptune DB 클러스터를 생성하기 위한 스택로 이동합니다.

  2. 원하는 리전의 스택 시작을 선택합니다.

  3. 필수 파라미터(스택 이름 및 EC2SSHKeyPairName)를 설정합니다. 또한 마이그레이션 프로세스를 쉽게 수행할 수 있도록 다음과 같은 선택적 파라미터를 설정합니다.

    • AttachBulkloadIAMRoleToNeptuneCluster를 true로 설정합니다. 이 파라미터를 사용하면 적절한 IAM 역할을 생성하고 클러스터에 연결하여 데이터를 대량으로 로드할 수 있습니다.

    • NotebookInstanceType을 선호 인스턴스 유형으로 설정합니다. 이 파라미터는 Neptune으로 대량 로드를 실행하고 마이그레이션을 검증하는 데 사용하는 Neptune 통합 문서를 생성합니다.

  4. 다음을 선택합니다.

  5. 원하는 다른 스택 옵션을 설정합니다.

  6. 다음을 선택합니다.

  7. 옵션을 검토하고 두 확인란을 모두 선택하여 AWS CloudFormation에 추가 기능이 필요할 수 있음을 확인합니다.

  8. 스택 생성을 선택합니다.

이 스택 생성 프로세스는 몇 분 정도 걸릴 수 있습니다.

Blazegraph에서 데이터 내보내기

다음 단계는 Neptune 벌크 로더와 호환되는 형식으로 Blazegraph에서 데이터를 내보내는 것입니다.

Blazegraph에 데이터가 저장되는 방식(트리플 또는 쿼드)과 사용 중인 명명된 그래프 수에 따라 Blazegraph에서 내보내기 프로세스를 여러 번 수행하고 여러 데이터 파일을 생성해야 할 수 있습니다.

  • 데이터가 트리플로 저장되는 경우 이름이 지정된 각 그래프에 대해 내보내기를 한 번 실행해야 합니다.

  • 데이터가 쿼드로 저장된 경우 N-Quads 형식으로 데이터를 내보내거나 이름이 지정된 각 그래프를 트리플 형식으로 내보낼 수 있습니다.

아래에서는 단일 네임스페이스를 N-Quads로 내보내는 것으로 가정하지만 추가 네임스페이스나 원하는 내보내기 형식에 대해 이 프로세스를 반복할 수 있습니다.

마이그레이션 중에 Blazegraph를 온라인 상태로 유지하고 사용할 수 있도록 하려면 SPARQL CONSTRUCT 쿼리를 사용하세요. 이를 위해서는 액세스 가능한 SPARQL 엔드포인트가 있는 Blazegraph 인스턴스를 설치, 구성 및 실행해야 합니다.

Blazegraph가 온라인 상태일 필요가 없는 경우 BlazeGraph 내보내기 유틸리티를 사용하세요. 이렇게 하려면 Blazegraph를 다운로드해야 하며, 데이터 파일 및 구성 파일에 액세스할 수 있어야 하지만 서버를 실행할 필요는 없습니다.

SPARQL CONSTRUCT를 사용하여 Blazegraph에서 데이터 내보내기

SPARQL CONSTRUCT는 지정된 쿼리 템플릿과 일치하는 RDF 그래프를 반환하는 SPARQL의 기능입니다. 이 사용 사례에서는 다음과 같은 쿼리를 사용하여 데이터를 한 번에 하나의 네임스페이스씩 내보내는 데 사용합니다.

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()

데이터가 트리플로 저장되는 경우 Blazegraph GitHub 리포지토리에 지정된 값을 사용하여 적절한 형식(N-Triples, RDF/XML 또는 Turtle)으로 데이터를 내보내려면 Accept 헤더 파라미터를 변경해야 합니다.

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-Triples, Turtle, 또는 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(S3) 버킷을 생성하고 내보낸 데이터를 버킷에 복사합니다.

Blazegraph에서 데이터를 내보낸 후에는 Neptune 벌크 로더가 데이터를 가져오는 데 사용할 대상 Neptune DB 클러스터와 동일한 리전에 Amazon Simple Storage Service(S3) 버킷을 생성합니다.

Amazon S3 버킷을 생성하는 방법에 대한 지침은 S3 버킷을 생성하려면 어떻게 해야 하나요? 단원을 참조하세요. Amazon Simple Storage Service 사용 설명서Amazon Simple Storage Service 사용 설명서버킷 생성 예제를 참조하세요.

새 Amazon S3 버킷으로 내보낸 데이터 파일을 복사하는 방법에 대한 지침은 Amazon Simple Storage Service 사용 설명서버킷에 객체 업로드 또는 AWS CLI를 통한 상위 수준(s3) 명령 사용을 참조하세요. 다음과 같은 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에 액세스할 수 있어야 합니다. Bastion Host와 해당 시스템에 SSH를 설정하고 cURL 명령을 실행할 수 있지만 Neptune Workbench를 사용하는 것이 더 쉽습니다.

Neptune Workbench는 Amazon SageMaker 노트북으로 실행되는 사전 구성된 Jupyter Notebook으로, 여러 가지 Neptune 전용 노트북 매직이 설치되어 있습니다. 이러한 매직은 클러스터 상태 확인, SPARQL 및 Gremlin 순회 실행, 대량 로딩 작업 실행과 같은 일반적인 Neptune 작업을 단순화합니다.

대량 로드 프로세스를 시작하려면 Neptune 로더 명령 실행 가능한 인터페이스를 제공하는 %load 매직을 사용하세요.

  1. AWS Management Console에 로그인한 다음 https://console.aws.amazon.com/neptune/home에서 Amazon Neptune 콘솔을 엽니다.

  2. aws-neptune-blazegraph-to-neptune을 선택합니다.

  3. 노트북 열기를 선택합니다.

  4. 실행 중인 Jupyter 인스턴스에서 기존 노트북을 선택하거나 Python 3 커널을 사용하여 새 노트북을 만드세요.

  5. 노트북에서 셀을 열고, %load를 입력하고 셀을 실행합니다.

  6. 벌크 로더의 파라미터를 설정합니다.

    1. 소스에는 가져올 소스 파일의 위치를 입력합니다. s3://{bucket_name}/{file_name}

    2. 형식에서 적절한 형식(이 예에서는 nquads)을 선택합니다.

    3. Load ARNIAMBulkLoad 역할에 대한 ARN을 입력합니다. 이 정보는 IAM 콘솔의 역할 아래에 있습니다.

  7. 제출을 선택합니다.

결과에는 요청의 상태가 포함됩니다. 대량 로드는 오래 실행되는 프로세스인 경우가 많으므로 응답은 로드가 완료되었음을 의미하는 것이 아니라 시작되었다는 의미입니다. 이 상태 정보는 작업이 완료되었다고 보고될 때까지 주기적으로 업데이트됩니다.

참고

이 정보는 블로그 게시물인 클라우드로 이동: Blazegraph를 Amazon Neptune으로 마이그레이션에서도 확인할 수 있습니다.