Hadoop

Hadoop/VMware

Hadoopの環境をVMwareイメージ(OS:CentOS5.5-x86_64)上に作成しSourcefoge.jpにイメージを公開しています。その作成手順について記載しています。VMware Player3.1.4 build-385536で作成しています。VMwareイメージのバージョンとしてはWorkstation6.5-7.xです。イメージを動作させるために対応したバージョンのVMwarePlayerなどのソフトウェアが必要です。VMware Playerはこちらからダウンロードすることができます。イメージが圧縮ファイルを解凍すると約3.1GBの容量になります。

VMware playerの詳細についてはVMware Player に関する FAQをご覧ください。

Note
本手順ではHadoopテスト環境を構築しHDFS、MapReduceのローカルモード、擬似分散モードでの動作確認をする事を主な目的としています。セキュリティ設定への考慮など不足している箇所がありますのでご了承ください。

Hadoop について

Hadoopは大規模分散システムのOpen Source Projectの1つです。主な特徴はHDFS、MapReduceがあります。HDFSはブロックサイズがデフォルトで64MBと非常に大きく(ex3のデフォルトブロックサイズは4096バイト)、テラバイトからペタバイトのデータサイズを扱う分散ファイルシステムです。MapReduceは並列分散処理のためのフレームワークです。HDFS、MapReduceにはMasterサーバとSlaveサーバが存在しそれぞれにノードがあります。またHDFSではデータをメタデータで管理し実データの複製管理などを行っています。MapReduceではjobの並列分散管理などを行っています。

またMapReduceはMap処理、Shuffle&Sort処理、Reduce処理に分けることができます。それぞれの処理の大まかな役割は以下のとおりです順に入力処理、中間処理、出力処理です。
ただし大量の小さいファイルの書き込みやファイルの更新には向いていません。この点についてはHBase(Hadoopの関連プロジェクト)や従来のRDBMSと組み合わせることで補うことも可能です。詳細についてはhadoop.apache.orgや、HBaseをご覧ください。

HadoopのソフトウェアはCommon、HDFS、MapReduceから構成されています。CommonはHadoopプロジェクトのサポートユーティリティです。HDFS、MapReduceの役割とそれぞれのMasterサーバ、Slaveサーバの各ノード名称を以下に記載します。

名称役割MasterSlave
HDFSHadoop Distributed File System の略称、分散、複製の機能を備えた大規模ファイルシステムNameNodeDataNode
MapReduce大規模分散システム上でのプロセス並列化のフレームワークJobTrackerTaskTracker


HDFS、MapReduceそれぞれのノードについての名称と概略を以下に記載します。

  • HDFS
名称概略Master or Slave
NameNodeDataNode上の情報をメタデータで管理、複製の配置や整合性の管理Master
DataNode実データの保存、状態の報告Slave
Secondarynamenode障害対策の1つ、一定の間隔でNamenodeのバックアップを取得Master
Note
本手順では実行していませんがHadoopではMasterが単一障害点になるため、その対策として一定の間隔でNamenodeのバックアップを取るためのサービスSecondarynamenodeがあります。

  • MapReduce
名称概略Master or Slave
JobTrackerjobの受付、処理の割当、管理Master
TaskTrackerJobTrackerから割当てられた処理を実行するワーカーSlave


それぞれの詳細についてはCommonHDFSMapReduceをご覧ください。

また動作モードとしてローカルモード、擬似分散モード(pseudo)、完全分散モードがあります。ここではローカルモードと擬似分散モードについて記載しています。それぞれの概略は以下のとおりです。

名称概略
ローカルモード1台での実行、Hadoopとしての機能は使わずJavaの機能を使用
擬似分散モード1台でMasterとSlaveの実行
完全分散モード複数台でMasterとSlaveの実行

各動作モードの詳細についてはGetting Startedをご覧ください。

CDHについて

CDHはCloudera社提供されている『Cloudera Distribution for apache Hadoop』の略称です。CDHではHadoopとHadoopの関連プロジェクト(以降、コンポーネントと記載)であるHbase、Pig、Hiveなどとの整合性をある程度とりリリースされています。このためHadoopおよびコンポーネントの導入が比較的容易になっています。

本手順ではCDH3beta4(2011年4月1日当時の最新)で記載しています。2011年4月14日にCDH3がリリースされました。詳細についてはCDH3+InstallationDistribution Detailsをご覧ください。

