2015-10-26 80 views
46

私はhttps://wiki.apache.org/hadoop/AmazonS3の存在と、次の単語を知ってる:技術的にs3n、s3aとs3の違いは何ですか?

S3ネイティブファイルシステム(URIスキーム:S3N)S3上の通常のファイルを読み書きするためのネイティブファイルシステム。このファイルシステムの利点は、他のツールで書かれたS3上のファイルにアクセスできることです。逆に、他のツールはHadoopを使って書かれたファイルにアクセスすることができます。欠点は、S3によって課されるファイルサイズの5GBの制限です。

S3A(URIスキーム:s3a)S3ネイティブの後継者であるS3a:システムは、S3と対話するためにAmazonのライブラリを使用します。これにより、S3aはより大きなファイル(5GB制限なし)、より高性能な操作などをサポートします。ファイルシステムは、S3の代替/後継であることを意図しています。ネイティブ:s3n:// URLからアクセスできるすべてのオブジェクトは、単にURLスキーマを置き換えるだけでs3aからアクセス可能でなければなりません。

S3ブロックFileSystem(URIスキーム:s3)S3を基盤とするブロックベースのファイルシステム。ファイルはHDFSにあるようにブロックとして格納されます。これにより、名前の効率的な実装が可能になります。このファイルシステムでは、ファイルシステムのバケットを専用にする必要があります。ファイルを含む既存のバケットを使用したり、同じバケットに他のファイルを書き込んではいけません。このファイルシステムによって保存されるファイルは5GBを超えることができますが、他のS3ツールとの相互運用はできません。

なぜURI上の文字の変更によってそのような違いが生じるのですか?例えば

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

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

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

答えて

45

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からthis articleを読んでください(netは:s3://とs3n://を使用するためです)。 s3a://はEMRと互換性がありませんが、EMRのコンテキストでは機能的に互換性があります)。

+0

Amazonのサポート記事はまだ最新のようですが、今は 's3a'スキームを使用してEMRジョブからS3に書き込むことができます。答えが改訂される可能性があります。 – mlg

+0

@mig s3aは機能するかもしれませんが、私の経験ではうまくいくようですが、AWSでは技術的にサポートされていません。だから、あなたは自分の責任でそれを使うと思います。 – jarmod

17

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を試してみて、歴史の多くのための

problems-があった場合S3Nに切り替える-I'd更新実際に、パーティショニングは、Hadoopの2.6でのS3aに壊れているhttp://hortonworks.com/blog/history-apache-hadoops-support-amazon-s3/

2017年3月14日listFiles()コールで返されるブロックサイズが0の場合:Spark &のようなものが1つのタスク/バイトに作業を分割します。コアファイルシステム操作&のデータ生成がうまくいても、Hadoop 2.6でS3aを解析作業に使用することはできません。 Hadoop 2.7ではそれが修正されました。

2018-01-10アップデート Hadoop 3.0では、s3:およびs3n実装が削除されました。s3aはすべて入手できます。以前のバージョンよりも大幅に改善され、Amazonの実装と同じくらい優れた性能を発揮します。 Amazonの "s3:"は依然としてクローズドソースクライアントであるEMRによって提供されています。詳細は、EMR docsを参照してください。

関連する問題