如何解決 Amazon Neptune Bulk Loader 中的處理錯誤?

2 分的閱讀內容
0

我正在嘗試使用 Amazon Neptune Bulk Loader 從 Amazon Simple Storage Service (Amazon S3) 儲存貯體載入數據。但是,某些請求失敗。如何對此問題進行疑難排解?

簡短說明

若要疑難排解持續失敗的資料請求,請檢查每個任務的狀態。然後,執行下列動作來識別失敗的任務:

  • 針對每個單項負載使用預設的 Bulk Loader API,並檢查每個任務狀態。
  • 在一個任務中使用管理腳本程式和自動化腳本程式。您可以在 Linux 或 UNIX 系統上建立並執行自動化腳本程式。

請注意以下限制:

  • Neptune Bulk Loader API 不會提供所有負載作業的快照檢視。
  • 如果 Neptune 叢集上啟用了 AWS 身份和存取管理 (IAM) 授權,則必須簽署對 Bulk Load API 的請求。
  • Bulk Loader API 只會快取最近 1024 個負載任務的資訊。它僅存儲每次任務最後 10,000 個錯誤的錯誤詳細信息。

解決方法

使用預設的 Bulk Loader API

  1. 擷取載入程式 ID:
$ curl -G  'https://neptunedemo-cluster.cluster-cw7ehemc1eeo.us-east-1.neptune.amazonaws.com:8182/loader'|jq
{
  "status": "200 OK",
  "payload": {
    "loadIds": [
      "c32bbd24-99a7-45ee-972c-21b7b9cab3e2",
      "6f6342fb-4ea3-452c-ac69-b4d117e37d5a",
      "647114a6-6ed4-4018-896c-e84a08fcf864",
      "521d33fa-7050-44d7-a961-b64ef4e2d1db",
      "d0d4714e-7cf8-415e-89f5-d07ed2732bf2"
    ]
  }
}
  1. 逐一檢查每個任務狀態,以驗證任務是否成功:
curl -G 'https://neptunedemo-cluster.cluster-cw7ehemc1eeo.us-east-1.neptune.amazonaws.com:8182/loader/c32bbd24-99a7-45ee-972c-21b7b9cab3e2?details=true&errors=true&page=1&errorsPerPage=3'|jq
{
  "status": "200 OK",
  "payload": {
    "feedCount": [
      {
        "LOAD_COMPLETED": 2
      }
    ],
    "overallStatus": {
      "fullUri": "s3://demodata/neptune/",
      "runNumber": 5,
      "retryNumber": 0,
      "status": "LOAD_COMPLETED",
      "totalTimeSpent": 3,
      "startTime": 1555574461,
      "totalRecords": 8,
      "totalDuplicates": 8,
      "parsingErrors": 0,
      "datatypeMismatchErrors": 0,
      "insertErrors": 0
    },
    "errors": {
      "startIndex": 0,
      "endIndex": 0,
      "loadId": "c32bbd24-99a7-45ee-972c-21b7b9cab3e2",
      "errorLogs": []
    }
  }
}

使用管理腳本程式

您可以使用管理腳本程式來識別生產程序中失敗的 Neptune Bulk Loader 任務。管理腳本程式會針對所有負載任務以下格式產生輸出:

Startime-loadid:status,S3location,Errors

**注意:**管理腳本程式可從任何可存取 Neptune 叢集的 Linux 系統中使用。

在 Linux 或 UNIX 系統上建立並執行自動化腳本程式

  1. 使用文本編輯器建立腳本程式:
$ vi script
  1. 請務必使用適當的值取代 cluster-endpoint:Port
cluster_ep="https://cluster-endpoint:Port/loader"

for loadId in $(curl --silent -G "${cluster_ep}?details=true" | jq '.payload.loadIds[]');
do
        clean_loadId=$(echo -n ${loadId} | tr -d '"')
        time=$(date -d@$(curl --silent -G "${cluster_ep}/${clean_loadId}?details=true" | jq '.payload.overallStatus.startTime'))
        echo -n $time '-'
        echo -n ${clean_loadId}: $(curl --silent -G "${cluster_ep}/${clean_loadId}?details=true" | jq '.payload.overallStatus.status')
        echo -n ',S3 LOCATION': $(curl --silent -G "${cluster_ep}/${clean_loadId}?details=true" | jq '.payload.overallStatus.fullUri')
        echo -n ',ERRORS': $(curl --silent -G "${cluster_ep}/${clean_loadId}?details=truei&errors=true&page=1&errorsPerPage=3" | jq '.payload.errors.errorLogs')

        echo
done
  1. 儲存腳本程式,然後提供腳本程式執行的權限:
chmod +x script
  1. 安裝相依程式庫:
sudo yum install jq
  1. 運行腳本程式:
$ ./script

這是範例輸出:

Thu Apr 18 08:01:01 UTC 2019 -c32bbd24-99a7-45ee-972c-21b7b9cab3e2: "LOAD_COMPLETED",S3 LOCATION: "s3://demodata/neptune/",ERRORS: null
Fri Apr 5 07:04:00 UTC 2019 -6f6342fb-4ea3-452c-ac69-b4d117e37d5a: "LOAD_COMPLETED",S3 LOCATION: "s3://demodata/neptune/",ERRORS: null
Fri Apr 5 07:01:30 UTC 2019 -647114a6-6ed4-4018-896c-e84a08fcf864: "LOAD_COMPLETED",S3 LOCATION: "s3://demodata/neptune/",ERRORS: null
Tue Mar 19 17:36:02 UTC 2019 -521d33fa-7050-44d7-a961-b64ef4e2d1db: "LOAD_COMPLETED",S3 LOCATION: "s3://demodata/neptune/",ERRORS: null
Tue Mar 19 17:35:45 UTC 2019 -d0d4714e-7cf8-415e-89f5-d07ed2732bf2: "LOAD_COMPLETED",S3 LOCATION: "s3://demodata/neptune/",ERRORS: null

相關資訊

範例: 將資料載入 Neptune DB 執行個體

Neptune Loader 獲取狀態 API

AWS 官方
AWS 官方已更新 4 年前