Hadoopのバージョンについて

CDH3beta4に含まれるhadoop-0.20.2を使用しています。またhadoop.apache.orgで公開されているHadoopの最新版は0.21.0です。0.20.xと0.21.xでは機能やAPIなどに変更があります。詳細についてはrelease 0.21.0 available をご覧ください。

Hadoop/VMwareについて

VMware Player3.1.4 build-385536の仮想マシン上にCentOS5.5-x86_64をインストールし設定を行います。CentOSのインストール後CDH3beta4のリポジトリを追加しHadoopと主要コンポーネントをインストール、設定を行い、ローカルモードと擬似分散モードでの動作確認をしています。

Note
本手順でのHadoopと主要コンポーネントとはCommon、HDFSとMapReduceのコンポーネントを指しています。

また今回は使用していませんが、Cloudera社からVMwareイメージも公開されています。詳細についてはこちら>をご覧ください。

VMware Settings

VMware Hardware Settings

VMware ハードウェア構成は以下のように設定しています。

CPU:2
Memory:1GB
HDD:20GB(split 2GB、事前にGB使用しています。)
Network:bridge

主なアカウント情報を以下に記載します。

ユーザー :beat
パスワード :beatcraft 
rootパスワード :beatcraft

Install Centos5.5-x86_64

  • インストール設定
    このVMイメージではほぼデフォルト設定のままインストールしています。設定した項目は以下のものがあります。 日本語、日本語キーボードを選択しネットワークはDHCP、IPv4enable、IPv6disableにしています。またインストール元をHTTPに設定します。『web site name:』に『ftp.riken.jp』、『CentOS directory:』に『Linux/centos/5.5/os/x86_64』を入力します。(他の配布サイトでも問題ありません)また、『USE Text Mode』を選択し適宜設定します。
  • rootのパスワードは『beatcraft』としています。
  • インストールパッケージ
    インストールパッケージはSERVERを選択しカスタムをし、以下のパッケージを選択しています。
『Base、DevelopmentTools、Editors、FTP Server、Legacy Network Server、Network Servers、Server Configuration Tools、Text-based  
Internet、Web Server、Windows File Server』


Firewall SELinux は共にDisableに設定しています。その他はHDDパーティニング等はデフォルトインストールにしています。

Update

インストール完了後、アップデートを実行します。

# yum install yum-fastestmirror (導入されていますがリポジトリのチェックのため実行しています。)
...<略>
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
# yum update

ntpの設定

標準インストールで日本時間を選んでも正しい時刻を取得できていないことがあります。まず時刻を確認し日本ntpサーバと時刻あわせをします。またその情報をハードウェアに書き込みntpの設定に日本のntpサーバが含まれていない場合追加します。また起動時にntpdが起動するように設定しています。

# yum install ntp (注:ntpがインストールされていない場合のみ実行します)
# date
# ntpdate -s ntp.nict.jp
# clock -w

ntp/step-tickersに以下の3つの国内ntpサーバを追加します。

# vi /etc/ntp/step-tickers

ntp.nict.jp
ntp.jst.mfeed.ad.jp
ntp.ring.gr.jp

完了後ntpを再起動し、時刻の確認をします。あわせてサービス登録をしておきます。

# /etc/init.d/ntpd restart
# date
# chkconfig ntpd on
Note
標準インストールで日本時間を選んでも正しい時刻を取得していないことがあります。その際にファイルの時間が未来を指しているなどの問題がでるのを防ぐためにntpを設定しています。

環境変数設定

予め/etc/bashrcにJAVA_HOME、HADOOP_HOMEとPATHに/sbin、/usr/sbinを追加します。/sbinと/usr/sbinにPATHを追加しているのはコマンド(ifconfig、alternatives)などのタイプ数を減らすためです。

# tail -n 5 /etc/bashrc

fi
# vim:ts=4:sw=4
export JAVA_HOME=/usr/java/latest
export HADOOP_HOME=/usr/lib/hadoop
export PATH=/sbin:/usr/sbin:$HADOOP_HOME/bin:$PATH
Note
JAVAの実行時およびHadooのサービス起動時および実行時にエラーが発生した場合はJAVA_HOME、HADOOP_HOMEが正しく設定されているかの確認をしてください。

ユーザ追加とvisudo設定

