本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 Blazegraph 遷移到 Amazon Neptune
如果您在開放原始碼 Blazegraph
佈建 AWS 基礎設施。首先,使用 AWS CloudFormation 範本佈建所需的 Neptune 基礎設施 (請參閱 建立 Neptune 叢集)。
從 Blazegraph 匯出資料。從 Blazegraph 匯出資料有兩種主要方法,即使用 SPARQL CONSTRUCT 查詢或使用 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 中,支援多重租用的方式為將資料儲存在具名圖形中,並針對 SPARQL 查詢使用 USING NAMED 子句,或為每個租用戶建立個別的資料庫叢集。
聯合 – Neptune 目前支援 SPARQL 1.1 聯合至可供 Neptune 執行個體存取的位置,例如在私有 VPC 內、跨 VPC 或外部網際網路端點。根據特定設定和必要的聯合端點,您可能需要一些額外的網路組態。
Blazegraph 標準延伸模組 — Blazegraph 包含 SPARQL 和 REST API 標準的多個延伸模組,而 Neptune 僅與標準規格本身相容。這可能需要變更您的應用程式,否則會使遷移變得困難。
為 Neptune 佈建 AWS 基礎設施
雖然您可以透過 AWS Management Console 或 AWS CLI 手動建構必要的 AWS 基礎設施,但改用 CloudFormation 範本通常更為便利,如下所述:
使用 CloudFormation 範本佈建 Neptune:
在您偏好的區域中選擇啟動堆疊。
-
設定必要的參數 (堆疊名稱和
EC2SSHKeyPairName
)。也會設定下列選用參數,讓遷移程序可以輕鬆地執行:將
AttachBulkloadIAMRoleToNeptuneCluster
設定為 true。此參數允許建立適當的 IAM 角色並將其附加到您的叢集,以允許大量載入資料。將
NotebookInstanceType
設定為您偏好的執行個體類型。此參數會建立 Neptune 工作簿,您會用來將大量載入執行至 Neptune 並驗證遷移。
選擇 Next (下一步)。
設定您想要的任何其他堆疊選項。
選擇 Next (下一步)。
檢閱您的選項並選取這兩個核取方塊,以確認 AWS CloudFormation 可能需要其他功能。
選擇 Create Stack (建立堆疊)。
堆疊建立程序需要幾分鐘的時間。
從 Blazegraph 匯出資料
下一步是以與 Neptune 大量載入器相容的格式從 Blazegraph 中匯出資料。
根據資料在 Blazegraph 中的儲存方式 (三元組或四元組) 以及使用中的命名圖形數量,Blazegraph 可能會要求您多次執行匯出程序並產生多個資料檔案:
如果資料儲存為三元組,則您需要針對每個具名圖形執行一次匯出。
如果資料儲存為四元組,您可以選擇以 N-Quads 格式匯出資料,或以三元組格式匯出每個具名圖形。
下面我們假設您將單一命名空間匯出為 N-Quads,但是您可以針對其他命名空間或所需的匯出格式重複此程序。
如果您需要 Blazegraph 在遷移期間上線且可用,請使用 SPARQL CONSTRUCT 查詢。這需要您安裝、設定和執行 Blazegraph 執行個體,具中具有可存取的 SPARQL 端點。
如果您不需要 Blazegraph 上線,請使用 BlazeGraph 匯出公用程式
使用 SPARQL CONSTRUCT 從 Blazegraph 匯出資料
SPARQL CONSTRUCT 是 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-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 存放庫
使用 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 (Amazon S3) 儲存貯體,並將匯出的資料複製到其中
一旦從 Blazegraph 匯出了您的資料,請在與目標 Neptune 資料庫叢集相同的區域中建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體,以供 Neptune 大量載入器用來從中匯入資料。
如需如何建立 Amazon S3 儲存貯體的指示,請參閱 Amazon Simple Storage Service 使用者指南https://docs.aws.amazon.com/AmazonS3/latest/user-guide/中的如何建立 S3 儲存貯體?,以及 Amazon Simple Storage Service 使用者指南https://docs.aws.amazon.com/AmazonS3/latest/dev/中的建立儲存貯體的範例。
如需如何將您已匯出的資料複製到新 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。與使用 SPARQL 執行負載作業相比,Neptune 具有可以更快地載入資料且負荷更少的大量載入器。大量載入器程序會透過呼叫載入器端點 API 來啟動,以將儲存在所識別 S3 儲存貯體的資料載入至 Neptune。
雖然您可以直接呼叫載入器 REST 端點來執行此操作,但您必須對目標 Neptune 執行個體執行所在的私有 VPC 具有存取權。您可以設定堡壘主機、透過 SSH 進入該機器,然後執行 cURL 命令,但使用 Neptune 工作台更容易。
Neptune 工作台是一個預先設定的 Jupyter 筆記本,以 Amazon SageMaker 筆記本形式執行,其中安裝了數個 Neptune 特定的筆記本魔法。這些魔法可簡化常見的 Neptune 操作,例如檢查叢集狀態、執行 SPARQL 和 Gremlin 周遊,以及執行大量載入操作。
若要啟動大量載入程序,請使用 %load
魔法,這會提供一個執行 Neptune 載入器命令 的介面:
登入 AWS 管理主控台,然後開啟位於 https://console.aws.amazon.com/neptune/home
的 Amazon Neptune 主控台。 選取 aws-neptune-blazegraph-to-neptune。
選擇開啟筆記本。
在 Jupyter 的執行中執行個體中,請選取現有的筆記本,或使用 Python 3 核心建立新的筆記本。
在您的記事本中,開啟儲存格、輸入
%load
,然後執行儲存格。-
設定大量載入器的參數:
針對來源,輸入要匯入的來源檔案位置:
s3://{bucket_name}/{file_name}
。針對格式,選擇適當的格式,在此範例中為
nquads
。針對載入 ARN,輸入
IAMBulkLoad
角色的 ARN (此資訊位於 IAM 主控台的角色下)。
選擇 Submit (提交)。
結果包含請求的狀態。大量載入通常是長時間執行的過程,因此回應並不表示載入已完成,只是它已開始。此狀態資訊會定期更新,直到其報告工作完成為止。
注意
此資訊也可以在部落格文章移至雲端:將 Blazegraph 遷移至 Amazon Neptune