Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Migrazione da Blazegraph ad Amazon Neptune
Se esiste un grafo nel triplestore RDF open source Blazegraph
Esegui il provisioning dell'infrastruttura AWS. Per iniziare, esegui il provisioning dell'infrastruttura Neptune richiesta utilizzando un modello CloudFormation AWS (vedi Crea un cluster Neptune).
Esporta i dati da Blazegraph. Esistono due metodi principali per esportare i dati da Blazegraph: utilizzando le query CONSTRUCT di SPARQL o mediante l'utilità Blazegraph Export.
-
Importa i dati in Neptune. Successivamente, puoi caricare i file di dati esportati in Neptune utilizzando il workbench di Neptune e lo Strumento di caricamento in blocco Neptune.
Questo approccio di solito è applicabile anche per la migrazione da altri database triplestore RDF.
Compatibilità tra Blazegraph e Neptune
Prima di eseguire la migrazione dei dati dei grafi su Neptune, è bene conoscere alcune differenze significative tra Blazegraph e Neptune. Questi aspetti diversi possono richiedere modifiche alle query, all'architettura dell'applicazione oppure a entrambi o addirittura rendere la migrazione poco pratica:
Full-text search
: in Blazegraph, puoi utilizzare funzionalità di ricerca full-text interne o esterne tramite un'integrazione con Apache Solr. Se utilizzi una di queste funzionalità, resta al passo con gli ultimi aggiornamenti sulla ricerca full-text supportata da Neptune. Per informazioni, consultare Ricerca full-text di Neptune.Query hints
: sia Blazegraph che Neptune estendono SPARQL mediante il concetto dei suggerimenti delle query. Durante una migrazione, è necessario eseguire trasferire tutti i suggerimenti delle query che utilizzi. Per informazioni sugli ultimi suggerimenti delle query supportati da Neptune, consulta SPARQLsuggerimenti di interrogazione.Inferenza: Blazegraph supporta l'inferenza come opzione configurabile in modalità tripla, ma non in modalità quadrupla. Neptune non supporta ancora l'inferenza.
Ricerca geospaziale: Blazegraph supporta la configurazione di spazi dei nomi che abilitano il supporto geospaziale. Questa funzionalità non è ancora disponibile in Neptune.
Multi-tenancy: Blazegraph supporta la multi-tenancy all'interno di un singolo database. In Neptune, la multi-tenancy è supportata sia mediante l'archiviazione dei dati in grafi denominati sia utilizzando le clausole USING NAMED per le query SPARQL oppure creando un cluster database separato per ogni tenant.
Federazione: Neptune attualmente supporta la federazione SPARQL 1.1 in posizioni a cui può accedere l'istanza Neptune, ad esempio all'interno del VPC privato, tra più VPC o in endpoint Internet esterni. A seconda della configurazione specifica e degli endpoint della federazione richiesti, potrebbe essere necessaria una configurazione di rete aggiuntiva.
Estensioni degli standard Blazegraph: Blazegraph include più estensioni per gli standard SPARQL e REST API, mentre Neptune è compatibile solo con le specifiche di questi standard. Ciò potrebbe richiedere modifiche all'applicazione o rendere difficile la migrazione.
Provisioning dell'infrastruttura AWS per Neptune
Sebbene sia possibile creare manualmente l'infrastruttura AWS richiesta tramite la AWS Management Console oAWS CLI, spesso è più comodo utilizzare un modello CloudFormation, come descritto di seguito:
Provisioning di Neptune mediante un modello CloudFormation:
Accedi a Creazione di un cluster Amazon Neptune utilizzando AWS CloudFormation.
Scegli Avvia lo stack nella tua regione preferita.
-
Imposta i parametri richiesti (nome dello stack e
EC2SSHKeyPairName
). Imposta anche i seguenti parametri facoltativi per facilitare il processo di migrazione:Imposta
AttachBulkloadIAMRoleToNeptuneCluster
su true. Questo parametro consente di creare e associare il ruolo IAM appropriato al cluster per consentire il caricamento in blocco dei dati.Imposta
NotebookInstanceType
il tipo di istanza preferito. Questo parametro crea una cartella di lavoro di Neptune da utilizzare per eseguire il caricamento in blocco su Neptune e convalidare la migrazione.
Seleziona Successivo.
Imposta tutte le altre opzioni che desideri per lo stack.
Seleziona Successivo.
Controlla le opzioni e seleziona entrambe le caselle di controllo per confermare di sapere che AWS CloudFormation potrebbe richiedere funzionalità aggiuntive.
Seleziona Crea stack.
Il processo può richiedere alcuni minuti.
Esportazione dei dati da Blazegraph.
Il passaggio successivo prevede l'esportazione dei dati da Blazegraph in un formato compatibile con lo strumento di caricamento in blocco Neptune.
A seconda del modo in cui i dati sono archiviati in Blazegraph (in modalità tripla o quadrupla) e del numero di grafi denominati in uso, Blazegraph potrebbe richiedere di eseguire il processo di esportazione più volte e generare più file di dati:
Se i dati sono archiviati in modalità tripla, è necessario eseguire un'esportazione per ogni grafo denominato.
Se i dati sono archiviati in modalità quadrupla, puoi scegliere di esportare i dati in formato N-Quads o esportare ogni grafo denominato in un formato N-Triples.
Di seguito si presuppone un singolo spazio di nomi venga esportato come N-Quads, ma è possibile ripetere la procedura per altri spazi di nomi o formati di esportazione desiderati.
Se hai bisogno che Blazegraph sia online e disponibile durante la migrazione, usa le query CONSTRUCT di SPARQL. Ciò richiede l'installazione, la configurazione e l'esecuzione di un'istanza Blazegraph con un endpoint SPARQL accessibile.
Se non hai bisogno che Blazegraph sia online, usa l'utilità BlazeGraph Export
Esportazione dei dati da Blazegraph mediante CONSTRUCT di SPARQL
CONSTRUCT è una funzionalità di SPARQL che restituisce un grafo RDF corrispondente a un modello di query specificato. In questo caso d'uso, viene utilizzata per esportare i dati di uno spazio dei nomi alla volta, utilizzando una query simile a questa:
CONSTRUCT WHERE { hint:Query hint:analytic "true" . hint:Query hint:constructDistinctSPO "false" . ?s ?p ?o }
Sebbene esistano altri strumenti RDF per esportare i dati, il modo più semplice per eseguire questa query è utilizzare l'endpoint della REST API fornito da Blazegraph. Lo script seguente mostra come usare uno script Python (3.6+) per esportare i dati in formato 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()
Se i dati sono archiviati in modalità tripla, devi modificare il parametro di intestazione Accept
per esportare i dati in un formato appropriato (N-Triples, RDF/XML o Turtle) utilizzando i valori specificati nel repository GitHub di Blazegraph
Esportazione dei dati mediante l'utilità di esportazione di Blazegraph
La classe ExportKB
di Blazegraph è un'utilità per esportare i dati. ExportKB
facilita l'esportazione dei dati da Blazegraph ma, a differenza del metodo precedente, richiede che il server sia offline durante l'esecuzione dell'esportazione. Per questo motivo è il metodo ideale se Blazegraph può rimanere offline durante la migrazione oppure se la migrazione può essere eseguita da un backup dei dati.
Esegui l'utilità da una riga di comando Java su una macchina in cui Blazegraph è installato, ma non è in esecuzione. Il modo più semplice per eseguire questo comando è scaricare l'ultima versione di blazegraph.jar
log4j.primary.configuration
: la posizione del file delle proprietà log4j.log4j.configuration
: la posizione del file delle proprietà log4j.output
: la directory di output per i dati esportati. I file si trovano in formatotar.gz
in una sottodirectory denominata secondo quanto documentato nella knowledge base.format
: il formato di output desiderato, seguito dalla posizione del fileRWStore.properties
. Se i dati sono in modalità tripla, devi cambiare il parametro-format
impostandolo suN-Triples
,Turtle
oRDF/XML
.
Ad esempio, nel caso del file del journal e dei file delle proprietà di Blazegraph, esporta i dati come N-Quads utilizzando il seguente codice:
java -cp blazegraph.jar \ com.bigdata.rdf.sail.ExportKB \ -outdir ~/temp/ \ -format N-Quads \ ./RWStore.properties
Se l'esportazione riesce, verrà visualizzato un output simile a questo:
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
Creazione di un bucket Amazon Simple Storage Service (Amazon S3) e copia dei dati esportati al suo interno
Dopo aver esportato i dati da Blazegraph, crea un bucket Amazon Simple Storage Service (Amazon S3) nella stessa regione del cluster database Neptune di destinazione, in modo che lo strumento di caricamento in blocco Neptune possa usarlo come origine dell'importazione dei dati.
Per istruzioni su come creare un bucket Amazon S3, consulta l'argomento sulla creazione di un bucket S3 nella Guida per l'utente di Amazon Simple Storage Service, nonché gli esempi di creazione di un bucket nella Guida per l'utente di Amazon Simple Storage Service.
Per istruzioni su come copiare nel nuovo bucket Amazon S3 i file di dati che hai esportato, consulta l'argomento sul caricamento di un oggetto in un bucket nella Guida per l'utente di Amazon Simple Storage Service oppure scopri come usare i comandi di alto livello (s3) con AWS CLI. Per copiare i file uno alla volta, puoi anche usare un codice Python simile al seguente:
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 dello strumento di caricamento in blocco di Neptune per importare i dati in Neptune
Dopo aver esportato i dati da Blazegraph e averli copiati in un bucket Amazon S3, è tutto pronto per importare i dati in Neptune. Lo strumento di caricamento in blocco di Neptune consente di caricare i dati più velocemente e con meno sovraccarico rispetto alle operazioni di caricamento con SPARQL. Il processo di caricamento in blocco viene avviato da una chiamata all'API dell'endpoint dello strumento di caricamento, in modo da caricare in Neptune i dati archiviati nel bucket S3 denominato.
Sebbene sia possibile farlo con una chiamata diretta all'endpoint REST dello strumento di caricamento, è necessario avere accesso al VPC privato in cui viene eseguita l'istanza di Neptune di destinazione. È possibile configurare un host bastione, accedere con SSH alla macchina ed eseguire il comando CURL, ma è più facile usare il workbench Neptune.
Il workbench Neptune è un notebook Jupyter preconfigurato che funziona come notebook Amazon SageMaker, in cui sono installati diversi comandi magic specifici per Neptune. Questi comandi magic semplificano le operazioni più comuni di Neptune, come il controllo dello stato del cluster, l'esecuzione degli attraversamenti SPARQL e Gremlin e l'esecuzione di un'operazione di caricamento in blocco.
Per avviare il processo di caricamento in blocco, usa il comando magic %load
, che fornisce un'interfaccia per eseguire il Comando dello strumento di caricamento Neptune.
Accedi alla Console di gestione AWS e apri la console Amazon Neptune all'indirizzo https://console.aws.amazon.com/neptune/home
. Seleziona aws-neptune-blazegraph-to-neptune.
Scegli Apri notebook.
Nell'istanza in esecuzione di Jupyter, seleziona un notebook esistente o creane uno nuovo utilizzando il kernel Python 3.
Nel tuo notebook, apri una cella, inserisci
%load
ed esegui la cella.-
Imposta i parametri per lo strumento di caricamento in blocco:
Per Origine, inserisci la posizione di un file di origine da importare:
s3://{bucket_name}/{file_name}
.Per Formato, scegli il formato appropriato, che in questo esempio è
nquads
.Per Carica ARN, inserisci l'ARN per il ruolo
IAMBulkLoad
(queste informazioni si trovano nella console IAM all'interno di Ruoli).
Scegli Invia.
Il risultato contiene lo stato della richiesta. I caricamenti in blocco sono spesso processi che richiedono molto tempo, quindi la ricezione di una risposta non significa che il caricamento sia stato completato, ma solo che è iniziato. Queste informazioni sullo stato vengono aggiornate periodicamente fino a quando non viene segnalato che il processo è stato completato.
Nota
Queste informazioni sono disponibili anche nel post del blog Moving to the cloud: Migrating Blazegraph to Amazon Neptune