S-JIS[2011-09-24/2013-10-05] 変更履歴

Hadoop CDH3

CDH3(Cloudera's Distribution including Apache Hadoop v3)のインストールについて。


CDHの概要

CDH(Cloudera's Distribution including Apache Hadoop)は、Hadoopのディストリビューション。[2011-09-25]
HadoopとCDHの関係は、例えばLinuxとRedHatの関係と同じ。
つまり元のApache Hadoopをカスタマイズし(パッチを当て)て配布している。

CDHの中にはHadoop関連プロダクト(HivePigHBaseSqoop等)も含まれ、それらは個別にインストールする。
したがって本来は「CDHをインストールする」と言うのは正しくなくて、「CDH版のHadoopをインストールする」「CDH版のHiveをインストールする」と言うのが正しい。


Windows7へのインストール

CDH3のアーカイブをダウンロードしてくれば、普通のHadoopのWindowsへのインストールと同様にインストールできる。[2011-11-16]

  1. CDH3のアーカイブをダウンロードする。
  2. CDH3のアーカイブを展開する。
    Cygwinで以下のコマンドを実行する。(拡張子はtar.gzなのでgzip圧縮されているが、最近のtarコマンドは直接解凍できる模様)
    $ cd /usr/local
    $ tar xf $(cygpath -u "C:\Users\hishidama\Downloads\hadoop-0.20.2-cdh3u2.tar.gz")
  3. JDK1.6へのシンボリックリンクを作っておく。
    $ ln -s "/cygdrive/c/Program Files (x86)/Java/jdk1.6.0_27" /usr/local/jdk1.6
  4. Windowsの環境変数を設定する。
    HADOOP_HOME D:/cygwin/usr/local/hadoop-0.20.2-cdh3u2  
    Path ;%HADOOP_HOME%\bin 既存のPATHの設定の末尾に追加。
  5. HADOOP_HOME/bin/hadoop-config.shを修正する。(HADOOP_HOMEの設定を追加する)
    # the root of the Hadoop installation
    if [ -z "$HADOOP_HOME" ]; then
      export HADOOP_HOME=`dirname "$this"`/..
    else
      export HADOOP_HOME=$(cygpath -u "$HADOOP_HOME")
    fi
  6. HADOOP_HOME/conf/hadoop-env.shを修正する。(JAVA_HOMEの設定を追加する)
    # export JAVA_HOME=/usr/lib/j2sdk1.6-sun
    export JAVA_HOME=/usr/local/jdk1.6
  7. 試しにhadoopコマンドを実行してみる。
    $ hadoop
    $ hadoop classpath		…Windowsとしてのパスが表示されればOK
    $ hadoop version  		…CDH3のバージョンが表示されればOK

Hadoop0.20を改造してCDH3環境を作る方法


CentOSへのインストール

CentOSへは、yumコマンドを使用してインストールすることが出来る。[2011-09-25]

  1. JDK1.6をインストールしておく。
  2. yumリポジトリーにClouderaのサイトを追加する。
    どのOSの場合にどのrepoファイルをダウンロードすればよいかは、CDH Version and Packaging Informationに載っている。[2012-05-10]
    CentOS5 http://archive.cloudera.com/redhat/cdh/cloudera-cdh3.repo
    CentOS6 http://archive.cloudera.com/redhat/6/x86_64/cdh/cloudera-cdh3.repo
    # cd /etc/yum.repos.d/
    # wget http://archive.cloudera.com/redhat/cdh/cloudera-cdh3.repo
    # yum update yum
  3. Hadoop本体をダウンロード・インストールする。(これだけで、単独環境は実行可能)
    # yum install -y hadoop-0.20
    これが正常終了すると、自動的にhdfsとmapredというユーザーが作られる。
    「hadoop」というユーザーがあった場合は、hdfsというユーザー名に変更される。(パスワードやホームディレクトリーには変更なし)
  4. 一応動作確認しておく。
    $ hadoop
    $ hadoop fs -ls
    $ hadoop jar /usr/lib/hadoop/hadoop-*-examples.jar pi 4 2000	←円周率を計算するサンプル

ちなみに、「yum search hadoop」でHadoop関連アプリケーションの一覧が表示される。
「yum list installed | grep hadoop」でHadoop関連のインストール済みアプリケーション一覧が表示される。

環境変数HADOOP_HOMEを定義するときは、「/usr/lib/hadoop」を指定する。(ただし実体は/usr/lib/hadoop-0.20にある)
コンフィグファイルは「/etc/hadoop/conf」を指定する。(ただし実体は/etc/hadoop-0.20にあり、デフォルトではその下のconf.emptyを指している。別のconfへの切り替えにはalternativesコマンドを使用する)


ソースのダウンロード

CDH3のアーカイブの中のsrcディレクトリー内にCDH3のソースが入っている。[2011-11-16]

Mavenを使ってCDH3のソースをダウンロードする方法


yumコマンドを使ってソースをダウンロードすることも出来る。[2012-01-21]

# yum -y install hadoop-0.20-source

この場合、「/usr/src/hadoop-0.20」にソースがインストールされる。


CDH3のcore-site.xmlやhdfs-site.xml・mapred-site.xmlのデフォルト値は、以下のページで公開されている。[2012-03-16]


CentOS擬似分散環境の構築

CentOSにCDH3の擬似分散環境を作る方法。[2012-03-16]

以下のコマンドを実行して擬似分散環境の設定ファイルをインストールする。

# yum -y install hadoop-0.20-conf-pseudo

インストールされると、/etc/hadoop-0.20/conf.pseudoが作成される。
(また、HDFSのフォーマットも行われる)
CDHではconfの実体(confが指す場所)はalternativesによって制御されているので、以下のコマンドで確認できる。

# alternatives --display hadoop-0.20-conf
hadoop-0.20-conf - ステータスは手動です。
リンクは現在 /etc/hadoop-0.20/conf.empty を指しています。
/etc/hadoop-0.20/conf.empty - 優先項目 10
/etc/hadoop-0.20/conf.pseudo - 優先項目 30
現在の「最適」バージョンは /etc/hadoop-0.20/conf.pseudo です。

conf.emptyはスタンドアローンモード用の定義なので、擬似分散環境の定義に切り替えてやる。

# alternatives --config hadoop-0.20-conf

2 プログラムがあり 'hadoop-0.20-conf' を提供します。

選択         コマンド
-----------------------------------------------
 + 1           /etc/hadoop-0.20/conf.empty
*  2           /etc/hadoop-0.20/conf.pseudo

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2

# alternatives --display hadoop-0.20-conf
hadoop-0.20-conf - ステータスは手動です。
リンクは現在 /etc/hadoop-0.20/conf.pseudo を指しています。
/etc/hadoop-0.20/conf.empty - 優先項目 10
/etc/hadoop-0.20/conf.pseudo - 優先項目 30
現在の「最適」バージョンは /etc/hadoop-0.20/conf.pseudo です。

これで、/etc/hadoop/conf(シンボリックリンク)が/etc/hadoop-0.20/conf.pseudoを指すようになる。


hadoop-0.20-conf-pseudoをインストールすると、Hadoopを起動する為のシェルスクリプト(CDH用)も一緒にインストールされる。

つまり、以下のインストールを個別に行う必要は無い。

yum install hadoop-0.20-namenode
yum install hadoop-0.20-secondarynamenode
yum install hadoop-0.20-jobtracker
yum install hadoop-0.20-datanode
yum install hadoop-0.20-tasktracker

したがって、以下のコマンドでHadoopの各デーモンを起動できる。
(擬似分散環境なので、1つのマシン上でNameNode・JobTracker・DataNode・TaskTrackerを起動する。
 SecondaryNameNodeはHadoopを試用するだけなら有っても無くても関係ない)

# /etc/init.d/hadoop-0.20-namenode start
# /etc/init.d/hadoop-0.20-jobtracker start
# /etc/init.d/hadoop-0.20-datanode start
# /etc/init.d/hadoop-0.20-tasktracker start

※startの代わりにstopにすると、停止

各デーモンの起動で「[OK]」と出ても、設定がおかしい場合は直後に落ちている事もあるので(苦笑)、起動しているかどうかを確認する。

# /etc/init.d/hadoop-0.20-namenode status
# /etc/init.d/hadoop-0.20-jobtracker status
# /etc/init.d/hadoop-0.20-datanode status
# /etc/init.d/hadoop-0.20-tasktracker status
# jps
20849 Jps
20564 DataNode
20701 TaskTracker
20380 NameNode
20491 JobTracker

また、OSの起動時に各デーモンが自動的に起動するよう設定される。

# chkconfig --list | grep hadoop
hadoop-0.20-datanode    0:off   1:off   2:off   3:on    4:off   5:on    6:off
hadoop-0.20-jobtracker  0:off   1:off   2:off   3:on    4:off   5:on    6:off
hadoop-0.20-namenode    0:off   1:off   2:off   3:on    4:off   5:on    6:off
hadoop-0.20-secondarynamenode   0:off   1:off   2:off   3:on    4:off   5:on   6:off
hadoop-0.20-tasktracker 0:off   1:off   2:off   3:on    4:off   5:on    6:off

(数字はrunレベルで、3はGUIありでOSを起動する場合、5がGUI無しで起動する場合の設定らしい)
(onだとOSの起動時にそのデーモンが起動される)

OSの起動時にデーモンを起動しないようにするには、設定をoffにしてやればいい。

# chkconfig hadoop-0.20-namenode off
# chkconfig hadoop-0.20-secondarynamenode off
# chkconfig hadoop-0.20-jobtracker off
# chkconfig hadoop-0.20-datanode off
# chkconfig hadoop-0.20-tasktracker off

# chkconfig --list | grep hadoop
hadoop-0.20-datanode    0:off   1:off   2:off   3:off   4:off   5:off   6:off
hadoop-0.20-jobtracker  0:off   1:off   2:off   3:off   4:off   5:off   6:off
hadoop-0.20-namenode    0:off   1:off   2:off   3:off   4:off   5:off   6:off
hadoop-0.20-secondarynamenode   0:off   1:off   2:off   3:off   4:off   5:off  6:off
hadoop-0.20-tasktracker 0:off   1:off   2:off   3:off   4:off   5:off   6:off

CentOSへの特定バージョンのインストール

上記の方法(デフォルト)では、CDHの最新版がインストールされることになる。[2012-03-31]
また、CentOS(yum)の自動アップデートでCDHが最新版に更新されることになる。

特定のバージョンをインストールしたい(それ以上アップデートもしたくない)場合は、repoファイル内にバージョンを指定する。

/etc/yum.repos.d/cloudera-cdh3.repo:

mirrorlist=http://archive.cloudera.com/redhat/cdh/3/mirrors
					↓
mirrorlist=http://archive.cloudera.com/redhat/cdh/3u2/mirrors

後は普通にyum installを行うだけ!

参考: 杵渕さんのWEB+DB Press vol.67 補足 (追記)


旧版へのダウングレード

一旦最新版でインストールした後に古いバージョンにしたい場合、cloudera-cdh3.repoを書き換えてから再インストールする。[2012-03-31]

ただし、再インストールコマンド「yum reinstall」を実行してもエラーになってしまう。

# vi /etc/yum.repos.d/cloudera-cdh3.repo	←中を3u1に書き換え
# yum reinstall hadoop-0.20
〜
================================================================================
 Package          Arch        Version                  Repository          Size
================================================================================
Reinstalling:
 hadoop-0.20      noarch      0.20.2+923.197-1         cloudera-cdh3       30 M

Transaction Summary
================================================================================
Remove        0 Package(s)
Reinstall     1 Package(s)
Downgrade     0 Package(s)

Total download size: 30 M
Is this ok [y/N]: y
Downloading Packages:
http://archive.cloudera.com/redhat/cdh/3u1/RPMS/noarch/hadoop-0.20-0.20.2%2B923.197-1.noarch.rpm: [Errno 14] HTTP Error 404: Not Found
Trying other mirror.


Error Downloading Packages:
  hadoop-0.20-0.20.2+923.197-1.noarch: failure: RPMS/noarch/hadoop-0.20-0.20.2+923.197-1.noarch.rpm from cloudera-cdh3: [Errno 256] No more mirrors to try.

“インストール対象バージョンが「0.20.2+923.197-1」だが、「hadoop-0.20-0.20.2%2B923.197-1.noarch.rpm」(%2Bは「+」のこと)が見つからない”というエラーらしい。
そもそも0.20.2+923.197-1は3u3のバージョンなので、3u1のディレクトリー内に無いのは当然ですな^^;

バージョン情報に関してはyumのキャッシュに残っているらしく、キャッシュをクリアしてやる必要がある。

# yum clean metadata

# yum reinstall hadoop-0.20
〜
Installed package hadoop-0.20-0.20.2+923.197-1.noarch not available.

どうもreinstallでは出来ないようだ(苦笑)


素直に削除してインストールし直すと出来る。

# vi /etc/yum.repos.d/cloudera-cdh3.repo	←中のバージョンを書き換え
# yum clean metadata
# yum remove hadoop-0.20
# yum install -y hadoop-0.20

特定バージョンへのアップグレード

逆に、新しいバージョンへの切り替えは特に問題なく出来る。[2012-03-31]

# vi /etc/yum.repos.d/cloudera-cdh3.repo	←中を3u1から3u2に書き換え
# yum upgrade hadoop-0.20

Hadoop目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま