技術的には、s3n、s3a、s3の違いは何ですか?


120

https://wiki.apache.org/hadoop/AmazonS3と次の単語の存在を知っています。

S3 Native FileSystem(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 Block FileSystem(URIスキーム:s3)S3がサポートするブロックベースのファイルシステム。ファイルは、HDFSと同様にブロックとして保存されます。これにより、名前の変更を効率的に実装できます。このファイルシステムでは、ファイルシステム専用のバケットを用意する必要があります。ファイルを含む既存のバケットを使用したり、同じバケットに他のファイルを書き込んだりしないでください。このファイルシステムによって保存されるファイルは5GBを超える可能性がありますが、他のS3ツールと相互運用できません。

URIの文字を変更すると、なぜそのような違いが生じるのですか?例えば

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

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

この変更の根底にある技術的な違いは何ですか?これについて私が読むことができる良い記事はありますか?

回答:


135

URIスキームの文字の変更は、S3へのインターフェースに異なるソフトウェアが使用されるため、大きな違いをもたらします。httpとhttpsの違いに少し似ています。これは1文字の変更にすぎませんが、動作に大きな違いを引き起こします。

s3とs3n / s3aの違いは、s3n / s3aはそうではない(s3n / s3aはオブジェクトベースである)一方で、s3はAmazon S3上のブロックベースのオーバーレイであることです。

s3nとs3aの違いは、s3nは最大5GBのオブジェクトをサポートするのに対し、s3aは最大5TBのオブジェクトをサポートし、より高いパフォーマンスを発揮します(どちらもマルチパートアップロードを使用するためです)。s3aはs3nの後継です。

Amazon EMRで使用するS3ファイルシステムを理解するためにここにいる場合は、Amazon からこの記事を読んでください(ウェイバックマシンでのみ利用可能)。ネットは次のとおりです。s3://とs3n://は、EMRのコンテキストでは機能的に交換可能ですが、s3a://はEMRと互換性がないため、s3://を使用してください。

追加のアドバイスについては、「ストレージおよびファイルシステムの操作」を参照してください


12
Amazonのサポート記事はまだ最新のようですが、このs3aスキームを使用してEMRジョブからS3に書き込むことができます。答えを修正する必要がある可能性があります。
mlg 2018年

1
@mig s3aは機能する可能性があり、私の経験では機能しているように見えますが、AWSでは技術的にサポートされていません。ですので、自己責任でご利用いただきたいと思います。
jarmod

@jarmodここで引用した記事は機能しません。リンクを更新できますか?
クリスタング

@christang利用できなくなったため、ウェイバックマシンリンクを提供しました。
jarmod 2018年

2
基本的には、AWSのサポートは、S3をお勧めします。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 であるため、パーティション分割が壊れています。コアファイルシステムの操作とデータの生成に問題がなくても、S3aをHadoop 2.6の分析作業に使用することはできません。Hadoop 2.7はそれを修正します。

2018-01-10アップデート Hadoop 3.0はs3:とs3nの実装を削減しました:s3aがすべてです。現在は前任者よりも大幅に優れており、Amazonの実装と同等以上のパフォーマンスを発揮します。Amazonの「s3:」は、EMRによって引き続き提供されています。EMRは、クローズドソースクライアントです。詳細については、EMRドキュメントを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.