一般ユーザにbeatとhadoopを追加します。beatは一般ユーザ用、hadoopはCDHインストール時にhdfsというユーザ名に変更されます。hdfs(hadoop)ユーザはHadoopでの作業用として作成しています。またhadoopはpassword無しの設定をしています。ご使用の環境に合わせて適宜変更してください。

  • beatユーザの作成
    useraddコマンドとpasswdコマンドでbeatユーザ、パスワードbeatcraftを作成します。
# useradd beat
# passwd beat
  • visudo設定
    sudoコマンドを実行できるユーザにbeatとhdfsユーザを追加します。
# visudo
...<略>
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
beat    ALL=(ALL)       ALL
hdfs    ALL=(ALL)       ALL
  • hadoopユーザの作成
    useraddコマンドとpasswd -d コマンドでhadoopユーザ、パスワードなしを追加します。
# useradd hadoop
# passwd -d hadoop
beatユーザからhadoopユーザへの切り替え
$ su hadoop

SSH設定

本VMwareイメージではrootでのログイン許可をしています。またhadoopユーザにて鍵作成をしていますが、空PASSWORDも許可しています。ご使用の環境に合わせて適宜設定を変更してください。

  • hadoopユーザの鍵作成
    ssh-keygenコマンドで鍵タイプrsa、パスワードなしのrsa鍵を/home/hadoop/.ssh/id_rsaに作成します。
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
Created directory '/home/hadoop/.ssh'.
Your identification has been saved in /home/hadoop/.ssh/id_rsa.
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:zz:zz:<略>:xx hadoop@localhost.localdomain
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  • sshd設定
    擬似分散モードや別マシンからのログインするためにsshd_configの設定をしsshdを再起動します。sshd_configでは rootでのログイン許可、RSA認証許可、公開鍵認証許可、空パスワード許可、パスワード認証許可としています。お使いの環境に合わせて 適宜設定を変更してください。
# vi /etc/ssh/sshd_config

#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6 

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
PermitEmptyPasswords yes
PasswordAuthentication yes

JDKのインストール

JDKのインストールをします。以下のサイトから最新版JDK (jdk-6u24-linux-x64-rpm.bin)をダウンロードしここでは/home/beat/jdkディレクトリに配置しました。またインストールの際はrootで実行します。
http://www.oracle.com/technetwork/java/javase/downloads/index.html

$ mkdir jdk
$ cd jdk/
$ ls
jdk-6u24-linux-x64-rpm.bin
$ chmod +x jdk-6u24-linux-x64-rpm.bin
$ su
パスワード:
# ./jdk-6u24-linux-x64-rpm.bin
Unpacking...
Checksumming...
Extracting...
<略>
# ls -l /usr/java/ 
合計 4
lrwxrwxrwx 1 root root   16  4月 12 13:03 default -> /usr/java/latest
drwxr-xr-x 9 root root 4096  4月 12 13:03 jdk1.6.0_24
lrwxrwxrwx 1 root root   21  4月 12 13:03 latest -> /usr/java/jdk1.6.0_24

/etc/bashrcで設定したJAVA_HOMEとディレクトリ位置があっているかを確認してください。

# tail -n 5 /etc/bashrc
fi
# vim:ts=4:sw=4
export JAVA_HOME=/usr/java/latest
export HADOOP_HOME=/usr/lib/hadoop
export PATH=/sbin:/usr/sbin:$HADOOP_HOME/bin:$PATH

不要なサービスの停止と起動について

不要なサービスの停止をします。起動しているサービス一覧をみるには chkconfig --listを使用します。本VMwareイメージではrunlevel3で起動しています。ご使用の環境に合わせて不必要なサービスがあれば停止もしくは起動をしてください。

# chkconfig --list
NetworkManager  0:off   1:off   2:off   3:off   4:off   5:off   6:off
acpid           0:off   1:off   2:on    3:on    4:on    5:on    6:off
anacron         0:off   1:off   2:on    3:on    4:on    5:on    6:off
atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off
auditd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
...<略>
sendmail        0:off   1:off   2:on    3:off   4:on    5:on    6:off
...<略>

サービスの停止、起動の書式については chkconfig --level <name> <off|on>で実行してください。chkconfigだけで実行するとオプションの説明メッセージが表示されます、またはman chkconfigを参照してください。ここではiptablesをoffに設定します。

  • サービスの確認
# chkconfig --list
...<略>
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
  • iptablesをoffに設定
