기술적으로 s3n, s3a 및 s3의 차이점은 무엇입니까?


121

https://wiki.apache.org/hadoop/AmazonS3 의 존재 와 다음 단어를 알고 있습니다 .

S3 기본 파일 시스템 (URI 체계 : s3n) S3에서 일반 파일을 읽고 쓰기위한 기본 파일 시스템입니다. 이 파일 시스템의 장점은 다른 도구로 작성된 S3의 파일에 액세스 할 수 있다는 것입니다. 반대로 다른 도구는 Hadoop을 사용하여 작성된 파일에 액세스 할 수 있습니다. 단점은 S3가 부과하는 파일 크기에 대한 5GB 제한입니다.

S3A (URI 체계 : s3a) S3 Native의 후속 제품인 s3n fs 인 S3a : 시스템은 Amazon의 라이브러리를 사용하여 S3와 상호 작용합니다. 이를 통해 S3a는 더 큰 파일 (5GB 제한 없음), 고성능 작업 등을 지원할 수 있습니다. 파일 시스템은 S3 Native를 대체 / 후속하기위한 것입니다. s3n : // URL에서 액세스 할 수있는 모든 객체는 URL 스키마를 교체하여 s3a에서도 액세스 할 수 있어야합니다.

S3 블록 파일 시스템 (URI 체계 : s3) S3가 지원하는 블록 기반 파일 시스템입니다. 파일은 HDFS에있는 것처럼 블록으로 저장됩니다. 이를 통해 이름 바꾸기를 효율적으로 구현할 수 있습니다. 이 파일 시스템을 사용하려면 파일 시스템 전용 버킷을 사용해야합니다. 파일이 포함 된 기존 버킷을 사용하거나 다른 파일을 동일한 버킷에 쓰면 안됩니다. 이 파일 시스템에 저장된 파일은 5GB보다 클 수 있지만 다른 S3 도구와 상호 운용 할 수 없습니다.

URI의 문자 변경이 왜 그런 차이를 만들 수 있습니까? 예를 들면

val data = sc.textFile("s3n://bucket-name/key")

val data = sc.textFile("s3a://bucket-name/key")

이 변경의 근본적인 기술적 차이점은 무엇입니까? 이것에 대해 읽을 수있는 좋은 기사가 있습니까?

답변:


136

URI 체계의 문자 변경은 S3에 인터페이스하는 데 다른 소프트웨어를 사용하기 때문에 큰 차이를 만듭니다. http와 https의 차이와 비슷합니다. 한 글자로만 변경되지만 동작에 큰 차이를 유발합니다.

s3와 s3n / s3a의 차이점은 s3는 Amazon S3 위에있는 블록 기반 오버레이 인 반면 s3n / s3a는 그렇지 않다는 것입니다 (객체 기반 임).

s3n과 s3a의 차이점은 s3n은 최대 5GB 크기의 객체를 지원하는 반면 s3a는 최대 5TB의 객체를 지원하고 더 높은 성능을 제공한다는 것입니다 (둘 다 멀티 파트 업로드를 사용하기 때문입니다). s3a는 s3n의 후속 제품입니다.

Amazon EMR에서 사용해야하는 S3 파일 시스템을 이해하기 위해 여기에 온 경우 Amazon 에서이 기사 를 읽으십시오 (웨이 백 머신에서만 사용 가능). net은 s3 : //를 사용하는 것입니다. s3 : // 및 s3n : //은 EMR 컨텍스트에서 기능적으로 상호 교환 가능하지만 s3a : //는 EMR과 호환되지 않기 때문입니다.

추가 조언 은 스토리지 및 파일 시스템 작업을 참조하십시오 .


13
Amazon의 지원 문서는 여전히 최신 상태로 보이지만 이제이 s3a체계를 사용하여 EMR 작업에서 S3에 쓸 수 있습니다 . 답변을 수정해야 할 수도 있습니다.
mlg

1
@mig s3a가 작동 할 수 있고 내 경험으로는 작동하는 것 같지만 AWS에서 기술적으로 지원하지 않습니다. 그래서 나는 당신이 위험을 감수하고 그것을 사용할 것이라고 생각합니다.
jarmod

@jarmod 여기서 인용 한 기사는 더 이상 작동하지 않습니다. 링크를 업데이트 할 수 있습니까?
christang

@christang 더 이상 사용할 수없는 것 같아서 웨이 백 머신 링크를 제공했습니다.
jarmod

2
기본적으로 AWS 지원은 모든 지원 티켓에 대해 s3 : // un place of s3a : //를 권장합니다
Abhi

56

Apache Hadoop에서 "s3 : //"는 확장 성을 위해 비표준 구조를 사용한 원래 S3 클라이언트를 나타냅니다. 해당 라이브러리는 더 이상 사용되지 않으며 곧 삭제 될 예정입니다.

s3n은 객체에 대한 직접 경로 이름을 사용하는 후속 제품이므로 다른 응용 프로그램에서 데이터를 읽고 쓸 수 있습니다. s3 : //와 마찬가지로 jets3t.jar을 사용하여 S3와 통신합니다.

Amazon의 EMR 서비스에서 s3 : //는 Amazon의 자체 S3 클라이언트를 나타내며 이는 다릅니다. EMR에서 s3 : //의 경로는 객체 저장소의 객체를 직접 참조합니다.

Apache Hadoop에서 S3N과 S3A는 모두 S3에 대한 커넥터이며 S3A는 Amazon의 자체 AWS SDK를 사용하여 구축 된 후속 제품입니다. 왜 새 이름입니까? 안정된 제품과 나란히 배송 할 수 있습니다. S3A는 확장 성, 성능, 보안 등에 대한 모든 지속적인 작업이 진행되는 곳입니다. S3N은 혼자 남겨져 있으므로 깨지지 않습니다. S3A는 Hadoop 2.6으로 출시되었지만 주로 일부 사소한 규모 문제가 드러나면서 2.7까지 안정화되었습니다.

Hadoop 2.7 이상을 사용하는 경우 s3a를 사용하십시오. Hadoop 2.5 또는 이전 버전을 사용하는 경우. s3n, Hadoop 2.6을 사용하는 경우 더 어려운 선택입니다. -s3a를 시도하고 문제가 있으면 s3n으로 다시 전환합니다 .-

자세한 내역은 http://hortonworks.com/blog/history-apache-hadoops-support-amazon-s3/를 참조하십시오 .

2017-03-14 업데이트는 실제로 Hadoop 2.6의 S3a에서 파티셔닝이 중단되었습니다. listFiles()호출 에서 반환 된 블록 크기 가 0이기 때문입니다. Spark 및 pig와 같은 작업은 작업을 하나의 작업 / 바이트로 분할합니다. 핵심 파일 시스템 작업 및 데이터 생성이 만족 스럽더라도 Hadoop 2.6의 분석 작업에 S3a를 사용할 수 없습니다. Hadoop 2.7은이를 수정합니다.

2018-01-10 업데이트 Hadoop 3.0은 s3 : 및 s3n 구현을 줄였습니다. s3a 만 있으면됩니다. 이제 이전 버전보다 훨씬 뛰어나며 최소한 Amazon 구현만큼 우수한 성능을 발휘합니다. Amazon의 "s3 :"는 여전히 폐쇄 소스 클라이언트 인 EMR에서 제공합니다. 자세한 정보 는 EMR 문서 를 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.