Come posso risolvere gli errori di elaborazione in Amazon Neptune Bulk Loader?

3 minuti di lettura
0

Sto cercando di utilizzare Amazon Neptune Bulk Loader per caricare dati da un bucket Amazon Simple Storage Service (Amazon S3). Tuttavia, alcune richieste non vanno a buon fine. Come posso risolvere questo problema?

Breve descrizione

Per risolvere i problemi relativi a richieste di dati che continuano ad avere esito negativo, controlla lo stato di ogni processo. Identifica poi i lavori con esito negativo effettuando le seguenti operazioni:

  • Usa l'API Bulk Loader predefinita per ogni singolo caricamento e controlla lo stato di ogni lavoro.
  • Usa uno script di amministrazione e uno script automatico in un unico lavoro. È possibile creare ed eseguire lo script automatico su un sistema Linux o UNIX.

Prendi nota di queste limitazioni:

  • L'API Neptune Bulk Loader non fornisce una visualizzazione istantanea di tutte le operazioni di caricamento.
  • Se l'autorizzazione AWS Identity and Access Management (IAM) è abilitata sul cluster Neptune, le richieste all'API Bulk Loader devono essere firmate.
  • L'API Bulk Loader memorizza nella cache le informazioni solo sugli ultimi 1024 processi di caricamento. Memorizza solo i dettagli degli ultimi 10.000 errori per processo.

Soluzione

Usa l'API Bulk Loader predefinita

1.    Recupera gli ID del loader:

$ 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"
    ]
  }
}

2.    Controlla lo stato di ogni processo, singolarmente, per verificare che il processo sia stato completato con esito positivo:

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": []
    }
  }
}

Usa uno script di amministrazione

Puoi utilizzare uno script di amministrazione per identificare un processo di Neptune Bulk Loader non riuscito nel tuo processo di produzione. Lo script di amministrazione genera un output nel seguente formato per tutti i processi di caricamento:

Startime-loadid:status,S3location,Errors

Nota: lo script di amministrazione può essere utilizzato da qualsiasi sistema Linux che abbia accesso al cluster Neptune.

Crea ed esegui lo script automatico su un sistema Linux o UNIX

1.    Crea lo script utilizzando un editor di testo:

$ vi script

2.    Assicurati di sostituire Cluster-endpoint:Port con i valori appropriati:

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

3.    Salva lo script, quindi fornisci le autorizzazioni per la sua esecuzione:

chmod +x script

4.    Installa la libreria dipendente:

sudo yum install jq

5.    Esegui lo script:

$ ./script

Questo è un esempio di output:

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

Informazioni correlate

Esempio: caricamento di dati in un'istanza DB di Neptune

API Neptune Loader Get-Status

AWS UFFICIALE
AWS UFFICIALEAggiornata 4 anni fa