Hadoopの初期設定方法
Google App Engine の BigTable を深く知ろうと、Google が公開している論文を読み始めたら、Google File System や MapReduce にも興味が広がり、気がついたら Hadoop をいじり倒したくなっていました。
今回は、Hadoop をひとまず動かしてみるところまでやってみます。
※ちなみに、Hadoop 自体の説明については、こちらをご覧下さい。
◆前提条件
1.最初の目標
(1)Windows 上で、standalone モードで Hadoop を動作させる。
(2)Hadoop のバージョンは、0.20.2 とする。
『Hadoop : The Definitive Guide』(2nd)で扱われているのは 0.20 系なので、現時点で最新の stable 版の 0.20.2 を使用することにしました。
- 作者: Tom White,Doug Cutting
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2010/10/14
- メディア: ペーパーバック
- 購入: 2人 クリック: 149回
- この商品を含むブログ (14件) を見る
3.環境一覧
今回の設定は、以下の環境で実施しました。
名前 | version |
---|---|
Hadoop | 0.20.2 |
Windows | Windows XP Home Edition Version 2002 Service Pack 3 |
JDK | 1.6.0_10 |
◆Hadoopの設定手順
(1)http://hadoop.apache.org/ へアクセスします。
(2)"Hadoop Common" のリンクを選択します。
(3)"Download" のリンクを選択します。
(4)"Download a release now!" のリンクを選択します。
(5)適当なミラーサイトを選択します。
(6)hadoop-0.20.2/hadoop-0.20.2.tar.gz を選択し、ダウンロードします。
(7)hadoop-0.20.2.tar.gz を、適当なディレクトリに解凍します。
以下、Hadoop のインストールディレクトリを、"$HADOOP_INSTALL" と表記します。
◆動作確認
公式サイトのクイックスタートに従い、設定した Hadoop を起動してみます。
(1)cygwin を起動します。
(2)$HADOOP_INSTALL へ移動します。
(3)$HADOOP_INSTALL/input ディレクトリを作成します。
【コマンド】 mkdir input
(4)$HADOOP_INSTALL/conf にある xml ファイルを、$HADOOP_INSTALL/input へコピーします。
【コマンド】 cp conf/*.xml input
(5)$HADOOP_INSTALL/bin/hadoop コマンドを使い、Hadoop のサンプルを実行してみます。
【コマンド】 bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'dfs[a-z.]+'
(6)以下のようなログが出力されれば、動作確認成功です。
11/05/03 22:47:39 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId= 11/05/03 22:47:40 INFO mapred.FileInputFormat: Total input paths to process : 5 11/05/03 22:47:40 INFO mapred.JobClient: Running job: job_local_0001 11/05/03 22:47:40 INFO mapred.FileInputFormat: Total input paths to process : 5 11/05/03 22:47:40 INFO mapred.MapTask: numReduceTasks: 1 11/05/03 22:47:40 INFO mapred.MapTask: io.sort.mb = 100 11/05/03 22:47:40 INFO mapred.MapTask: data buffer = 79691776/99614720 11/05/03 22:47:40 INFO mapred.MapTask: record buffer = 262144/327680 11/05/03 22:47:41 INFO mapred.MapTask: Starting flush of map output 11/05/03 22:47:41 INFO mapred.JobClient: map 0% reduce 0% 11/05/03 22:47:42 INFO mapred.TaskRunner: Task:attempt_local_0001_m_000000_0 isdone. And is in the process of commiting 11/05/03 22:47:42 INFO mapred.LocalJobRunner: file:/d:/hadoop-0.20.2/input/capacity-scheduler.xml:0+3936 11/05/03 22:47:42 INFO mapred.TaskRunner: Task 'attempt_local_0001_m_000000_0' done. 11/05/03 22:47:42 INFO mapred.MapTask: numReduceTasks: 1 11/05/03 22:47:42 INFO mapred.MapTask: io.sort.mb = 100 11/05/03 22:47:42 INFO mapred.MapTask: data buffer = 79691776/99614720 11/05/03 22:47:42 INFO mapred.MapTask: record buffer = 262144/327680 11/05/03 22:47:42 INFO mapred.MapTask: Starting flush of map output 11/05/03 22:47:42 INFO mapred.TaskRunner: Task:attempt_local_0001_m_000001_0 isdone. And is in the process of commiting 11/05/03 22:47:42 INFO mapred.LocalJobRunner: file:/d:/hadoop-0.20.2/input/core-site.xml:0+178 11/05/03 22:47:42 INFO mapred.TaskRunner: Task 'attempt_local_0001_m_000001_0' done. 11/05/03 22:47:42 INFO mapred.MapTask: numReduceTasks: 1 11/05/03 22:47:42 INFO mapred.MapTask: io.sort.mb = 100 11/05/03 22:47:42 INFO mapred.MapTask: data buffer = 79691776/99614720 11/05/03 22:47:42 INFO mapred.MapTask: record buffer = 262144/327680 11/05/03 22:47:42 INFO mapred.MapTask: Starting flush of map output 11/05/03 22:47:42 INFO mapred.MapTask: Finished spill 0 11/05/03 22:47:42 INFO mapred.TaskRunner: Task:attempt_local_0001_m_000002_0 isdone. And is in the process of commiting 11/05/03 22:47:42 INFO mapred.LocalJobRunner: file:/d:/hadoop-0.20.2/input/hadoop-policy.xml:0+4190 11/05/03 22:47:42 INFO mapred.TaskRunner: Task 'attempt_local_0001_m_000002_0' done. 11/05/03 22:47:42 INFO mapred.MapTask: numReduceTasks: 1 11/05/03 22:47:42 INFO mapred.MapTask: io.sort.mb = 100 11/05/03 22:47:42 INFO mapred.MapTask: data buffer = 79691776/99614720 11/05/03 22:47:42 INFO mapred.MapTask: record buffer = 262144/327680 11/05/03 22:47:42 INFO mapred.MapTask: Starting flush of map output 11/05/03 22:47:42 INFO mapred.TaskRunner: Task:attempt_local_0001_m_000003_0 isdone. And is in the process of commiting 11/05/03 22:47:42 INFO mapred.LocalJobRunner: file:/d:/hadoop-0.20.2/input/hdfs-site.xml:0+178 11/05/03 22:47:42 INFO mapred.TaskRunner: Task 'attempt_local_0001_m_000003_0' done. 11/05/03 22:47:42 INFO mapred.MapTask: numReduceTasks: 1 11/05/03 22:47:42 INFO mapred.MapTask: io.sort.mb = 100 11/05/03 22:47:42 INFO mapred.JobClient: map 100% reduce 0% 11/05/03 22:47:42 INFO mapred.MapTask: data buffer = 79691776/99614720 11/05/03 22:47:42 INFO mapred.MapTask: record buffer = 262144/327680 11/05/03 22:47:42 INFO mapred.MapTask: Starting flush of map output 11/05/03 22:47:42 INFO mapred.TaskRunner: Task:attempt_local_0001_m_000004_0 isdone. And is in the process of commiting 11/05/03 22:47:42 INFO mapred.LocalJobRunner: file:/d:/hadoop-0.20.2/input/mapred-site.xml:0+178 11/05/03 22:47:42 INFO mapred.TaskRunner: Task 'attempt_local_0001_m_000004_0' done. 11/05/03 22:47:42 INFO mapred.LocalJobRunner: 11/05/03 22:47:42 INFO mapred.Merger: Merging 5 sorted segments 11/05/03 22:47:42 INFO mapred.Merger: Down to the last merge-pass, with 1 segments left of total size: 21 bytes 11/05/03 22:47:42 INFO mapred.LocalJobRunner: 11/05/03 22:47:43 INFO mapred.TaskRunner: Task:attempt_local_0001_r_000000_0 isdone. And is in the process of commiting 11/05/03 22:47:43 INFO mapred.LocalJobRunner: 11/05/03 22:47:43 INFO mapred.TaskRunner: Task attempt_local_0001_r_000000_0 isallowed to commit now 11/05/03 22:47:43 INFO mapred.FileOutputCommitter: Saved output of task 'attempt_local_0001_r_000000_0' to file:/d:/hadoop-0.20.2/grep-temp-870476696 11/05/03 22:47:43 INFO mapred.LocalJobRunner: reduce > reduce 11/05/03 22:47:43 INFO mapred.TaskRunner: Task 'attempt_local_0001_r_000000_0' done. 11/05/03 22:47:43 INFO mapred.JobClient: map 100% reduce 100% 11/05/03 22:47:43 INFO mapred.JobClient: Job complete: job_local_0001 11/05/03 22:47:43 INFO mapred.JobClient: Counters: 13 11/05/03 22:47:43 INFO mapred.JobClient: FileSystemCounters 11/05/03 22:47:43 INFO mapred.JobClient: FILE_BYTES_READ=978421 11/05/03 22:47:43 INFO mapred.JobClient: FILE_BYTES_WRITTEN=1031389 11/05/03 22:47:43 INFO mapred.JobClient: Map-Reduce Framework 11/05/03 22:47:43 INFO mapred.JobClient: Reduce input groups=1 11/05/03 22:47:43 INFO mapred.JobClient: Combine output records=1 11/05/03 22:47:43 INFO mapred.JobClient: Map input records=219 11/05/03 22:47:43 INFO mapred.JobClient: Reduce shuffle bytes=0 11/05/03 22:47:43 INFO mapred.JobClient: Reduce output records=1 11/05/03 22:47:43 INFO mapred.JobClient: Spilled Records=2 11/05/03 22:47:43 INFO mapred.JobClient: Map output bytes=17 11/05/03 22:47:43 INFO mapred.JobClient: Map input bytes=8660 11/05/03 22:47:43 INFO mapred.JobClient: Combine input records=1 11/05/03 22:47:43 INFO mapred.JobClient: Map output records=1 11/05/03 22:47:43 INFO mapred.JobClient: Reduce input records=1 11/05/03 22:47:43 INFO jvm.JvmMetrics: Cannot initialize JVM Metrics with processName=JobTracker, sessionId= - already initialized 11/05/03 22:47:43 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same. 11/05/03 22:47:44 INFO mapred.FileInputFormat: Total input paths to process : 1 11/05/03 22:47:44 INFO mapred.JobClient: Running job: job_local_0002 11/05/03 22:47:44 INFO mapred.FileInputFormat: Total input paths to process : 1 11/05/03 22:47:44 INFO mapred.MapTask: numReduceTasks: 1 11/05/03 22:47:44 INFO mapred.MapTask: io.sort.mb = 100 11/05/03 22:47:44 INFO mapred.MapTask: data buffer = 79691776/99614720 11/05/03 22:47:44 INFO mapred.MapTask: record buffer = 262144/327680 11/05/03 22:47:44 INFO mapred.MapTask: Starting flush of map output 11/05/03 22:47:44 INFO mapred.MapTask: Finished spill 0 11/05/03 22:47:44 INFO mapred.TaskRunner: Task:attempt_local_0002_m_000000_0 isdone. And is in the process of commiting 11/05/03 22:47:44 INFO mapred.LocalJobRunner: file:/d:/hadoop-0.20.2/grep-temp-870476696/part-00000:0+111 11/05/03 22:47:44 INFO mapred.TaskRunner: Task 'attempt_local_0002_m_000000_0' done. 11/05/03 22:47:44 INFO mapred.LocalJobRunner: 11/05/03 22:47:44 INFO mapred.Merger: Merging 1 sorted segments 11/05/03 22:47:44 INFO mapred.Merger: Down to the last merge-pass, with 1 segments left of total size: 21 bytes 11/05/03 22:47:44 INFO mapred.LocalJobRunner: 11/05/03 22:47:44 INFO mapred.TaskRunner: Task:attempt_local_0002_r_000000_0 isdone. And is in the process of commiting 11/05/03 22:47:44 INFO mapred.LocalJobRunner: 11/05/03 22:47:44 INFO mapred.TaskRunner: Task attempt_local_0002_r_000000_0 isallowed to commit now 11/05/03 22:47:44 INFO mapred.FileOutputCommitter: Saved output of task 'attempt_local_0002_r_000000_0' to file:/d:/hadoop-0.20.2/output 11/05/03 22:47:44 INFO mapred.LocalJobRunner: reduce > reduce 11/05/03 22:47:44 INFO mapred.TaskRunner: Task 'attempt_local_0002_r_000000_0' done. 11/05/03 22:47:45 INFO mapred.JobClient: map 100% reduce 100% 11/05/03 22:47:45 INFO mapred.JobClient: Job complete: job_local_0002 11/05/03 22:47:45 INFO mapred.JobClient: Counters: 13 11/05/03 22:47:45 INFO mapred.JobClient: FileSystemCounters 11/05/03 22:47:45 INFO mapred.JobClient: FILE_BYTES_READ=640893 11/05/03 22:47:45 INFO mapred.JobClient: FILE_BYTES_WRITTEN=684769 11/05/03 22:47:45 INFO mapred.JobClient: Map-Reduce Framework 11/05/03 22:47:45 INFO mapred.JobClient: Reduce input groups=1 11/05/03 22:47:45 INFO mapred.JobClient: Combine output records=0 11/05/03 22:47:45 INFO mapred.JobClient: Map input records=1 11/05/03 22:47:45 INFO mapred.JobClient: Reduce shuffle bytes=0 11/05/03 22:47:45 INFO mapred.JobClient: Reduce output records=1 11/05/03 22:47:45 INFO mapred.JobClient: Spilled Records=2 11/05/03 22:47:45 INFO mapred.JobClient: Map output bytes=17 11/05/03 22:47:45 INFO mapred.JobClient: Map input bytes=25 11/05/03 22:47:45 INFO mapred.JobClient: Combine input records=0 11/05/03 22:47:45 INFO mapred.JobClient: Map output records=1 11/05/03 22:47:45 INFO mapred.JobClient: Reduce input records=1
◆残タスク
以上を見れば、まだ「Hadoop を動かせるようになったっぽい」というだけで、ちっともこなれていませんね。
なのでこの後は、次のようなことに1つずつトライしていこうと思います。
(1)独自の MapReduce のプログラムを構築・実行する。
(2)独自の Hadoop アプリケーションを実行する。
(3)最新バージョンの 0.21.0 を飼いならすこと。
◆参考資料
(1)Hadoop 0.20.2 の Quick Start
http://hadoop.apache.org/common/docs/r0.20.2/quickstart.html
(2)BigTable(Google の論文)
http://labs.google.com/papers/bigtable.html
(3)Google File System(Google の論文)
http://labs.google.com/papers/gfs.html