# chkconfig iptables off
  • 再度サービスの確認
    # chkconfig --list
    iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off

以上でCentOS上での基本的な設定は完了です。

CentOS-5.5-x86_64設定の制限事項

  • 本VMwareイメージでは意識してセキュリティに関する事象を除外しています(sshdのrootログインなど)。

CDH3beta4

CDH3beta4のインストール

CDH3beta4のリポジトリを追加しCDHを導入します。以下のようにリポジトリを追加します。

# vi /etc/yum.repos.d/cloudera-cdh3.repo

[cloudera-cdh3]
name=Cloudera's Distribution for Hadoop, Version 3
mirrorlist=http://archive.cloudera.com/redhat/cdh/3/mirrors
gpgkey = http://archive.cloudera.com/redhat/cdh/RPM-GPG-KEY-cloudera 
gpgcheck = 0

リポジトリを追加後yumの更新をします。

# yum update yum

Install Hadoop

Hadoopの主要コンポーネントと擬似分散モード用設定のインストールをします。 yum searchコマンドを使って、Hadoop-0.20.2に対応する主要コンポーネントを確認しインストールします。yum install コマンドは文書中改行をしていますが、実コマンドはyumから-yまで1行で実行しています。またそれぞれのコンポーネントの関係は以下のとおりです。secondarynamenodeは一定の間隔でNamenodeのバックアップを取るためのサービスです。本VMwareイメージではこのサービスは使用していません。またyumコマンドの末尾『-y』はyum実行中のすべての質問に『y(yes)』と返すオプションです。

# yum install hadoop-0.20 hadoop-0.20-namenode hadoop-0.20-datanode hadoop-
0.20-secondarynamenode hadoop-0.20-jobtracker hadoop-0.20-tasktracker hadoop-
0.20-conf-pseudo -y

各コンポーネントの関係を以下に記載します。

名称HDFS or MapReduceMaster or Slave概略
hadoop-0.20-namenodeHDFSMasterDataNode上の情報をメタデータで管理、複製の配置や整合性の管理
hadoop-0.20-datanodeHDFSSlave実データの保存、Namenodeへの状態報告
hadoop-0.20-secondarynamenodeHDFSMaster障害対策の1つ、一定の間隔でNamenodeのバックアップを取得
hadoop-0.20-jobtrackerMapReduceMasterjobの受付、処理の割当、管理
hadoop-0.20-tasktrackerMapReduceSlaveJobTrackerから割当てられた処理を実行するワーカー


hadoopをインストール完了後、mapred,hdfsユーザが追加されていることを確認します。 またCDH3beta4を導入した際、作成していたhadoopユーザがhdfsユーザに切り替わります(パスワードは空のまま引き継がれます)。

# tail -n 4 /etc/passwd
beat:x:500:500::/home/beat:/bin/bash
ntp:x:38:38::/etc/ntp:/sbin/nologin
mapred:x:101:157:Hadoop MapReduce:/usr/lib/hadoop-0.20:/bin/bash
hdfs:x:501:501:Hadoop HDFS:/home/hadoop:/bin/bash

hadoop-0.20-confの切り替えについて

Hadoopの動作モードにはローカルモード、擬似分散モード、完全分散モードがあります。まずローカルモード用の設定を使用します。本VMwareイメージでは設定をしませんが追加設定として設定ファイル(conf.bc_cluster)を追加しています。

hadoopでは/etc/hadoop-0.20/以下にconf、conf.empty、conf.pseudo(擬似分散用設定ディレクトリ)があります。またconfはhadoop-0.20-conf-pseudo(擬似分散モード用設定)のsymlinkに設定されています。このsymlinkをalternativesコマンドで変更しローカルモード、擬似分散モード、完全分散モードなど各設定でのHadoopの起動が可能になります。

ここではローカルモード用の設定conf.localと完全分散用の設定conf.bc_clusterを作成します。各コピー元ファイルはconf.emptyとしconf.emptyは削除しないようにします。conf.emptyにはほぼ設定が記載されていないためです。

設定の切り替えにはalternativesを実行し切り替えを行います。alternativesを用いてhadoop-0.20-confのステータスとバージョン(symlinkの優先度)の確認をします。

