Tecnicamente, qual é a diferença entre s3n, s3a e s3?

121

Estou ciente da existência de https://wiki.apache.org/hadoop/AmazonS3 e das seguintes palavras:

S3 Native FileSystem (esquema URI: s3n) Um sistema de arquivos nativo para leitura e gravação de arquivos regulares no S3. A vantagem desse sistema de arquivos é que você pode acessar arquivos no S3 que foram escritos com outras ferramentas. Por outro lado, outras ferramentas podem acessar arquivos escritos usando Hadoop. A desvantagem é o limite de 5 GB no tamanho do arquivo imposto pelo S3.

S3A (esquema URI: s3a) Um sucessor do S3 Native, s3n fs, o S3a: sistema usa as bibliotecas da Amazon para interagir com o S3. Isso permite que o S3a ofereça suporte a arquivos maiores (limite máximo de 5 GB), operações de desempenho superior e muito mais. O sistema de arquivos pretende ser um substituto para / sucessor do S3 Native: todos os objetos acessíveis a partir de URLs s3n: // também devem ser acessíveis a partir de s3a simplesmente substituindo o esquema de URL.

S3 Block FileSystem (esquema URI: s3) Um sistema de arquivos baseado em bloco apoiado por S3. Os arquivos são armazenados como blocos, assim como no HDFS. Isso permite a implementação eficiente de renomeações. Este sistema de arquivos requer que você dedique um depósito para o sistema de arquivos - você não deve usar um depósito existente contendo arquivos ou gravar outros arquivos no mesmo depósito. Os arquivos armazenados por este sistema de arquivos podem ter mais de 5 GB, mas não são interoperáveis ​​com outras ferramentas S3.

Por que uma mudança de letra no URI poderia fazer tanta diferença? Por exemplo

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

para

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

Qual é a diferença técnica subjacente a essa mudança? Há algum artigo bom que eu possa ler sobre isso?

Ola rapaz
fonte

Respostas:

136

A mudança de letras no esquema URI faz uma grande diferença porque faz com que um software diferente seja usado para fazer a interface com o S3. Algo parecido com a diferença entre http e https - é apenas uma alteração de uma letra, mas desencadeia uma grande diferença no comportamento.

A diferença entre s3 e s3n / s3a é que s3 é uma sobreposição baseada em bloco no topo do Amazon S3, enquanto s3n / s3a não é (eles são baseados em objeto).

A diferença entre s3n e s3a é que s3n oferece suporte a objetos de até 5 GB de tamanho, enquanto s3a oferece suporte a objetos de até 5 TB e tem desempenho superior (ambos porque ele usa upload de várias partes). s3a é o sucessor de s3n.

Se você está aqui porque deseja entender qual sistema de arquivos S3 deve usar com o Amazon EMR, então leia este artigo da Amazon (disponível apenas na máquina de retorno). A rede é: use s3: // porque s3: // e s3n: // são funcionalmente intercambiáveis ​​no contexto de EMR, enquanto s3a: // não é compatível com EMR.

Para obter conselhos adicionais, leia Trabalhar com sistemas de armazenamento e arquivos .

jarmod
fonte
13
O artigo de suporte da Amazon ainda parece estar atualizado, mas agora posso escrever para S3 a partir de trabalhos de EMR usando o s3aesquema. É possível que a resposta deva ser revisada.
mlg
1
@mig Embora s3a possa funcionar, e parece funcionar na minha experiência, não é tecnicamente suportado pela AWS. Portanto, acho que você o usaria por sua própria conta e risco.
jarmod
@jarmod o artigo que você citou aqui não funciona mais. Você poderia atualizar o link?
christang,
@christang Parece que não está mais disponível, então forneceu o link de retorno da máquina.
jarmod
2
Basicamente, o suporte da AWS recomenda s3: // un lugar de s3a: // para qualquer tíquete de suporte
Abhi
56

no Apache Hadoop, "s3: //" refere-se ao cliente S3 original, que usava uma estrutura não padrão para escalabilidade. Essa biblioteca está obsoleta e em breve será excluída,

s3n é seu sucessor, que usava nomes de caminhos diretos para objetos, para que você pudesse ler e gravar dados com outros aplicativos. Como s3: //, ele usa jets3t.jar para se comunicar com S3.

No serviço EMR da Amazon, s3: // se refere ao próprio cliente S3 da Amazon, que é diferente. Um caminho em s3: // no EMR se refere diretamente a um objeto no armazenamento de objeto.

No Apache Hadoop, S3N e S3A são ambos conectores para S3, com S3A como sucessor construído usando o próprio AWS SDK da Amazon. Por que o novo nome? para que possamos enviá-lo lado a lado com o que era estável. S3A é para onde vai todo o trabalho contínuo de escalabilidade, desempenho, segurança, etc. S3N é deixado sozinho para que não o quebremos. O S3A foi lançado no Hadoop 2.6, mas ainda estava se estabilizando até o 2.7, principalmente com alguns problemas de escala menores surgindo.

Se você estiver usando o Hadoop 2.7 ou posterior, use s3a. Se você estiver usando o Hadoop 2.5 ou anterior. s3n, se você estiver usando o Hadoop 2.6, é uma escolha mais difícil. -Eu tentaria s3a e voltaria para s3n se houvesse problemas-

Para mais informações sobre a história, consulte http://hortonworks.com/blog/history-apache-hadoops-support-amazon-s3/

Atualização de 14-03-2017 , na verdade, o particionamento é interrompido no S3a no Hadoop 2.6, pois o tamanho do bloco retornado em uma listFiles()chamada é 0: coisas como Spark e pig particionam o trabalho em uma tarefa / byte. Você não pode usar o S3a para o trabalho analítico no Hadoop 2.6, mesmo se as operações centrais do sistema de arquivos e a geração de dados estiverem satisfeitos. O Hadoop 2.7 corrige isso.

Atualização de 10/01/2018 O Hadoop 3.0 cortou suas implementações s3: e s3n: s3a é tudo o que você tem. Agora é significativamente melhor do que seu antecessor e tem um desempenho pelo menos tão bom quanto a implementação da Amazon. O "s3:" da Amazon ainda é oferecido pela EMR, que é seu cliente de código fechado. Consulte os documentos EMR para obter mais informações.

nível
fonte