2017-02-01 1 views
0

S3에서 파일을 가져와 RouteOnAttribute 프로세서로 파이핑하면 ListS3 프로세서가 사용됩니다. 거기에서 Route to Property nameRouting Strategy으로 사용하고 듣고있는 파일에 속성베이스를 지정합니다.Nifi ListS3 프로세서가 S3에 저장된 파일의 전체 경로를 반환하지 않음

원하는 파일을 모두 볼 수는 있지만 다른 프로세서에 해당 파일이 full path 필요하기 때문에 아무 것도 할 수 없습니다. 나는 cmd 라인 인수로 file path을 사용하는 파이썬 스크립트를 사용하고 있습니다.

S3에서 파일의 전체 절대 경로를 어떻게 추출합니까?

답변

2

당신은, 목록 다운로드, 로컬 다음과 같이 NiFi 프로세서의 시퀀스를 사용하여 S3 파일을 저장할 수 있습니다

  1. ListS3이 - S3는 필터링 할 수 있습니다 객체에 대한 참조를 얻을 수 있습니다. - 버킷의 이름, my-bucket

  2. 파일 이름 같은 - 객체의 키 path/to/file.txt 같은

    • s3.bucket : ListS3의 출력은 속성의 개체에 대한 참조 만이 아니라 콘텐츠 자체를 포함
  3. FetchS3Object는 - 위 ListS3에서 양동이와 키를 사용하여 S3에서 객체의 컨텐츠를 다운로드합니다.

  4. PutFile - 파일을 로컬로 저장합니다. 파일을 /path/to/directory에 배치 할 위치에서 Directory 속성을 지정하십시오. 파일 이름의 S3 속성은 S3 키의 상대 경로를 포함하므로 기본적으로 Directory에 추가됩니다.

그런 다음 NiFi 표현 언어 사용하여 파이썬 스크립트에 대한 로컬 경로를 조립할 수 :

/path/to/directory/${filename} 
+0

그래서, 난 여전히 파이썬 스크립트 cmd를 라인 인수로 사용할 수 있습니까? 'python myscript.py -file "s3 : // $ {s3.bucket}/$ {filename}"'과 같은 것입니까? – summerNight

+0

예, Python 스크립트를 실행하는'ExecuteStreamCommand'에 대한 인수를 정의하는 데 사용할 수 있습니다. – James

+0

어쩌면 내가 여기 뭔가를 오해하고있다, 내 파이썬 스크립트가 날'파일을 찾을 수 없음 '오류를 던지고있다. 당신은'PutFile' 또는 s3 파일을 로컬에 먼저 저장하는 것과 같은 것을 사용할 필요가 없다고 확신합니까? – summerNight

관련 문제