Cloudera Distribution for Hadoop (Fully Distributed)のインストール
Clouderaパッケージを使って、完全分散モードでノード3台へインストール。
基本的には、この手順でインストール可能。
構成は以下の通り。
- Node-1
- Host Name: dev01
- OS: Debian GNU/Linux 5.0.3 (Lenny/AMD64)
- Service: Name Node, Job Tracker, Secondary Name Node
- Node-2
- Host Name: dev02
- OS: Debian GNU/Linux 5.0.3 (Lenny/AMD64)
- Service: Data Node, Task Tracker
- Node-3
- Host Name: dev03
- OS: Debian GNU/Linux 5.0.3 (Lenny/AMD64)
- Service: Data Node, Task Tracker
Sun Java JDK 6 のインストール (対象ノード: Node-1, Node-2, Node-3)
ここからJava SE 6 ドキュメントをダウンロードし、/tmpに"jdk-6u12-docs.zip"というファイル名で置いておく。*1
Sun Java JDK 6 関連のパッケージをインストールする。
$ sudo aptitude install sun-java6-jdk sun-java6-bin sun-java6-plugin sun-java6-doc sun-java6-source
ライセンスの確認とか表示されるので、適当に答える。
java-gcjがインストールされている場合は、"update-alternatives"でSun Javaに設定する。
次に以下の設定を追加し、環境変数の設定を行う。
## # /etc/profile ## JAVA_HOME="/usr/lib/jvm/java-6-sun" CLASSPATH=".:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar" export JAVA_HOME CLASSPATH
$ . /etc/profile
最後にJavaのバージョンを確認する。
$ java -version java version "1.6.0_12" Java(TM) SE Runtime Environment (build 1.6.0_12-b04) Java HotSpot(TM) 64-Bit Server VM (build 11.2-b01, mixed mode)
事前設定 (対象ノード: Node-1, Node-2, Node-3)
- 各ノードで名前解決できるように、"/etc/hosts"に設定する。
## # /etc/hosts ## 192.168.1.1 dev01 192.168.1.2 dev02 192.168.1.3 dev03
- Clouderaのレポジトリを追加する。
## # /etc/apt/sources.list.d/cloudera.list ## deb http://archive.cloudera.com/debian lenny-testing contrib deb-src http://archive.cloudera.com/debian lenny-testing contrib
今回はHadoop-0.20をインストールするため、testingを使用した。
指定するディストリビューションは、"lsb_release -c"で確認できる。*2
$ lsb_release -c
Codename: lenny
GPGキーを取得し、アップデートを実施する。
$ curl -s http://archive.cloudera.com/debian/archive.key | sudo apt-key add -
$ sudo aptitude update
Hadoop(マスター)のインストールと設定 (対象ノード: Node-1)
完全分散モードで構成するが、設定ファイルを流用するため擬似分散モードのコンフィグ(hadoop-0.20-conf-pseudo)もインストールする。
$ sudo aptitude install hadoop-0.20 hadoop-0.20-conf-pseudo
$ sudo cp -r /etc/hadoop-0.20/conf.pseudo /etc/hadoop-0.20/conf.my_cluster $ sudo rm /etc/hadoop-0.20/conf.my_cluster/conf.pseudo $ sudo update-alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf /etc/hadoop-0.20/conf.my_cluster 50 $ sudo update-alternatives --display hadoop-0.20-conf hadoop-0.20-conf -状態は auto。 リンクは現在 /etc/hadoop-0.20/conf.my_cluster を指しています /etc/hadoop-0.20/conf.empty - 優先度 10 /etc/hadoop-0.20/conf.pseudo - 優先度 30 /etc/hadoop-0.20/conf.my_cluster - 優先度 50 現在の `最適' バージョンは /etc/hadoop-0.20/conf.my_cluster です。
"/etc/hadoop-0.20/conf.my_cluster"以下のファイルを設定する。
## # /etc/hadoop-0.20/conf.my_cluster/masters ## dev01
## # /etc/hadoop-0.20/conf.my_cluster/slaves ## dev02 dev03
<!-- /etc/hadoop-0.20/conf.my_cluster/core-site.xml --> <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.default.name</name> <value>hdfs://dev01:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/var/lib/hadoop-0.20/cache/${user.name}</value> </property> </configuration>
<!-- /etc/hadoop-0.20/conf.my_cluster/hdfs-site.xml --> <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> <property> <!-- specify this so that running 'hadoop namenode -format' formats the right dir --> <name>dfs.name.dir</name> <value>/var/lib/hadoop-0.20/cache/hadoop/dfs/name</value> </property> <property> <!-- specify this so that running 'hadoop namenode -format' formats the right dir --> <name>dfs.data.dir</name> <value>/var/lib/hadoop-0.20/cache/hadoop/dfs/data</value> </property> </configuration>
<!-- /etc/hadoop-0.20/conf.my_cluster/mapred-site.xml --> <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>mapred.job.tracker</name> <value>dev01:8021</value> </property> <property> <name>mapred.system.dir</name> <value>/var/local/hadoop/cache/${user.name}/mapred/system</value> </property> </configuration>
Hadoop(スレーブ)のインストールと設定 (対象ノード: Node-2, Node-3)
コンフィグはNode-1(dev01)のものを使うため、インストールしない。
$ sudo aptitude install hadoop-0.20
scpやrsyncを使って、Node-1(dev01)から"/etc/hadoop-0.20/conf.my_cluster"を同期(コピー)する。
$ sudo update-alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf /etc/hadoop-0.20/conf.my_cluster 50 $ sudo update-alternatives --display hadoop-0.20-conf hadoop-0.20-conf -状態は auto。 リンクは現在 /etc/hadoop-0.20/conf.my_cluster を指しています /etc/hadoop-0.20/conf.empty - 優先度 10 /etc/hadoop-0.20/conf.my_cluster - 優先度 50 現在の `最適' バージョンは /etc/hadoop-0.20/conf.my_cluster です。
Hadoop(マスター)の起動 (対象ノード: Node-1)
$ sudo /etc/init.d/hadoop-0.20-namenode start $ sudo /etc/init.d/hadoop-0.20-secondarynamenode start $ sudo /etc/init.d/hadoop-0.20-jobtracker start $ sudo jps 2672 Jps 1847 NameNode 2045 JobTracker 1960 SecondaryNameNode
Hadoop(スレーブ)の起動 (対象ノード: Node-2, Node-3)
$ sudo /etc/init.d/hadoop-0.20-datanode start $ sudo /etc/init.d/hadoop-0.20-tasktracker start $ sudo jps 1952 TaskTracker 3206 Jps 1846 DataNode
動作確認
サンプルプログラムのワードカウントを使用して、動作確認する。
サンプルファイルは以下の通り。
$ hadoop dfs -copyFromLocal ./hadoo-input hadoop-input $ hadoop dfs -ls Found 1 items drwxr-xr-x - %UserName% supergroup 0 2010-01-14 17:11 /user/%UserName%/hadoop-input $ hadoop dfs -ls hadoop-input Found 1 items -rw-r--r-- 2 %UserName% supergroup 26 2010-01-14 17:11 /user/%UserName%/hadoop-input/input-file $ hadoop jar /usr/lib/hadoop-0.20/hadoop-0.20.1+152-examples.jar wordcount hadoop-input hadoop-output 10/01/14 17:48:01 INFO input.FileInputFormat: Total input paths to process : 1 10/01/14 17:48:02 INFO mapred.JobClient: Running job: job_201001141743_0001 10/01/14 17:48:03 INFO mapred.JobClient: map 0% reduce 0% 10/01/14 17:48:12 INFO mapred.JobClient: map 100% reduce 0% 10/01/14 17:48:24 INFO mapred.JobClient: map 100% reduce 100% 10/01/14 17:48:26 INFO mapred.JobClient: Job complete: job_201001141743_0001 10/01/14 17:48:26 INFO mapred.JobClient: Counters: 17 10/01/14 17:48:26 INFO mapred.JobClient: Job Counters 10/01/14 17:48:26 INFO mapred.JobClient: Launched reduce tasks=1 10/01/14 17:48:26 INFO mapred.JobClient: Launched map tasks=1 10/01/14 17:48:26 INFO mapred.JobClient: Data-local map tasks=1 10/01/14 17:48:26 INFO mapred.JobClient: FileSystemCounters 10/01/14 17:48:26 INFO mapred.JobClient: FILE_BYTES_READ=28 10/01/14 17:48:26 INFO mapred.JobClient: HDFS_BYTES_READ=26 10/01/14 17:48:26 INFO mapred.JobClient: FILE_BYTES_WRITTEN=88 10/01/14 17:48:26 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=14 10/01/14 17:48:26 INFO mapred.JobClient: Map-Reduce Framework 10/01/14 17:48:26 INFO mapred.JobClient: Reduce input groups=2 10/01/14 17:48:26 INFO mapred.JobClient: Combine output records=2 10/01/14 17:48:26 INFO mapred.JobClient: Map input records=1 10/01/14 17:48:26 INFO mapred.JobClient: Reduce shuffle bytes=0 10/01/14 17:48:26 INFO mapred.JobClient: Reduce output records=2 10/01/14 17:48:26 INFO mapred.JobClient: Spilled Records=4 10/01/14 17:48:26 INFO mapred.JobClient: Map output bytes=45 10/01/14 17:48:26 INFO mapred.JobClient: Combine input records=5 10/01/14 17:48:26 INFO mapred.JobClient: Map output records=5 10/01/14 17:48:26 INFO mapred.JobClient: Reduce input records=2 $ hadoop dfs -ls Found 2 items drwxr-xr-x - %UserName% supergroup 0 2010-01-14 17:11 /user/%UserName%/hadoop-input drwxr-xr-x - %UserName% supergroup 0 2010-01-14 17:48 /user/%UserName%/hadoop-output $ hadoop dfs -ls hadoop-output Found 2 items drwxr-xr-x - %UserName% supergroup 0 2010-01-14 17:48 /user/%UserName%/hadoop-output/_logs -rw-r--r-- 2 %UserName% supergroup 14 2010-01-14 17:48 /user/%UserName%/hadoop-output/part-r-00000 $ hadoop dfs -cat hadoop-output/part-r-00000 fuga 2 hoge 3