Migración de Blazegraph a Amazon Neptune - Amazon Neptune

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Migración de Blazegraph a Amazon Neptune

Si tiene un gráfico en el almacén triple de RDF de Blazegraph de código abierto, puede migrar los datos del gráfico a Amazon Neptune siguiendo estos pasos:

  • Aprovisionamiento de la infraestructura de AWS. Comience por aprovisionar la infraestructura de Neptune necesaria mediante una plantilla de AWS CloudFormation (consulte Creación de un clúster de base de datos).

  • Exportación de datos desde Blazegraph. Existen dos métodos principales para exportar datos desde Blazegraph: utilizar las consultas de SPARQL CONSTRUCT o utilizar la utilidad de Exportación de Blazegraph.

  • Importación de los datos en Neptune. A continuación, puede cargar los archivos de datos exportados en Neptune con Neptune Workbench y Programa de carga masiva de Neptune.

Este método también suele aplicarse a la migración desde otras bases de datos de almacén triple de RDF.

Compatibilidad entre Blazegraph y Neptune

Antes de migrar los datos de los gráficos a Neptune, hay varias diferencias importantes entre Blazegraph y Neptune que debe tener en cuenta. Estas diferencias pueden requerir cambios en las consultas, en la arquitectura de la aplicación o en ambas, o incluso hacer que la migración no sea práctica:

  • Full-text search: en Blazegraph, puede utilizar las funciones de búsqueda de texto completo interna o externa mediante una integración con Apache Solr. Si utiliza alguna de estas características, manténgase informado sobre las últimas actualizaciones de las características de búsqueda de texto completo compatibles con Neptune. Consulte Búsqueda de texto completo de Neptune.

  • Query hints: tanto Blazegraph como Neptune amplían SPARQL con el concepto de sugerencias de consulta. Durante una migración, debe migrar todas las sugerencias de consulta que utilice. Para obtener información sobre las sugerencias de consulta más recientes que admite Neptune, consulte SPARQLsugerencias de consulta.

  • Inferencia: Blazegraph admite la inferencia como opción configurable en el modo triples, pero no en el modo cuádruple. Neptune aún no admite la inferencia.

  • Búsqueda geoespacial: Blazegraph admite la configuración de espacios de nombres que permiten el soporte geoespacial. Esta característica todavía no está disponible en Neptune.

  • Varios inquilinos: Blazegraph admite varios inquilinos en una única base de datos. En Neptune, se admiten varios inquilinos mediante el almacenamiento de datos en gráficos con nombre y el uso de las cláusulas USING NAMED para las consultas de SPARQL, o bien mediante la creación de un clúster de base de datos independiente para cada inquilino.

  • Federación: Neptune actualmente admite la federación de SPARQL 1.1 en ubicaciones accesibles para la instancia de Neptune, como dentro de la VPC privada, entre VPC o para puntos de conexión de Internet externos. En función de la configuración específica y de los puntos de conexión de federación necesarios, es posible que necesite alguna configuración de red adicional.

  • Extensiones de estándares de Blazegraph: Blazegraph incluye varias extensiones de los estándares API de REST y SPARQL, mientras que Neptune solo es compatible con las propias especificaciones de los estándares. Esto puede requerir cambios en la aplicación o dificultar la migración.

Aprovisionamiento de la infraestructura de AWS para Neptune

Aunque puede crear la infraestructura de AWS necesaria manualmente mediante la AWS Management Console o AWS CLI, suele ser mejor utilizar una plantilla de CloudFormation en su lugar, tal y como se describe a continuación:

