ここ数日こればっかりに悩んでましたが、実際は超簡単。
といってもそこまで詳しくやっていないのでこれできちんと出来ているのかは…
Amazon S3をHDFSとして利用する利点は
- 実質容量無制限
- Amazon EC2/S3 間の転送料は不要
- クラスタが落ちてもデータは無事?
こんなところでしょうか。
AmazonS3 - Hadoop Wiki
実際はここに書いてあるとおりで問題ないです。
これをきちんとわかっていなかったので無駄に苦労してしまった…
今回クライアントで使用したのはHadoop 0.19.1です。
まずは、Amazon EC2上でHadoopを起動させます。
./hadoop-0.19.1/src/contrib/ec2/bin/hadoop-ec2 launch-cluster hdfs-test-cluster 1
このあたりはblogeyeの実装に学ぶ、Amazon EC2/S3でのHadoop活用術:CodeZineを参考にしてください。一度設定してしまえば簡単です。
次にマスターにログイン。
./hadoop-0.19.1/src/contrib/ec2/bin/hadoop-ec2 login hdfs-test-cluster
マスターにログインしたらちょっとAmazon S3の方を設定。
S3を利用可能にしておくことは非常に重要ですし、あとバケット(Buckets)というものを設定しておく必要があります。
このあたりはGUIツールでもCUIでもかまわないのでなれたツールで行ってください。
特別おすすめというわけではないですが今回はS3 Browserを使ってみました。
Proライセンスがあるみたいですが、無料でも機能制限も試用期間などもなく個人利用は無料で可能です。
これ以外もFirefoxの拡張機能などでAmazon S3 Firefox Organizer(S3Fox)などがあります。ここら辺は自分にあったものを。
今回はS3 Browserで。
今回は試しに「hdfs-test」という名前のバケットを作ってみましたが、これは何でもかましません。
先ほどのマスターに戻って
vi /usr/local/hadoop-0.19.0/conf/hadoop-site.xml
少し追加。
http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key
<property>
<name>fs.default.name</name>
<value>s3://hdfs-test</value>
</property><property>
<name>fs.s3.awsAccessKeyId</name>
<value>Your Access key ID</value>
</property><property>
<name>fs.s3.awsSecretAccessKey</name>
<value>Your Secret Access Key</value>
</property>
それぞれ太字の部分を利用するユーザーに合わせてください。
(このときにYour Secret Access Keyの中にある/を%2Fに置き換えないでください。)
この設定を行うことですべてのHDFS処理が Amazon S3上で行われるようになります。
例えば、
hadoop fs -mkdir /input
とすると
先ほどのhdfs-testのバケットの下にちゃんとファイルが増えています。
hadoop dfs -put sample.txt /input
sample.txtを/inputに入れてみた。
[root@domU-12-31-39-00-4D-A1 ~]# hadoop dfs -ls /input
Found 1 items
-rwxrwxrwx 1 6 1969-12-31 19:00 /input/sample.txt
S3 Browser で見てみるとちゃんとファイルが増えています。
(これをダウンロードしてもどこかに消えてしまうのですが…)
ちなみに一度ログアウトしてterminate-clusterで一度全部落として、別のセキュリティグループを立ち上げconf/hadoop-site.xmlを設定
[root@domU-12-31-39-02-66-52 ~]# hadoop dfs -ls /input
Found 1 items
-rwxrwxrwx 1 6 1969-12-31 19:00 /input/sample.txt
ね。簡単でしょ。
今の自分にはこの程度のことしか出来ませんでしたが、HadoopからAmazon S3を利用する方法がやっとわかりました:-)
これ以外にもs3://AWS_ACCESS_KEY_ID:AWS_ACCESS_KEY_SECRET@Buckets/という方法があるらしいですが、自分の環境だと/(%2F)の部分でうまく処理されずに出来ませんでした。