web-dev-qa-db-fra.com

Techniquement, quelle est la différence entre s3n, s3a et s3?

Je suis conscient de l'existence de https://wiki.Apache.org/hadoop/AmazonS et des mots suivants:

S3 Native FileSystem (schéma d'URI: s3n) Un système de fichiers natif pour la lecture et l'écriture de fichiers normaux sur S3. L'avantage de ce système de fichiers est que vous pouvez accéder aux fichiers sur S3 qui ont été écrits avec d'autres outils. Inversement, d'autres outils peuvent accéder aux fichiers écrits avec Hadoop. L'inconvénient est la limite de 5 Go de taille de fichier imposée par S3.

S3A (schéma d'URI: s3a) Successeur du système S3 Native, s3n fs, le système S3a: utilise les bibliothèques d'Amazon pour interagir avec S3. Cela permet à S3a de prendre en charge des fichiers plus volumineux (plus de 5 Go maximum), des opérations plus performantes et plus encore. Le système de fichiers est destiné à remplacer/les successeurs de S3 Native: tous les objets accessibles à partir de s3n: // les URL devraient également être accessibles à partir de s3a simplement en remplaçant le schéma d'URL.

S3 Block FileSystem (schéma d'URI: s3) Un système de fichiers basé sur des blocs et sauvegardé par S3. Les fichiers sont stockés sous forme de blocs, exactement comme dans HDFS. Cela permet une implémentation efficace des renommés. Ce système de fichiers nécessite que vous dédiiez un compartiment pour le système de fichiers. Vous ne devez pas utiliser un compartiment existant contenant des fichiers, ni écrire d'autres fichiers dans le même compartiment. Les fichiers stockés par ce système de fichiers peuvent dépasser 5 Go, mais ils ne sont pas interopérables avec d'autres outils S3.

Pourquoi un changement de lettre sur l'URI pourrait faire une telle différence? Par exemple

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

à

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

Quelle est la différence technique à la base de ce changement? Y at-il de bons articles que je peux lire à ce sujet?

99
Hello lad

Le changement de lettre sur le schéma d'URI fait une grande différence car il oblige différents logiciels à se connecter à S3. Un peu comme la différence entre http et https - ce n'est qu'un changement d'une lettre, mais cela déclenche une grande différence de comportement.

La différence entre s3 et s3n/s3a réside dans le fait que s3 est une superposition par bloc superposée à Amazon S3, alors que s3n/s3a ne le sont pas (ils sont basés sur des objets).

La différence entre s3n et s3a réside dans le fait que s3n prend en charge les objets d’une taille maximale de 5 Go, tandis que s3a prend en charge les objets jusqu’à 5 To et offre des performances supérieures (les deux le sont du fait qu’il utilise le téléchargement en plusieurs parties). S3A est le successeur de S3N.

Si vous êtes ici parce que vous voulez savoir quel système de fichiers S3 vous devez utiliser avec Amazon EMR, alors lisez cet article sur Amazon (uniquement disponible sur la machine de retour). Le réseau est le suivant: utilisez s3: // car s3: // et s3n: // sont fonctionnellement interchangeables dans le contexte d'EMR, alors que s3a: // n'est pas compatible avec EMR.

Pour des conseils supplémentaires, lisez tilisation de systèmes de stockage et de fichiers .

112
jarmod

dans Apache Hadoop, "s3: //" fait référence au client S3 d'origine, qui utilisait une structure non standard pour l'évolutivité. Cette bibliothèque est obsolète et sera bientôt supprimée,

s3n est son successeur, qui utilisait des noms de chemin d'accès directs aux objets pour vous permettre de lire et d'écrire des données avec d'autres applications. Comme s3: //, il utilise jets3t.jar pour parler à S3.

Sur le service EMR d'Amazon, s3: // fait référence au propre client S3 d'Amazon, qui est différent. Un chemin dans s3: // sur EMR fait directement référence à un objet du magasin d'objets.

Dans Apache Hadoop, S3N et S3A sont tous deux des connecteurs vers S3, S3A étant son successeur, qui utilise le propre kit SDK AWS d’Amazon. Pourquoi ce nouveau nom? afin que nous puissions l'expédier côte à côte avec celui qui était stable. S3A est le point de départ de tous les travaux en cours sur l'évolutivité, les performances, la sécurité, etc. S3N est laissé seul afin que nous ne le cassons pas. S3A a été livré dans Hadoop 2.6, mais était encore stable jusqu'à la 2.7, principalement avec quelques problèmes mineurs d'échelle.

Si vous utilisez Hadoop 2.7 ou une version ultérieure, utilisez s3a. Si vous utilisez Hadoop 2.5 ou une version antérieure. s3n, si vous utilisez Hadoop 2.6, le choix est plus difficile. -Je voudrais essayer s3a et revenir à s3n s'il y avait des problèmes-

Pour plus d’historique, voir http://hortonworks.com/blog/history-Apache-hadoops-support-Amazon-s3/

2017-03-14 Mise à jour En fait, le partitionnement est interrompu sur S3a dans Hadoop 2.6, car la taille de bloc renvoyée dans un appel listFiles() est égale à 0. : des choses comme Spark & pig divisent le travail en une tâche/octet. Vous ne pouvez pas utiliser S3a pour le travail d’analyse dans Hadoop 2.6, même si la génération des opérations et des données du système de fichiers principal est satisfaisante. Hadoop 2.7 corrige cela.

2018-01-10 Mise à jour Hadoop 3.0 a coupé ses implémentations s3: et s3n: s3a est tout ce que vous obtenez. Il est maintenant nettement meilleur que son prédécesseur et fonctionne aussi bien que l'implémentation Amazon. "S3:" d'Amazon est toujours proposé par EMR, qui est leur client à source fermée. Consultez le documentation EMR pour plus d'informations.

45
Steve Loughran