Aprovisionamiento de Neptune mediante una plantilla de CloudFormation:
  1. Vaya a Usando una AWS CloudFormation Compila para crear un clúster de base de datos de Neptune.

  2. Elija Lanzar pila en la región que prefiera.

  3. Establezca los parámetros necesarios (nombre de la pila y EC2SSHKeyPairName). Configure también los siguientes parámetros opcionales para facilitar el proceso de migración:

    • Establezca AttachBulkloadIAMRoleToNeptuneCluster en true. Este parámetro permite crear y asociar el rol de IAM adecuado al clúster para permitir la carga masiva de datos.

    • Establezca NotebookInstanceType en el tipo de instancia que prefiera. Este parámetro crea un libro de Neptune que se utiliza para ejecutar la carga masiva en Neptune y validar la migración.

  4. Elija Next (Siguiente).

  5. Establezca cualquier otra opción de pila que desee.

  6. Elija Next (Siguiente).

  7. Revise sus opciones y seleccione ambas casillas de verificación para reconocer que AWS CloudFormation puede requerir capacidades adicionales.

  8. Elija Crear pila.

El proceso de creación de pilas puede tardar unos minutos.

Exportación de datos desde Blazegraph

El siguiente paso es exportar los datos de Blazegraph en un formato que sea compatible con el programa de carga masiva de Neptune.

En función de cómo se almacenen los datos en Blazegraph (triples o cuádruples) y del número de gráficos con nombre que se utilicen, Blazegraph puede requerir que realice el proceso de exportación varias veces y genere varios archivos de datos:

  • Si los datos se almacenan como triples, debe ejecutar una exportación para cada gráfico con nombre.

  • Si los datos se almacenan como cuádruples, puede optar por exportar los datos en formato N-Quads o exportar cada gráfico con nombre asignado en formato triples.

A continuación, supongamos que exporta un único espacio de nombres como N-Quads, pero puede repetir el proceso para obtener más espacios de nombres o los formatos de exportación que desee.

Si necesita que Blazegraph esté en línea y disponible durante la migración, utilice las consultas SPARQL CONSTRUCT. Esto requiere que instale, configure y ejecute una instancia de Blazegraph con un punto de conexión de SPARQL accesible.

Si no necesita que Blazegraph esté en línea, utilice la utilidad de exportación de BlazeGraph. Para ello, debe descargar Blazegraph y ser capaz de acceder al archivo de datos y a los archivos de configuración, pero no es necesario que el servidor esté funcionando.

Exportación de datos de Blazegraph mediante SPARQL CONSTRUCT

SPARQL CONSTRUCT es una característica de SPARQL que devuelve un gráfico RDF que coincide con la plantilla de consulta especificada. En este caso de uso, se utiliza para exportar los datos de un espacio de nombres a la vez, mediante una consulta como la siguiente:

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

Aunque existen otras herramientas RDF para exportar estos datos, la forma más sencilla de ejecutar esta consulta es mediante el punto de conexión de la API de REST que proporciona Blazegraph. En el siguiente script se muestra cómo usar el script de Python (3.6+) para exportar datos como 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()

Si los datos se almacenan como triples, debe cambiar el parámetro del encabezado de Accept para exportar los datos en un formato adecuado (N-Triples, RDF/XML o Turtle) mediante los valores especificados en el repositorio de Blazegraph GitHub.

Uso de la utilidad de exportación de Blazegraph para exportar datos

Blazegraph incluye un método de utilidad para exportar datos, es decir, la clase ExportKB. ExportKB facilita la exportación de datos desde Blazegraph, pero a diferencia del método anterior, requiere que el servidor no esté conectado mientras se ejecuta la exportación. Esto lo convierte en el método ideal para usar cuando se puede desconectar Blazegraph durante la migración o si la migración se puede realizar a partir de una copia de seguridad de los datos.

La utilidad se ejecuta desde una línea de comandos de Java en una máquina que tenga Blazegraph instalado pero no en ejecución. La forma más sencilla de ejecutar este comando es descargar la versión más reciente de blazegraph.jar que se encuentra en GitHub. La ejecución de este comando requiere varios parámetros:

  • log4j.primary.configuration: la ubicación del archivo de propiedades de log4j.

  • log4j.configuration: la ubicación del archivo de propiedades de log4j.

  • output: el directorio de salida de los datos exportados. Los archivos se encuentran ubicados como tar.gz en un subdirectorio denominado según lo indicado en la base de conocimientos.

  • format: el formato de salida deseado seguido de la ubicación del archivo RWStore.properties. Si trabaja con triples, debe cambiar el parámetro -format a N-Triples, Turtle o RDF/XML.

