低スペックな頭の僕がhadoopの環境を作ってうごかしてみる
黄色い象さんでおなじみのhadoopですが正直のところあまりよくわかっていません。流石にそろそろまずいとおもうのでさっそく環境作って動かしてみます。今回は超ざっくりSingleNodeSetupのドキュメントを訳したりしながら進めます。
hadoopってなんぞ
hadoopのOverviewにはこんなこと書いています。*1
- MapReduce*2
- HDFS*3
- Hadoop Distributed File System
- 分散ストレージや分散処理によくなじむらしい
- フォールトトレラントやスケールに応じて単純に拡張できる
- Common
- File System Shell/Service Level Authorization/Native Libraries
- サブプロジェクト見ろし
相変わらず僕の訳がひどいので原文みてくだしあ><Getting Startedに従ってSingle Node Setupをやってみます。
Single Node Setupをやってみる。
ドキュメントはこちらターゲットはOracle Virtualbox上のScientificLinux6.1を利用。
サポートしてるプラットフォームと必要なソフト
Linuxだったらdevelopmentとproductionをサポートするよ。windowsはdevelopmentのみサポートするよってことらしい。今回はScientificLinuxなのでとくに問題なさそう。必要なアプリはJava1.6とsshとsshdが必須。windowsはCygwinがいるよってことらしい。今回はScientificLinuxなのでJava1.6とsshとsshdがあればおk。
インストール
ドキュメントを読むとrsyncもいるみたいなのでインストールします。
//rsyncインストール # yum install rsync
ScientificLinux6.1にはデフォルトで入っているので必要なかったようです。ついでにJava1.6をインストールしましょう。openjdkでいいよね。
//openJDKインストール # yum install java-1.6.0-openjdk
これでインストールするとランタイムしかインストールされません。開発環境をつけてインストールしたいのでjava-1.6.0-openjdk-develというパッケージを選びます。テヘペロ
//openJDKインストール # yum install java-1.6.0-openjdk-devel
hadoop本体をダウンロードします。適当なディレクトリに移動して以下のコマンドを実行。
//hadoop本体のダウンロード $ wget http://ftp.kddilabs.jp/infosystems/apache//hadoop/common/stable/hadoop-0.20.203.0rc1.tar.gz
展開したらこんな感じ
[reg@anko hadoop-0.20.203.0]$ ll 合計 6632 -rw-rw-r--. 1 reg reg 412413 5月 4 15:30 2011 CHANGES.txt -rw-rw-r--. 1 reg reg 13366 5月 4 15:30 2011 LICENSE.txt -rw-rw-r--. 1 reg reg 101 5月 4 15:30 2011 NOTICE.txt -rw-rw-r--. 1 reg reg 1366 5月 4 15:30 2011 README.txt drwxr-xr-x. 2 reg reg 4096 8月 24 16:46 2011 bin -rw-rw-r--. 1 reg reg 97666 5月 4 15:30 2011 build.xml drwxr-xr-x. 4 reg reg 4096 5月 5 00:00 2011 c++ drwxr-xr-x. 2 reg reg 4096 8月 24 16:45 2011 conf drwxr-xr-x. 14 reg reg 4096 5月 4 15:30 2011 contrib drwxr-xr-x. 7 reg reg 4096 8月 24 16:45 2011 docs -rw-rw-r--. 1 reg reg 6842 5月 4 15:30 2011 hadoop-ant-0.20.203.0.jar -rw-rw-r--. 1 reg reg 3471348 5月 5 00:00 2011 hadoop-core-0.20.203.0.jar -rw-rw-r--. 1 reg reg 142469 5月 4 15:30 2011 hadoop-examples-0.20.203.0.jar -rw-rw-r--. 1 reg reg 2285620 5月 5 00:00 2011 hadoop-test-0.20.203.0.jar -rw-rw-r--. 1 reg reg 284888 5月 4 15:30 2011 hadoop-tools-0.20.203.0.jar drwxr-xr-x. 2 reg reg 4096 8月 24 16:45 2011 ivy -rw-rw-r--. 1 reg reg 9731 5月 4 15:30 2011 ivy.xml drwxr-xr-x. 5 reg reg 4096 8月 24 16:45 2011 lib drwxr-xr-x. 2 reg reg 4096 8月 24 16:45 2011 librecordio drwxr-xr-x. 15 reg reg 4096 8月 24 16:46 2011 src drwxr-xr-x. 9 reg reg 4096 5月 4 15:30 2011 webapps
Standalone Operationをうごかす
ドキュメント通りに動かします。展開したディレクトリに移動して以下のコマンドを実行
//inputディレクトリを作成する $ mkdir input //confの下のxmlをコピー $ cp conf/*.xml input //hadoopのgrepを実行 $ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
はい。ここでエラーがでました。
[reg@anko hadoop-0.20.203.0]$ bin/hadoop jar hadoop-examples-0.20.203.0.jar grep input output 'dfs[a-z.]+' Error: JAVA_HOME is not set
おとなしくJAVA_HOMEを設定します。
//JAVA_HOMEの設定 $ export JAVA_HOME=/usr
これが終わった後に再度実行。
$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
ログが流れ終わったら終了なので結果を確認します。
$ cat output/*
こんな結果が返ってきました。
[reg@anko hadoop-0.20.203.0]$ cat output/* 1 dfsadmin
この文字列がヒットしてるみたい
[reg@anko input]$ grep -P dfs[a-z.]+ *.xml hadoop-policy.xml: dfsadmin and mradmin commands to refresh the security policy in-effect.
Pseudo-Distributed Operationを動かす
疑似分散環境モードってことらしい。ドキュメントに従って設定ファイルを変更する。ドキュメント通りにやればおk。ssh周りの設定も一度sshでローカルホストにログインしておけばいい。まずはHDFSを初期化。hadoopを展開したディレクトリに移動してコマンド実行。
//HDFS初期化 $ bin/hadoop namenode -format
その次にhadoopデーモンを起動
//hadoopデーモン起動! $ bin/start-all.sh
こんな感じで起動する。
[reg@anko hadoop-0.20.203.0]$ bin/start-all.sh namenode running as process 6092. Stop it first. reg@localhost's password: localhost: starting datanode, logging to /home/reg/hadoop-0.20.203.0/bin/../logs/hadoop-reg-datanode-anko.localdomain.out reg@localhost's password: localhost: starting secondarynamenode, logging to /home/reg/hadoop-0.20.203.0/bin/../logs/hadoop-reg-secondarynamenode-anko.localdomain.out jobtracker running as process 6297. Stop it first. reg@localhost's password: localhost: starting tasktracker, logging to /home/reg/hadoop-0.20.203.0/bin/../logs/hadoop-reg-tasktracker-anko.localdomain.out
namenode running as process 6092. Stop it first.ってのは失敗してた時のプロセスがのこってたから。
http://サーバー:50070/にブラウザでつないでNameNodeの状態が表示されることを確認して、http://サーバー:50030/につないでJobTrackerの画面が表示されることを確認できればおk。さっき作ったinputとoutputのディレクトリを空にしてコマンドを順に実行
//HDFSにインプットファイルをコピー $ bin/hadoop fs -put conf input //実行だじぇ! $ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' //outputファイルをコピー $ bin/hadoop fs -get output output $ cat output/* //デーモン停止 $ bin/stop-all.sh
結果はこんな感じ
[reg@anko hadoop-0.20.203.0]$ cat output/* cat: output/_logs: ディレクトリです 1 dfs.replication 1 dfs.server.namenode. 1 dfsadmin