# cd /etc/hadoop-0.20/
# ls -l
合計 8
lrwxrwxrwx 1 root root   34  4月 12 13:14 conf -> /etc/alternatives/hadoop-0.20-conf
drwxr-xr-x 2 root root 4096  4月 12 13:14 conf.empty
drwxr-xr-x 2 root root 4096  4月 12 13:14 conf.pseudo
# cp -r conf.empty conf.local
# cp -r conf.empty conf.bc_cluster
  • hadoop-0.20-confの設定確認
    alternatives --displayコマンドで現在のhadoop-0.20-confのsymlinkの確認をします。
# 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 です。
  • 設定変更例
    conf.bc_clusterの優先度を60と設定しconf.bc_clusterがhadoop-0.20-confのリンクになるかを確認します。 alternatives --installコマンドで設定を変更し、再度hadoop-0.20-confの設定を表示しconf.bc_clusterを指していることを 確認します。
# alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf /etc/hadoop-0.20/conf.bc_cluster 60
# alternatives --display hadoop-0.20-conf
hadoop-0.20-conf -ステータスは自動です。 
リンクは現在 /etc/hadoop-0.20/conf.bc_cluster を指しています。
/etc/hadoop-0.20/conf.empty - 優先項目 10
/etc/hadoop-0.20/conf.pseudo - 優先項目 30
/etc/hadoop-0.20/conf.bc_cluster - 優先項目 60 
現在の「最適」バージョンは /etc/hadoop-0.20/conf.bc_cluster です。
Note
使用法は『 alternatives --install <リンク> <名前> <パス> <優先度> 』です。その他にも明示的にパスを指定しその設定を反映させることもできます。
本VMwareイメージではローカルモードはconf.localを使用します。conf.localにhadoop-0.20-confを設定するために以下のように実行します。alternatives --setを使用するとステータスが自動から手動に切り替わります。
# alternatives --set hadoop-0.20-conf /etc/hadoop-0.20/conf.local
# alternatives --display hadoop-0.20-conf
hadoop-0.20-conf - ステータスは手動です。 
リンクは現在 /etc/hadoop-0.20/conf.local を指しています。
/etc/hadoop-0.20/conf.empty - 優先項目 10
/etc/hadoop-0.20/conf.pseudo - 優先項目 30
...<略>

ローカルモード

1台で擬似的なmaster、slaveを設定せずにMapReduceのアプリケーションのdebugなどに使用します。

conf.localの設定

ローカルモード用のconf.localに必要な設定を記載します。

  • hadoop-env.sh
    Hadoopの環境変数設定が記載されているファイルです。HADOOP_IDENT_STRINGを『$USER』からbclocalと変更しています。 またHadoopのheapサイズはデフォルトの1000MBのまま変更していません。ご使用の環境に合わせて適宜変更してください。
# tail -n 5 hadoop-env.sh
...<略>
# A string representing this instance of hadoop. $USER by default.
export HADOOP_IDENT_STRING=bclocal

# The scheduling priority for daemon processes.  See 'man nice'.
# export HADOOP_NICENESS=10
  • core-site.xml
    core-site.xmlにはHadoopの共通設定を記載します。hadoop.tmp.dirを/tmp/hadooplocalに設定します。hadoop.tmp.dirのディレクトリ指定は 適宜変更してください。
# cat core-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. --> 

<configuration>
        <property>
                <name>hadoop.tmp.dir</name>
                <!-- Local Disk Directory for hadoop data -->
                <value>/tmp/hadooplocal</value>
                <!-- its value -->
        </property>
</configuration>
  • hdfs-site.xml
    dfs-site.xmlにはHDFSに関する設定を記載するふぁいるです。ローカルモードではhdfs-site.xmlは設定の必要はありません。
  • mapred-site.xml
    mapred-site.xmlはMapReduceに関する設定を記載しています。ローカルモードではmapreduce.jobtracker.addressをlocalと設定します。
# cat mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 

<!-- Put site-specific property overrides in this file. -->

<configuration>
         <property>
                <name>mapreduce.jobtracker.address</name>
                <!-- JobTracker Address -->
                <value>local</value>
                <!-- its value -->
        </property>
</configuration>
  • hadoop.tmp.dirの作成
    上記で設定したhadoop.tmp.dir(/tmp/hadooplocalと設定)を作成します。
# cd tmp/
# mkdir hadooplocal 
# chmod -R 777 hadooplocal/
  • HADOOP_CLASSPATHの設定 ローカルモードとして動作するための設定をします。ローカルモードの実行ユーザをhdfsユーザに変更します。ローカルモードではHDFSを使用せずにローカルのファイルシステムを利用します。またJAVAのみでの実行になります。HADOOP_CLASSPATHは実行するファイルの存在するディレクトリを指定します。今回は/usr/lib/hadoop-0.20/hadoop-0.20.2-CDH3B4-examples.jarを実行するので/usr/lib/hadoop-0.20/を指定します。
# su hdfs
$ export HADOOP_CLASSPATH=/usr/lib/hadoop-0.20/

Examplesの実行

hadoop-0.20.2-CDH3B4-examples.jarを実行します。この際にjavaについてのエラーが発生した場合は、JAVA_HOMEの設定を確認してください。

$ hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-0.20.2-CDH3B4-examples.jar
An example program must be given as the first argument.
Valid program names are:
 aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files.
...<略>

hadoop-0.20.2-CDH3B4-examples.jarに含まれるpiを実行します。このExamplesの引数はmap数10、100回施行するExamplesになります。

$ hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-0.20.2-CDH3B4-examples.jar pi 10 100
Number of Maps  = 10
Samples per Map = 100
11/04/12 17:20:07 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Wrote input for Map #0
...<略>
11/04/12 17:20:12 INFO mapred.JobClient:     SPLIT_RAW_BYTES=1090
11/04/12 17:20:12 INFO mapred.JobClient:     Reduce input records=20
Job Finished in 4.704 seconds
Estimated value of Pi is 3.14800000000000000000

以上でローカルモードの動作確認は終了です。

擬似分散モード

1台のVMwareイメージ上で擬似的にMasterとSlaveを設定しそれぞれのサービスの起動を行うモードです。上記インストール済みの擬似分散用設定ファイルconf.pseudoを用います。また端末上でのブラウジングをする場合テキストブラウザを適宜インストールしてください。

# yum install w3m -y

hadoop-0.20-confの切り替え

ローカルモード後に実行する場合は擬似分散モードへhadoop-0.20-confを切り替える必要があります。alteranativesを用いてhadoop-0.20-confの設定確認をします。(下記ではconf.localの優先項目も60に設定しています)

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

hadoop-0.20-confはconf.localに設定されていますので、先ほどの手順同様『alternatives --set』を用いてhadoop-0.20-confをcond.pseudoに変更します。alternatives --display hadoop-0.20-confを実行しhadoop-0.20-confはconf.pseudoに設定されていることが確認します。

# alternatives --set hadoop-0.20-conf /etc/hadoop-0.20/conf.pseudo
# 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.bc_cluster - 優先項目 60
/etc/hadoop-0.20/conf.local - 優先項目 60
現在の「最適」バージョンは /etc/hadoop-0.20/conf.bc_cluster です。

擬似分散モード設定

conf.pseudoに既に設定値が記載されていますので、変更を加える必要はありません。ご使用の環境に応じて適宜設定を変更してください。

# cd /etc/hadoop-0.20/conf.pseudo/
  • hadoop-env.sh
    Hadoopの環境変数設定が記載されているファイルです。HADOOP_IDENT_STRINGをbcpseudoに変更しています。
# tail -n 5 hadoop-env.sh
...<略>
# A string representing this instance of hadoop. $USER by default.
export HADOOP_IDENT_STRING=bcpseudo

# The scheduling priority for daemon processes.  See 'man nice'.
# export HADOOP_NICENESS=10
  • core-site.xml
    core-site.xmlにはHadoopの共通設定を記載します。core-site.xmlはデフォルトから変更していません。hadoop.tmp.dirが/var/lib/hadoop-0.20/cache/${user.name}に設定されています。ご使用の環境に合わせて適宜変更してください。
# cat core-site.xml
 
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:8020</value>
  </property>

  <property>
     <name>hadoop.tmp.dir</name>
     <value>/var/lib/hadoop-0.20/cache/${user.name}</value>
  </property> 

  <!-- OOZIE proxy user setting -->
  <property>
    <name>hadoop.proxyuser.oozie.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.oozie.groups</name>
    <value>*</value>
  </property> 
 </configuration>
  • hdfs-site.xml
    hdfs-site.xmlにはHDFSに関する設定を記載します。擬似分散モードのhdfs-site.xmlはslaveが1台のためdfs.replicationは1に設定されています。dfs.permissionsをfalseに設定することでhdfsユーザ以外のHDFSへの書き込みが可能になります。dfs.name.dirは/var/lib/hadoop-0.20/cache/hadoop/dfs/nameと設定されています。ご使用の環境にあわせて適宜変更してください。
