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?
fonte
s3a
esquema. É possível que a resposta deva ser revisada.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.
fonte