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
  • Node-3

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

独自クラスタ用の設定ファイルを準備する。*3

$ 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-input/input-file
##
hoge hoge fuga fuga hoge

$ 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


Cloudera | The enterprise data cloud company
Apache Hadoop

*1:Javaドキュメントをインストールしない場合は不要

*2:lsb-releaseパッケージが必要

*3:Cloudera Distribution for Hadoopは設定ファイルを"alternatives"で管理している