Amazon Neptune Bulk Loader를 사용하여 Amazon Simple Storage Service(Amazon S3) 버킷에서 데이터를 로드하려고 합니다. 하지만 일부 요청은 실패합니다. 이 문제를 해결하려면 어떻게 해야 합니까?
간략한 설명
계속 실패하는 데이터 요청 문제를 해결하려면 각 작업의 상태를 확인하십시오. 그런 후 다음을 수행하여 실패한 작업을 식별하십시오.
- 각 개별 로드에 대해 기본 대량 로더 API를 사용하고 각 작업의 상태를 확인합니다.
- 하나의 작업에서 관리 스크립트 및 자동화된 스크립트를 사용합니다. Linux 또는 UNIX 시스템에서 자동화된 스크립트를 생성하고 실행할 수 있습니다.
다음 제한 사항에 유의하십시오.
- Neptune Bulk Loader API는 모든 로드 작업의 스냅샷 보기를 제공하지 않습니다.
- Neptune 클러스터에서 AWS Identity and Access Management(IAM) 권한 부여가 활성화된 경우 Bulk Loader API에 대한 요청에 서명해야 합니다.
- Bulk Loader API는 마지막 1,024개 로드 작업에 대한 정보만 캐싱합니다. 작업당 마지막 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"
]
}
}
2. 각 작업의 상태를 하나씩 확인하여 작업이 성공했는지 확인합니다.
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
2. 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
3. 스크립트를 저장한 다음, 실행할 스크립트에 대한 사용 권한을 제공합니다.
chmod +x script
4. 종속 라이브러리를 설치합니다.
sudo yum install jq
5. 스크립트를 실행합니다.
$ ./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 Get-Status API