2017-12-21 31 views
0

ListS3, fetchS3object 및 PutHDFS를 사용하여 S3에서 HDFS로 데이터를 복사하려고합니다. S3 버킷의 데이터는 다음과 같이 구성됩니다. 동일한 폴더 구조 (폴더 이름이 동적 임)로 HDFS에 복사해야합니다.NIFI (S3 to HDFS)

bucketname/부모 폴더 1/subfolder1/filename1.txt

bucketname/부모 폴더 1/subfolder2/filename2.txt

bucketname/부모 Folder2와/subfolder1/filename3.txt

PutHDFS 프로세서는 다음과 같은 오류를

org.apache.nifi.pr를 보이고 ocessor.exception.ProcessException : HDFS에 파일을 복사하지만

내가 폴더 S3 가상 것으로 알고 있습니다 최종 파일 이름에 /dev/.parent-folder1/subfolder1/filename1.txt 를 점 파일의 이름을 변경하지 못했습니다 . 그것은 UpdateAttribute 프로세서 ($ {filename : replaceAll ("/", "-")})를 도입함으로써 작동하지만 structred 폴더는 HDFS에서 생성되지 않습니다. 다른 옵션은 무엇입니까? 템플릿이 있습니까?

오류 처리에 대한 약간의 의문
1) ListS3 프로세서는 상태를 유지 관리합니다. ListS3 및 fetchS3 객체가 성공적이며 PutHDFS가 실패하면 어떻게됩니까? ListS3로드 파일을 다시 보거나 예외를 처리하는 것은 개발자의 책임입니다. fetchS3 객체에 의해로드 된 플로우 파일을 재사용 할 수 있습니까?
2) 어떻게 최종 사용자가 성공적으로 사본을 알고 않으며

답변

1

내가 문제가 FetchS3Object 나오는 흐름 파일의 "파일 이름"속성이 같은 설정되어 있는지 생각 사본

감사 틸락 실패 "parent-folder1/subfolder1/filename1.txt"이지만 PutHDFS는이 값을 "filename1.txt"로 지정해야합니다.

PutHDFS를 중단하고 플로우 파일이 들어오는 대기열에있을 때까지 대기 한 다음 대기열을 나열하고 플로우 파일의 속성을보고 어떤 파일 이름이 동일한 지 확인할 수 있습니다.

내가 제안한 것이 사실이라면 PutHDFS 전에 UpdateAttribute를 사용하여 filename = $ {filename : substringAfterLast ('/')}를 만들 수 있습니다.

PutHDFS에서 "/ dev/$ {path}"디렉토리 속성 또는 버킷의 경로가있는 속성을 만듭니다.

상황이 다운 스트림 작동 여부, 그래서 다시 시도하거나 상태를 재설정하지 않습니다에서 경우 ListS3는 지식이 없습니다) ...

1을 특정 질문에 대답합니다.

2) PutHDFS의 관계에 따라 성공 또는 실패를 알아야합니다. 실패한 관계를 다시 처리하거나 재 시도 할 수 있도록 어딘가에 라우팅해야합니다.

+0

감사합니다. Bryan. 감사합니다. – Tilak