# cat hdfs-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</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>

  <!-- Enable Hue Plugins -->
  <property>
    <name>dfs.namenode.plugins</name>
    <value>org.apache.hadoop.thriftfs.NamenodePlugin</value>
    <description>Comma-separated list of namenode plug-ins to be activated.
    </description>
  </property>
  <property>
    <name>dfs.datanode.plugins</name>
    <value>org.apache.hadoop.thriftfs.DatanodePlugin</value>
    <description>Comma-separated list of datanode plug-ins to be activated.
    </description>
  </property>
  <property>
    <name>dfs.thrift.address</name>
    <value>0.0.0.0:10090</value>
  </property>
</configuration>
  • mapred-site.xml mapred-site.xmlはMapReduceに関する設定を記載しています。mapred.job.trackerはlocalhost:8021です、WEBUIで閲覧んする際はlocalhost:50030で閲覧することができます。この値は変更する必要はありません。
# cat mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>mapred.job.tracker</name>
    <value>localhost:8021</value>
  </property>

  <!-- Enable Hue plugins -->
  <property>
    <name>mapred.jobtracker.plugins</name>
    <value>org.apache.hadoop.thriftfs.ThriftJobTrackerPlugin</value>
    <description>Comma-separated list of jobtracker plug-ins to be activated.
    </description>
  </property>
  <property>
    <name>jobtracker.thrift.address</name>
    <value>0.0.0.0:9290</value>
  </property>
</configuration>

サービスの起動前に

hdfsユーザに切り替え各サービスを起動する前に既に起動しているHadoopのサービスがあれば停止します。ここでは一括でhadoop-0.20-の関連サービスを停止しています。

# su hdfs
$ for service in /etc/init.d/hadoop-0.20-*; do sudo $service stop; done

HDFS Format

HDFSを正常に起動させるために、hdfsユーザでHDFSをFormatします。

$ sudo -u hdfs hadoop-0.20 namenode -format
11/04/12 18:55:07 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = localhost.localdomain/127.0.0.1
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 0.20.2-CDH3B4
STARTUP_MSG:   build =  -r 3aa7c91592ea1c53f3a913a581dbfcdfebe98bfe; compiled by 'root' on Mon Feb 21 17:31:12 EST 2011
************************************************************/
Re-format filesystem in /var/lib/hadoop-0.20/cache/hadoop/dfs/name ? (Y or N) Y
11/04/12 18:55:09 INFO util.GSet: VM type       = 64-bit
<略>
11/04/12 18:55:10 INFO common.Storage: Storage directory /var/lib/hadoop-0.20/cache/hadoop/dfs/name has been successfully formatted.
11/04/12 18:55:10 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost.localdomain/127.0.0.1
************************************************************/

サービスの起動

先ほど一括でサービスを停止したコマンドと同様に一括でサービスを起動します。

$ for service in /etc/init.d/hadoop-0.20-*; do sudo  $service start; done
Starting Hadoop datanode daemon (hadoop-datanode): starting datanode, logging to /usr/lib/hadoop-0.20/logs/hadoop-bcpseudo-datanode-localhost.localdomain.out
                                                           [  OK  ]
Starting Hadoop jobtracker daemon (hadoop-jobtracker): starting jobtracker, logging to /usr/lib/hadoop-0.20/logs/hadoop-bcpseudo-jobtracker-localhost.localdomain.out
                                                           [  OK  ]
Starting Hadoop namenode daemon (hadoop-namenode): starting namenode, logging to /usr/lib/hadoop-0.20/logs/hadoop-bcpseudo-namenode-localhost.localdomain.out
                                                           [  OK  ]
Starting Hadoop secondarynamenode daemon (hadoop-secondarynamenode): starting secondarynamenode, logging to /usr/lib/hadoop-0.20/logs/hadoop-bcpseudo-secondarynamenode-localhost.localdomain.out
                                                           [  OK  ]
Starting Hadoop tasktracker daemon (hadoop-tasktracker): starting tasktracker, logging to /usr/lib/hadoop-0.20/logs/hadoop-bcpseudo-tasktracker-localhost.localdomain.out
                                                           [  OK  ]

各サービスごとの起動は以下のとおりです。

  • namenode(Master)