Por ejemplo, si tiene el archivo de diario y los archivos de propiedades de Blazegraph, exporte los datos como N-Quads con el siguiente código:

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

Si la exportación se realiza de forma correcta, verá el siguiente resultado:

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

Creación de un bucket de Amazon Simple Storage Service (Amazon S3) y copia de los datos exportados en él

Una vez que haya exportado los datos de Blazegraph, cree un bucket de Amazon Simple Storage Service (Amazon S3) en la misma región que el clúster de base de datos de Neptune de destino para que el programa de carga masiva Neptune lo utilice para importar los datos.

Para obtener instrucciones sobre cómo crear un bucket de Amazon S3, consulte ¿Cómo puedo crear un bucket de S3? en la Guía del usuario de Amazon Simple Storage Service y Ejemplos de cómo crear un bucket en la Guía del usuario de Amazon Simple Storage Service.

Para obtener instrucciones sobre cómo copiar los archivos de datos que ha exportado al nuevo bucket de Amazon S3, consulte Cargar un objeto en un bucket en la Guía del usuario de Amazon Simple Storage Service o Uso de comandos de alto nivel (s3) con la AWS CLI. También puede usar código de Python como el siguiente para copiar los archivos uno por uno:

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

Uso del programa de carga masiva de Neptune para importar los datos en Neptune

Tras exportar los datos de Blazegraph y copiarlos en un bucket de Amazon S3, estará listo para importar los datos en Neptune. Neptune tiene un programa de carga masiva que carga los datos de forma más rápida y con menos sobrecarga que al realizar operaciones de carga con SPARQL. El proceso del programa de carga masiva se inicia con una llamada a la API de punto de conexión del programa de carga para cargar los datos almacenados en el bucket S3 identificado en Neptune.

Aunque puede hacerlo con una llamada directa al punto de conexión REST del programa de carga, debe tener acceso a la VPC privada en la que se ejecuta la instancia de Neptune de destino. Puede configurar un host bastión, usar SSH en esa máquina y ejecutar el comando cURL, pero el uso de Neptune Workbench es más sencillo.

Neptune Workbench es un cuaderno de Jupyter preconfigurado que funciona como un cuaderno de Amazon SageMaker, con varios comandos mágicos de cuaderno específicos de Neptune instalados. Estos comandos mágicos simplifican las operaciones habituales de Neptune, como comprobar el estado del clúster, ejecutar recorridos de SPARQL y Gremlin y ejecutar una operación de carga masiva.

Para iniciar el proceso de carga masiva, utilice el comando mágico %load, que proporciona una interfaz para ejecutar la Comando del programa de carga de Neptune:

  1. Inicie sesión en la consola de administración de AWS y abra la consola de Amazon Neptune en https://console.aws.amazon.com/neptune/home.

  2. Seleccione aws-neptune-blazegraph-to-neptune.

  3. Seleccione Abrir cuaderno.

  4. En la instancia en ejecución de Jupyter, selecciona un cuaderno existente o cree uno nuevo con el núcleo de Python 3.

  5. En el cuaderno, abra una celda, introduzca %load y ejecute la celda.

  6. Establezca los parámetros para el programa de carga masiva:

    1. En Origen, introduzca la ubicación del archivo de origen que desee importar: s3://{bucket_name}/{file_name}.

    2. En Formato, elija el formato adecuado, que en este ejemplo es nquads.

    3. En Cargar ARN, introduzca el ARN del rol IAMBulkLoad (esta información se encuentra en la consola de IAM, en la opción Roles).

  7. Elija Submit (Enviar).

El resultado incluye el estado de la solicitud. Las cargas masivas suelen ser procesos de larga duración, por lo que la respuesta no significa que la carga se haya completado, solo que ha comenzado. Esta información de estado se actualiza periódicamente hasta que se informa de que el trabajo se ha completado.

nota

Esta información también está disponible en la publicación del blog Moving to the cloud: Migrating Blazegraph to Amazon Neptune (Cambiar a la nube: migración de Blazegraph a Amazon Neptune).