EMR利用時のURI Prefix "s3:// " と "s3n://" の違い
EMRからS3へアクセスする時に、次の2種類のURI記述方法があります。
- s3://hogehoge...
- s3n://hogehoge...
ふとどうやって使い分けするんだっけ?と思ったので調べてみました(どこかで、s3n://が今後推奨されるという表記を見た気がしたのですが、次の情報を読むと違うようです)。荒っぽい翻訳ですが、何かの参考になれば幸い。
公開時の情報がOSS版にだけ特化した情報となっており、EMR上の実装が考慮されていなかった為、ポストを修正しました。もし参考にしていただいた方がいましたら、不完全な情報申し訳ありませんでした。。。(2013/09/06)
EMRの場合
Note Amazon EMR上で動作するHadoopの設定は、Apache Hadoopプロジェクトが提供する デフォルト設定とは異なります。 Amazon EMRでは、s3n:// と s3:// の両方が、Amazon S3 ネイティブ・ファイルシステムにマップされます。 Apache Hadoopプロジェクトが提供するデフォルト設定中の s3:// は、Amazon S3 ブロック・ファイルシステムにマップされています。
とあり、Prefixはどちらを使っても、S3ネイティブとなるとのこと。
ちなみに推奨されないが s3bfs:// と指定することで、レガシーのブロック・ファイルシステムが使えて、 hdfs:// or no prefix で、
参考
こちらの情報をみて、自分の間違いに気づきました。ありがとうございます!「Apache Hadoop との差異」の箇所がとても参考になります。
- Ayutaya.com Amazon Elastic MapReduce のセットアップ
OSS版の場合
Hadoopは、2種類のファイルシステムをS3向けに提供 - S3 ネイティブ ファイルシステム (URI scheme: s3n) これは、S3上のレギュラーファイルを読み書きするファイルシステム。このファイルシステムの有利な点は、 S3上の他のツールで記述されたファイルにアクセスが出来ます。逆に言えば、他のツールは、 Hadoopを使って書かれたファイルにアクセスできます。 不利な点は、S3による5GBのファイルサイズの限界があることです。 この理由の為、HDFSの置き換えとしては適切ではありません。 - S3 ブロック ファイルシステム (URI scheme: s3) S3によるブロック ベースのファイルシステム。ファイルはブロックとして保存され、 HDFSにあるのと同じようになります。・一部訳なし・。このファイルシステムは、対象バケットを このファイルシステムとしてのみ使う事を必要とします - 既存のファイルを含むバケットを使ったり、 他のファイルを対象バケットに書き込むことは出来ません。 このファイルシステムに保存されるファイルは5GB以上が可能ですが、他のS3ツールとは相互利用が出来ません。
- stackoverflow Difference between Amazon S3 and S3n in Hadoop
S3n:// の意味は 「レギュラーファイル(外の世界から読み込みができる)」 。 S3:// は、AWSストレージクラスター上のS3にマップされた、HDFSファイルシステムを参照できる。 なので、通常ファイルを使うときには 「s3n」 を使う事になる。
結論
ということで、 s3:// と明示されてない時は、自分の使い方であれば s3n:// と記述すればいいと腑に落ちました。 EMR上では、どちらを使っても同じということでした。OSS側の記述だけじゃなく、サービス提供者(今回だとAmazon)のドキュメントを、ちゃんと探して読まないとですね。