web-dev-qa-db-ja.com

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

https://wiki.Apache.org/hadoop/AmazonS ​​と次の単語の存在を認識しています。

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")

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

97
Hello lad

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

S3とs3n/s3aの違いは、s3はAmazon S3上のブロックベースのオーバーレイですが、s3n/s3aはオブジェクトベースではないことです。

S3nとs3aの違いは、s3nは最大5GBのオブジェクトをサポートし、s3aは最大5TBのオブジェクトをサポートし、パフォーマンスが高いことです(両方ともマルチパートアップロードを使用しているため)。 s3aはs3nの後継です。

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

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

107
jarmod

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 Update実際、listFiles()呼び出しで返されるブロックサイズは0であるため、Hadoop 2.6のS3aでパーティションが壊れています:_のようなものSpark&pigは、作業を1つのタスク/バイトに分割します。コアファイルシステムの操作とデータ生成が満足できる場合でも、S3aをHadoop 2.6の分析作業に使用することはできません。 Hadoop 2.7はそれを修正します。

2018-01-10 UpdateHadoop 3.0は、s3:およびs3nの実装を削減しました:s3aがすべてです。これは、以前のバージョンよりも大幅に改善され、Amazonの実装と同等以上のパフォーマンスを発揮します。 Amazonの「s3:」は、クローズドソースクライアントであるEMRによって引き続き提供されています。詳細については、 EMR docs を参照してください。

41
Steve Loughran