Amazon EC2上のHadoopでMeCabを使えるようにしてみた…い
最近すっかり"Webサービスを作ってみた"系の記事ばっかりでしたが、今回は久々にEC2上でのHadoopのお話。
以前の記事でEC2上でHadoopを動かした時は、MeCabがデフォルトで入っていなかったので、事前に自宅サーバ上で分かち書きしたデータを使っていました。
ただ、日本語処理するならMeCabはほぼ必須だろうし、せっかくならMeCabが使える状態でMapReduceしたいのが人情ってもんです。
という訳で、EC2上のHadoopを使って、MeCabを利用した日本語文章の単語カウントMapReduceに挑戦してみました。
基本的な方向性としては以下の通りです。
で、実際にやってみた訳なんですが、結論から言うとうまくいきませんでした…。
AMIを保存して、そのAMIが使われるようにするところまではできたんですが、そのインスタンスにログインできない状態になってしまって、実際にMeCabを利用したMapReduceを動かすところまでできていません。
という事で途中までではありますが、やってみた手順を書き残しておきたいと思います。
以下、"[local]$"がローカルのサーバ上、"[ec2]$"がEC2上でのプロンプトを表す事とします。
EC2上でHadoopを起動してログインする
まずはEC2上にインスタンスを1つ起動させてログインします。
[local]$ hadoop-ec2 launch-master hadoop-test 1 [local]$ scp -i stellaqua.id *.pem root@ec2-XXX-XXX-XXX-XXX.compute-1.amazonaws.com:/mnt [local]$ hadoop-ec2 login hadoop-test
タイムゾーンを変更する
今回(というか毎度)参考にさせて頂いているid:rx7さんの記事によると、タイムゾーンの設定をしておいた方がよいとの事なので、ついでにここでタイムゾーンの変更をしておきます。
[ec2]$ cp /usr/share/zoneinfo/Japan /etc/localtime cp: `/etc/localtime' を上書きしてもよろしいですか(yes/no)? y
MeCabをインストールする
続いて本命のMeCabをインストールします。
[ec2]$ yum -y update [ec2]$ yum -y install mecab mecab-devel mecab-ipadic [ec2]$ echo 'こんにちは' | mecab こんにちは 感動詞,*,*,*,*,*,こんにちは,コンニチハ,コンニチワ EOS
ちゃんとMeCabが使えるようになりましたね!
EC2はroot権限が与えられるので、yumで必要なものをガシガシ入れてしまうとよいですね。
AMIを作成してS3にアップロードする
AMI作成の手順については、毎度お世話になっているid:rx7さんの記事を参考にさせて頂きました。
→Amazon EC2/S3を使ってみた - 3.EC2起動後〜AMI作成 - 元RX-7乗りの適当な日々
[ec2]$ cd /mnt/ [ec2]$ ec2-bundle-vol -d /mnt --privatekey pk-XXXX.pem --cert cert-XXXX.pem --user XXXX-XXXX-XXXX -p hadoop-0.17.0-i386 -r i386 [ec2]$ ec2-upload-bundle --bucket stellaqua/ec2_images/hadoop_mecab --manifest hadoop-0.17.0-i386.manifest.xml --access-key XXXX --secret-key XXXX [ec2]$ exit [local]$ hadoop-ec2 terminate-cluster hadoop-test [local]$ ec2-register stellaqua/ec2_images/hadoop_mecab/hadoop-0.17.0-i386.manifest.xml IMAGE ami-XXXX [local]$ vi hadoop-ec2-env.sh →"S3_BUCKET=hadoop-ec2-images"となっているところを、上記で指定したバケットに変える
ポイントは、manifestファイルをHadoopのバージョンとアーキテクチャの名前を付けて保存する事と、設定ファイルでAMIを保存したバケットを設定しておく事ですね。
これで、hadoop-ec2コマンドでHadoopを起動する時に、登録したAMIが使われるようになるはずです。
早速、クラスタを起動してログインしてみます。
[local]$ hadoop-ec2 launch-cluster hadoop-test 1 [local]$ hadoop-ec2 login hadoop-test
これでログインできるはずなんですが、なぜかログインしに行ったままウンともスンとも言わない状態になってしまいます。
"Permission denied"とも言われないし、netstatで見るとESTABLISHEDにはなっているので、接続自体はできているとは思うのですが…。その後も色々試してはみたんですが、現時点でお手上げ状態になっています…。
また折を見て試してみて、うまくいったら記事にしようかなと思います。