복붙노트

[HADOOP] S3AFileSystem는 - FileAlreadyExistsException 접두사는 디렉토리 트리의 파일 및 일부 경우

HADOOP

S3AFileSystem는 - FileAlreadyExistsException 접두사는 디렉토리 트리의 파일 및 일부 경우

우리는 S3 버킷에 마루 파일을 작성하는 AWS-자바 SDK-1.7.4.jar 하둡-AWS-2.7.5.jar와 아파치 스파크 작업을 실행하고 있습니다.

우리는 키가 'S3 : // mybucket / D1 / D2 / D3 / D4 / D5 / D6 / D7'이 (S3)에서 (텍스트 파일 인 D7). 우리는 또한이 키 '(S3) : //mybucket/d1/d2/d3/d4/d5/d6/d7/d8/d9/part_dt=20180615/a.parquet'(a.parquet 파일 인)

우리는 아래에 b.parquet 파일을 작성하는 스파크 작업을 실행하면 'S3 : // mybucket / D1 / D2 / D3 / D4 / D5 / D6 / D7 / D8 / D9 / part_dt = 20,180,616 /'(즉,하고 싶은 ' S3 ') S3에서 만든 얻을 //mybucket/d1/d2/d3/d4/d5/d6/d7/d8/d9/part_dt=20180616/b.parquet 우리는 아래에 오류가

org.apache.hadoop.fs.FileAlreadyExistsException: Can't make directory for path 's3a://mybucket/d1/d2/d3/d4/d5/d6/d7' since it is a file.
at org.apache.hadoop.fs.s3a.S3AFileSystem.mkdirs(S3AFileSystem.java:861)
at org.apache.hadoop.fs.FileSystem.mkdirs(FileSystem.java:1881)

해결법

  1. ==============================

    1.하둡-15542에서 설명하고있는 바와 같이. 당신은 "정상"FS에 디렉토리 아래의 파일을 가질 수 없습니다; 당신은 충분한 실사를 수행 적어도 경우, S3A 커넥터에서 그들을하지 않습니다.

    하둡-15542에서 설명하고있는 바와 같이. 당신은 "정상"FS에 디렉토리 아래의 파일을 가질 수 없습니다; 당신은 충분한 실사를 수행 적어도 경우, S3A 커넥터에서 그들을하지 않습니다.

    그것은 단지, 삭제, 파일을 검사 아무것도, 모든 단일 트리 보행 알고리즘을 혼란 이름을 바꿉니다. 이 스파크 분할 로직이 포함됩니다. 그 새로운 디렉토리 트리 당신은 아마 호출자에게 보이지 않는 나타납니다 만들기 위해 노력하고 있습니다. (당신은 위치에 텍스트 파일의 PUT을하고, 그것을 만들어이 테스트를 어떻게 볼 수 있습니다)

    우리는 아무도 그들을 쓰거나 등을위한 테스트를 작성하는 성가 시게하지한다는 FS는 "이렇게 명백한"일을 정의 포함하여 하둡 파일 시스템 사양에 무엇을해야하는지 정의하는 시도

    모든 너무 자주 우리는 우리가하는 "진짜"파일 시스템 박스를 적용, 고려 잊고 새로운 일을 발견하지만, 저장하지 않는 객체한다. 그럼 우리가 성능에 미치는 영향은하지 못할 것입니다 경우를 제외하고 은유를 유지하기 위해 최선을 다할, 테스트를 추가합니다. 그런 다음 우리는 사물과 희망 아무도 통지를 수정하지 않는 선택. 하둡 / 하이브 / 스파크 공간 데이터로 작업 사람들이 파일 시스템이하는 일의 그 같은 선입견을 가지고 있기 때문에 일반적으로 이러한 모호성은 실제로 생산에 문제가 발생하지 않습니다.

    당신이 일관성 서비스 (S3Guard 일관 EMRFS), 또는이 세상을 위해 설계된 커밋 프로토콜없이 스파크에서 직접 S3에 데이터를 기록하지 않아야하는 이유 물론 최종 일관성의 제외 (S3A 커미터, DBIO를 databricks).

  2. from https://stackoverflow.com/questions/50868123/s3afilesystem-filealreadyexistsexception-when-prefix-is-a-file-and-part-of-a-d by cc-by-sa and MIT license