$ sudo /etc/init.d/hadoop-0.20-namenode start
  • datanode(Slave)
$ sudo  /etc/init.d/hadoop-0.20-datanode start
  • jobtracker(Master)
$ sudo /etc/init.d/hadoop-0.20-jobtracker start
  • tasktracker(Slave)
$ sudo /etc/init.d/hadoop-0.20-tasktracker start

起動後以下のURLでNameNodeとMap/Reduce AdministrationのWebUIが閲覧できます。

  • NameNode
$ w3m http://localhost:50070
  • Map/Reduce Administration
$ w3m http://localhost:50070

Examples

ローカルモード同様、hadoop-0.20.2-CDH3B4-examples.jarを実行します。この際にjavaについてのエラーが発生した場合は、JAVA_HOMEの設定を確認してください。

$ hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-0.20.2-CDH3B4-examples.jar
An example program must be given as the first argument.
Valid program names are:
 aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files.
...<略>

ローカルモードと同じExamplesのhadoop-0.20.2-CDH3B4-examples.jarに含まれるpiを実行します。このExamplesの引数はmap数10、100回施行するExamplesです。

$ hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-0.20.2-CDH3B4-examples.jar pi 10 100
Number of Maps  = 10
Samples per Map = 100
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
...<略>
11/04/12 19:55:03 INFO mapred.FileInputFormat: Total input paths to process : 10
11/04/12 19:55:04 INFO mapred.JobClient: Running job: job_201104121855_0001
...<略>
11/04/12 19:55:51 INFO mapred.JobClient:     Map output records=20
11/04/12 19:55:51 INFO mapred.JobClient:     SPLIT_RAW_BYTES=1160
11/04/12 19:55:51 INFO mapred.JobClient:     Reduce input records=20
Job Finished in 48.321 seconds
Estimated value of Pi is 3.14800000000000000000

この際Map/Reduce AdministrationのWebUI「Completed Jobs」にjob_201104121855_0001が表示されます。

#ref(): File not found: "localmapreduce.jpg" at page "Hadoop/VMware"

サービスの停止

一括でのサービス停止は以下のように実行します。

$ for service in /etc/init.d/hadoop-0.20-*; do sudo $service stop; done

もしくは各サービスごとの停止は以下のとおりです。

  • namenode(Master)
$ sudo /etc/init.d/hadoop-0.20-namenode stop
  • datanode(Slave)
$ sudo /etc/init.d/hadoop-0.20-datanode stop
  • jobtracker(Master)
$ sudo /etc/init.d/hadoop-0.20-jobtracker stop
  • tasktracker(Slave)
$ sudo /etc/init.d/hadoop-0.20-tasktracker stop

以上で擬似分散モードの動作確認は終了です。

CDH3beta4:Hadoop関連プロジェクト

CDH3beta4ではHadoopの主要コンポーネントの他に以下のHadoopの関連プロジェクトをサポートしています。CDH3 beta4から入手できるコンポーネントとインストール時のパッケージ名の対応は以下の通りです。

コンポーネント名パッケージ名概略参照URL
FlumeFlumeデータローディングインフラhttp://archive.cloudera.com/cdh/3/flume/Cookbook/index.html
SqoopSqoopMySQLからHadoopへのデータインポートツールhttp://archive.cloudera.com/cdh/3/sqoop/SqoopDevGuide.html
HueHueHadoop User Experience(HadoopのUI)http://archive.cloudera.com/cdh/3/hue/
Pighadoop-pigデータセットを探索するための対話的インターフェースhttp://archive.cloudera.com/cdh/3/pig/
Hivehadoop-hiveSQLライクな言語http://hive.apache.org/
HBasehadoop-hbaseBigtable Storage System。HDFSとは逆に細かい大量のデータを扱うためのHDFS上に作成するFile Systemhttp://hbase.apache.org/
ZooKeeperhadoop-zookeeper設定情報、名前付けなどの設定、保守サービスhttp://zookeeper.apache.org/
Oozie serverOozieワークフローエンジンhttp://archive.cloudera.com/cdh/3/oozie/
Oozie clientoozie-clientワークフローエンジンhttp://archive.cloudera.com/cdh/3/oozie/
WhirrWhirrAmazonEC2のようなクラウドとの連携APIhttp://archive.cloudera.com/cdh/3/whirr/index.html

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2011-04-15 (金) 19:53:47 (2504d)