Atom Serverを使用し、Hadoopを完全分散モード(クラスタ)で構築します。大きな項目は以下のとおりです。
・Hadoopについて ・Atom Serverのマシンスペック ・CentOS5.5-x86_64のインストールと各設定 ・CDH3beta4のインストール ・Hadoopの設定と各ノードの起動 ・サンプルプログラムの実行 ・Ganglia(サーバ監視ソフトウェア)の導入
(使用するAtom-Server)
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サーバの各ノード名称を以下に記載します。
名称 | 役割 | Master | Slave |
HDFS | Hadoop Distributed File System の略称、分散、複製の機能を備えた大規模ファイルシステム | NameNode | DataNode |
MapReduce | 大規模分散システム上でのプロセス並列化のフレームワーク | JobTracker | TaskTracker |
HDFS、MapReduceそれぞれのノードについての名称と概略を以下に記載します。
名称 | 概略 | Master or Slave |
NameNode | DataNode上の情報をメタデータで管理、複製の配置や整合性の管理 | Master |
DataNode | 実データの保存、状態の報告 | Slave |
Secondarynamenode | 障害対策の1つ、一定の間隔でNamenodeのバックアップを取得 | Master |
名称 | 概略 | Master or Slave |
JobTracker | jobの受付、処理の割当、管理 | Master |
TaskTracker | JobTrackerから割当てられた処理を実行するワーカー | Slave |
それぞれの詳細についてはCommon、HDFS、MapReduceをご覧ください。
また動作モードとしてローカルモード、擬似分散モード(pseudo)、完全分散モードがあります。ここでは完全分散モードについて記載しています。それぞれの概略は以下のとおりです。
名称 | 概略 |
ローカルモード | 1台での実行、Hadoopとしての機能は使わずJavaの機能を使用 |
擬似分散モード | 1台でMasterとSlaveの実行 |
完全分散モード | 複数台でMasterとSlaveの実行 |
各動作モードの詳細についてはGetting Startedをご覧ください。
CDHはCloudera社提供されている『Cloudera Distribution for apache Hadoop』の略称です。CDHではHadoopとHadoopの関連プロジェクト(以降、コンポーネントと記載)であるHbase、Pig、Hiveなどとの整合性をある程度とりリリースされています。このためHadoopおよびコンポーネントの導入が比較的容易になっています。
本手順ではCDH3beta4(2011年4月1日当時の最新)で記載しています。2011年4月14日にCDH3がリリースされました。詳細についてはCDH3+Installation、Distribution Detailsをご覧ください。
CDH3beta4に含まれるhadoop-0.20.2を使用しています。またhadoop.apache.orgで公開されているHadoopの最新版は0.21.0です。0.20.xと0.21.xでは機能やAPIなどに変更があります。詳細についてはrelease 0.21.0 available をご覧ください。
AtomServerの各マシンにCentOS5.5-x86_64をインストールし設定を行います。CentOSのインストール後CDH3beta4のリポジトリを追加しHadoopと主要コンポーネントをインストール、設定を行います。一部の設定(固定IP設定、Master、Slaveの各サービス)以外はすべてのマシンで同じ設定を行います。
今回使用しているマシンの構成は、同型Atomボード8枚1組で構成されています。
CPU:Atom D510 1.66GHz(Core 2個,HT Enable ,64bit Enable) Chipset :NM10 Memory:2GB Hard Disk容量: 160GB Ethernet:1個(static IPを個別に設定) OS: CentOS-5.5-x86_64
インストールはCentOS-5.6-x86_64-LiveCD.isoを使用します。isoファイルはこちらからダウンロードをします。
インストールパッケージの選択は以下のとおりです。
root のパスワードは『beatcraft』に設定しています。また一般ユーザアカウント設定は以下のとおりです。
ユーザ名:beat パスワード:beatcraft
Firewall SELinux は共にDisableに設定しています。その他のインストール時の設定はデフォルトの設定を適用しています。再起動後ネットワークの設定を行います。
Hadoop完全分散モードでの動作確認のため各Atomボードに固定IPとhost名、FQDNでの名前解決の設定を行っています。本内容ではアドレスは192.168.0.211〜192.168.0.218、ホスト名atomcloud1〜8とそれぞれのAtomボードに設定しています。ご使用の環境に合わせて設定を適宜変更してください。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 ...<略> ONBOOT=yes NETMASK=255.255.255.0 IPADDR=192.168.0.212 GATEWAY=192.168.0.xxx ...<略>
# vi /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 192.168.0.211 atomcloud1.beatcraft.co.jp atomcloud1 192.168.0.212 atomcloud2.beatcraft.co.jp atomcloud2 ...<略> 192.168.0.218 atomcloud8.beatcraft.co.jp atomcloud8
設定完了後、再起動し自マシン(ここではatomcloud2)のホスト名宛のpingコマンドで設定しているFQDNとIPで応答があるかを確認します。
# ping atomcloud2 PING atomcloud2.beatcraft.co.jp (192.168.0.212) 56(84) bytes of data. 64 bytes from atomcloud2.beatcraft.co.jp (192.168.0.212): icmp_seq=1 ttl=64 time=0.041 ms 64 bytes from atomcloud2.beatcraft.co.jp (192.168.0.212): icmp_seq=2 ttl=64 time=0.022 ms 64 bytes from atomcloud2.beatcraft.co.jp (192.168.0.212): icmp_seq=3 ttl=64 time=0.025 ms
Hadoopの完全分散モードでのマシン同士の通信はsshを用いて行います。各マシンのsshdの設定(sshd_config)を記載します。ここでは設定例としてパスワード認証、rootでのログインを許可する設定にしています。適宜使用環境およびセキュリティに考慮して設定を変更してください。
# vi /etc/ssh/sshd_config #LoginGraceTime 2m PermitRootLogin yes #StrictModes yes #MaxAuthTries 6
設定完了後sshdを再起動します。
# /etc/init.d/sshd restart
時刻を確認し日本ntpサーバと時刻あわせをします。またその情報をハードウェアに書き込み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
予めJAVA_HOME,HADOOP_HOME、hadoopへのPATH、/sbinと/usr/sbinをPATHに追加します。/sbinと/usr/sbinにPATHを追加しているのはコマンド(ifconfig、alternatives)などのタイプ数を減らすためです。
# cat /etc/bashrc | tail -n 5 -f # 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
設定完了後、環境変数設定を再度読み込みます。
# source /etc/bashrc
# 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 ...<略>
# /etc/init.d/sendmail stop sm-client を停止中: [ OK ] sendmail を停止中: [ OK ] # chkconfig sendmail off # chkconfig --list | grep sendmail sendmail 0:off 1:off 2:off 3:off 4:off 5:off 6:off
以下のサイトから最新のJDK-64bit版 (jdk-6u24-linux-x64-rpm.bin)をダウンロードし、インストールを実行します。
http://www.oracle.com/technetwork/java/javase/downloads/index.html
# cd /home/beat/ # ls Desktop jdk-6u24-linux-x64-rpm.bin # chmod u+x jdk-6u24-linux-x64-rpm.bin # ./jdk-6u24-linux-x64-rpm.bin # ls -l /usr/java/ 合計 4 lrwxrwxrwx 1 root root 16 3月 22 20:30 default -> /usr/java/latest drwxr-xr-x 9 root root 4096 3月 22 20:30 jdk1.6.0_24 lrwxrwxrwx 1 root root 21 3月 22 20:30 latest -> /usr/java/jdk1.6.0_24
上記で設定したJAVA_HOMEとディレクトリ位置があっているかを確認してください。
以上でCentOS上での基本的な設定は完了です。
CDH3beta4のHadoopバージョンは0.20.2です。またCDH2およびstableバージョンではhadoop-0.18とhadoop-0.20の混在環境が一部含まれているため今回はCDHの2011年4月1日時点での最新版CDH3beta4を使用しています。
CDH3beta4に含まれるHadoopをインストールするためCDH3beta4のリポジトリを追加します。詳細については『Documentation for Previous CDH Releases』の『Download CDH3 Beta 4 Documentation』をご覧ください。
# 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
先ほど更新したyumを使用しHadoop(hadoop-0.20)をインストールします。yum searchコマンドでHadoopのパッケージ情報を取得できていることを確認しインストールします。
# yum search hadoop- ...<略> ============================================ Matched: hadoop- ============================================ hadoop-0.20.noarch : Hadoop is a software platform for processing vast amounts of data hadoop-0.20-conf-pseudo.noa ...<略> # yum install hadoop-0.20 -y
yum searchコマンドを使って、Hadoop-0.20.2に対応する主要コンポーネントを確認しインストールします。
名称 | HDFS or MapReduce | Master or Slave | 概略 |
hadoop-0.20-namenode | HDFS | Master | DataNode上の情報をメタデータで管理、複製の配置や整合性の管理 |
hadoop-0.20-datanode | HDFS | Slave | 実データの保存、Namenodeへの状態報告 |
hadoop-0.20-secondarynamenode | HDFS | Master | 障害対策の1つ、一定の間隔でNamenodeのバックアップを取得 |
hadoop-0.20-jobtracker | MapReduce | Master | jobの受付、処理の割当、管理 |
hadoop-0.20-tasktracker | MapReduce | Slave | JobTrackerから割当てられた処理を実行するワーカー |
# yum install hadoop-0.20-namenode hadoop-0.20-datanode hadoop-0.20-secondarynamenode hadoop-0.20-jobtracker hadoop-0.20-tasktracker -y 注:文書では改行していますが、実コマンドはyumから-yまで1行で実行しています。
# cat /etc/passwd <略> beat:x:500:500:xxxxx:/home/beat:/bin/bash mapred:x:101:107:Hadoop MapReduce:/usr/lib/hadoop-0.20:/bin/bash hdfs:x:102:106:Hadoop HDFS:/usr/lib/hadoop-0.20:/bin/bash
本手順では使用しませんが、設定参考のため擬似分散モード用設定をインストールします。
# yum install hadoop-0.20-conf-pseudo -y
また端末上でのブラウジングのためテキストブラウザをインストールします。
# yum install w3m -y
その他CDH3 beta4から入手できるコンポーネントとインストール時のパッケージ名の対応は以下の通りです。
コンポーネント名 | パッケージ名 | 概略 | 参照URL |
Flume | Flume | データローディングインフラ | http://archive.cloudera.com/cdh/3/flume/Cookbook/index.html |
Sqoop | Sqoop | MySQLからHadoopへのデータインポートツール | http://archive.cloudera.com/cdh/3/sqoop/SqoopDevGuide.html |
Hue | Hue | Hadoop User Experience(HadoopのUI) | http://archive.cloudera.com/cdh/3/hue/ |
Pig | hadoop-pig | データセットを探索するための対話的インターフェース | http://archive.cloudera.com/cdh/3/pig/ |
Hive | hadoop-hive | SQLライクな言語 | http://hive.apache.org/ |
HBase | hadoop-hbase | Bigtable Storage System。HDFSとは逆に細かい大量のデータを扱うためのHDFS上に作成するFile System | http://hbase.apache.org/ |
ZooKeeper | hadoop-zookeeper | 設定情報、名前付けなどの設定、保守サービス | http://zookeeper.apache.org/ |
Oozie server | Oozie | ワークフローエンジン | http://archive.cloudera.com/cdh/3/oozie/ |
Oozie client | oozie-client | ワークフローエンジン | http://archive.cloudera.com/cdh/3/oozie/ |
Whirr | Whirr | AmazonEC2のようなクラウドとの連携API | http://archive.cloudera.com/cdh/3/whirr/index.html |
Hadoopのモードは完全分散モード(クラスタ)設定を使用します。Hadoopの完全分散モード用の設定、確認について記載しています。以下の設定は各マシン同じです。1台分の完全分散モード用設定完了後、設定ディレクトリをscpなどでコピーすることで作成時間を短縮できます。
完全分散モードに必要な設定ディレクトリをconf.bc_clusterという名前で作成します。/etc/hadoop-0.20/conf.emptyから/etc/hadoop-0.20/conf.bc_clusterをコピーをします。
# cp -r /etc/hadoop-0.20/conf.empty hadoop-0.20/conf.bc_cluster
# cat /etc/hadoop-0.20/conf.bc_cluster/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> <value>/hadoop</value> </property> <property> <name>fs.default.name</name> <value>hdfs://atomcloud2:8020</value> <description>The name and URI of the default FS.</description> </property> </configuration>
# cat /etc/hadoop-0.20/conf.bc_cluster/hdfs-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>dfs.name.dir</name> <value>${hadoop.tmp.dir}/dfs/name</value> </property> <property> <name>dfs.data.dir</name> <value>${hadoop.tmp.dir}/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
# cat /etc/hadoop-0.20/conf.bc_cluster/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>mapred.job.tracker</name> <value>atomcloud2:8021</value> </property> </configuration>
# cat /etc/hadoop-0.20/conf.mycluster/masters atomcloud2
# cat /etc/hadoop/conf.bc_cluster/slaves atomcloud1 atomcloud3 ...<略> atomcloud8
hadoo-0.20-confの優先順位設定は/usr/sbin/alternativesを使用します。alternativesは設定ファイルとそのシンボリックリンクを切り替えるためのコマンドです。
hadoop-0.20-confの現在の設定の確認をします。
# 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 です。
hadoop-0.20-confの優先度を変更します。conf.bc_clusterに優先度60を設定します。alternatives --installを使用し<リンク>の位置は/etc/hadoop-0.20/conf、<名前>はhadoop-0.20-conf、<パス>には/etc/hadoop/conf.bc_cluster、<優先度>は60を設定します。
# alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf /etc/hadoop/conf.bc_cluster 60 注:上記コマンドには改行が含まれていますが1行で実行します。 # alternatives --display hadoop-0.20-conf hadoop-0.20-conf -ステータスは自動です。 リンクは現在 /etc/hadoop/conf.bc_cluster を指しています。 /etc/hadoop-0.20/conf.empty - 優先項目 10 /etc/hadoop-0.20/conf.pseudo - 優先項目 30 /etc/hadoop/conf.bc_cluster - 優先項目 60 現在の「最適」バージョンは /etc/hadoop/conf.bc_cluster です 。
これでhadoop-0.20-confに/etc/hadoop/conf.bc_clusterを反映する設定は完了です。
hadoopディレクトリを作成し、HDFS、MapReduceが動作する状態に設定します。
core-site.xmlのhadoop.tmp.dirの設定で/hadoopを指定していまので/以下にhadoopディレクトリを作成しディレクトリ全体をフルアクセスにします。あわせてdfs,mapredディレクトリも作成し所有者とグループをそれぞれhdfs:hadoop、mapred:hadoopに設定します。
# mkdir /hadoop # mkdir /hadoop/dfs # mkdir /hadoop/mapred # chown -R hdfs:hadoop /hadoop/dfs/ # chown -R mapred:hadoop /hadoop/mapred/ # ls -l /hadoop/ 合計 8 drwxr-xr-x 3 hdfs hadoop 4096 3月 31 09:44 dfs drwxr-xr-x 3 mapred hadoop 4096 3月 31 09:44 mapred
Hadoopの各ノードの起動する前に必要のないHadoopの各サービス起動していればサービスを停止します。以下のコマンドはhadoo-0.20-に関連づいているノード全てを停止するコマンドになります。
# for service in /etc/init.d/hadoop-0.20-*; do $service stop; done
Master、Slaveともにhdfsのフォーマットをhdfsユーザで実行します。またこの作業はSlaveが1台増える毎に実行します。実行せずにSlaveのマシンを増やしてHadoopを起動すると整合性あわないというエラーが起こるためです。
# sudo -u hdfs hadoop-0.20 namenode -format 11/03/30 22:26:16 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = atomcloud2/192.168.0.212 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 0.20.2-CDH3B4 <略> 11/03/30 22:26:19 INFO common.Storage: Storage directory /hadoop/dfs/name has been successfully formatted. 11/03/30 22:26:19 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at atomcloud2/192.168.0.212 ************************************************************/
各ノードの起動順は大きくHDFS->MapReduceの順で起動します。以下に書くノードの起動の概略を記載します。
Master(namenode)->Slave(datanode)->Master(jobtracker)->Slave(tasktracker)
Master(atomcloud2)のnamenode起動後に各Slave(atomcloud1、3〜8)のdatanodeを起動します。今回はテスト版としてsecondarynamenodeは起動しません。
Slaveのdatanode起動後、Masternにて/mapred/systemを作成し所有者の変更を行いmasterのjobtrackerを起動します。その後各Slaveのtasktrackerを起動します。停止の際はMasterからノードを停止し各Slaveのノードを停止します、以下に各ノードの起動時と停止時を記載します。
# /etc/init.d/hadoop-0.20-namenode start
# /etc/init.d/hadoop-0.20-datanode start
# hadoop-0.20 fs -mkdir /mapred/system # su hdfs % hadoop-0.20 fs -chown -R mapred:supergroup /mapred
# /etc/init.d/hadoop-0.20-jobtracker start
# /etc/init.d/hadoop-0.20-tasktracker start
# /etc/init.d/hadoop-0.20-jobtracker stop # /etc/init.d/hadoop-0.20-namenode stop
# /etc/init.d/hadoop-0.20-tasktracker stop # /etc/init.d/hadoop-0.20-datanode stop
各ノードが起動するとNameNodeとMap/Reduce AdministrationのWebUIが以下のURIで閲覧することでサービスの確認ができます。Node数を確認することでSlaveが起動しているかの確認ができます。すべてのNodeが反映されるまで若干時間がかかることがあります。
NameNode:http://atomcloud2:50070 Map/Reduce Administration:http://atomcloud2:50030
HadoopにはHDFS、Map/Reduceの動作確認用のExamplesとHadoopのI/O性能を測るBenchMark
のサンプルが含まれています。以下のコマンドを実行するとより詳細なExamplesの例とTestの例が表示されます。
# hadoop jar /usr/lib/hadoop-0.20/hadoop-0.20.2-CDH3B4-examples.jar An example program must be given as the first argument. ...<略> pi: A map/reduce program that estimates Pi using monte-carlo method. randomtextwriter: A map/reduce program that writes 10GB of random textual data per node. ...<略>
# hadoop jar /usr/lib/hadoop-0.20/hadoop-0.20.2-CDH3B4-test.jar An example program must be given as the first argument. Valid program names are: DFSCIOTest: Distributed i/o benchmark of libhdfs. DistributedFSCheck: Distributed checkup of the file system consistency. MRReliabilityTest: A program that tests the reliability of the MR framework by injecting faults/failures TestDFSIO: Distributed i/o benchmark. ...<略>
ここではExamplesのpiとTestに含まれるTestDFSIOのwrite、readとcleanをサンプルとして実行します。Examplesのpiの引数は10と1000。TestDFSIOの引数は1個のfilesizeは10MBのファイルの読み書きです、最後の -cleanは作成したファイルを削除します。writeとread時のTestDFSIO_results.logには追記型で記載されるので、以下のスクリプトでは -cleanの際も追記するようにしています。
hadoop jar /usr/lib/hadoop-0.20/hadoop-examples-0.20.2-CDH3B4.jar pi 10 1000 Number of Maps = 10 Samples per Map = 1000 Wrote input for Map #0 ...<略> 11/04/11 19:29:39 INFO mapred.FileInputFormat: Total input paths to process : 10 11/04/11 19:29:40 INFO mapred.JobClient: Running job: job_201104102156_0041 11/04/11 19:29:41 INFO mapred.JobClient: map 0% reduce 0% ...<略> 11/04/11 19:30:09 INFO mapred.JobClient: Reduce input records=20 Job Finished in 30.142 seconds Estimated value of Pi is 3.14080000000000000000
#!/bin/sh echo "--- Nr:10 FS:10M(10*10MB:100MB)---" > TestDFSIO_results.log hadoop jar /usr/lib/hadoop-0.20/hadoop-test-0.20.2-CDH3B4.jar TestDFSIO -write -nrFiles 10 -filesize 10000 sleep 1 hadoop jar /usr/lib/hadoop-0.20/hadoop-test-0.20.2-CDH3B4.jar TestDFSIO -read -nrFiles 10 -filesize 10000 sleep 1 echo "---- clean ----" >> TestDFSIO_results.log hadoop jar /usr/lib/hadoop-0.20/hadoop-test-0.20.2-CDH3B4.jar TestDFSIO -clean 2>&1 | tee -a TestDFSIO_results.log echo "---- clean ----" >> TestDFSIO_results.log
TestDFSIO_results.logは以下のように出力されます。
--- Nr:10 FS:10M(10*10MB:100MB)--- ----- TestDFSIO ----- : write Date & time: Sun Apr 10 22:57:02 JST 2011 Number of files: 10 Total MBytes processed: 10 Throughput mb/sec: 2.1867483052700636 Average IO rate mb/sec: 2.351172685623169 IO rate std deviation: 0.661258472040145 Test exec time sec: 29.263 ----- TestDFSIO ----- : read Date & time: Sun Apr 10 22:57:36 JST 2011 Number of files: 10 Total MBytes processed: 10 Throughput mb/sec: 4.050222762251924 Average IO rate mb/sec: 4.336997032165527 IO rate std deviation: 1.0029312896197553 Test exec time sec: 29.292 ---- clean ---- TestDFSIO.0.0.4 11/04/10 22:57:40 INFO fs.TestDFSIO: nrFiles = 1 11/04/10 22:57:40 INFO fs.TestDFSIO: fileSize (MB) = 1 11/04/10 22:57:40 INFO fs.TestDFSIO: bufferSize = 1000000 11/04/10 22:57:41 INFO fs.TestDFSIO: Cleaning up test files ---- clean ----
以上で、完全分散モードの動作確認は完了です。以下のGangliaの設定は必須設定ではありません。各サーバの使用状況のモニタリングをするためにGangliaを設定しています。
HDFS、Map/Reduce AdministrationにWebUIがありますが、クラスタリングマシン各マシンの時系列を含めたCPU、メモリ、ディスクの使用頻度の可視化ツールとしてGangliaをインストールします。役割としてはMaster、Slave、Monitorがあります。ここではMasterとMonitorをatomcloud2、その他のマシンは全てSlaveとして設定しています。詳細はganglia.infoをご覧ください。
atomcloud2でrpmforge(サードパーティリポジトリ)からx86_64版rpmforge-release-0.5.2-2.el5.rf.x86_64.rpmをダウンロードしインストールします。
# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm # rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
GangliaのDownload頁からganglia monitor coreの最新版3.17をダウンロードします。
# wget http://sourceforge.net/projects/ganglia/files/ganglia%20monitoring%20core/3.1.7/ganglia-3.1.7.tar.gz/download
ダウンロード後rpmパッケージ化するためにrpmbuildを行うと以下のようなエラーが出ます。
# rpmbuild -tb --target noarch,x86_64 ganglia-3.1.7.tar.gz ビルド対象プラットフォーム: noarch,x86_64 ターゲット noarch 用にビルド中 エラー: ビルド依存性の失敗: libconfuse-devel は ganglia-3.1.7-1.noarch に必要とされています pcre-devel は ganglia-3.1.7-1.noarch に必要とされています rrdtool-devel は ganglia-3.1.7-1.noarch に必要とされています apr-devel > 1 は ganglia-3.1.7-1.noarch に必要とされています
表示されている必要な依存パッケージをインストールします。
# yum install libconfuse-devel pcre-devel rrdtool-devel apr-devel -y
再度rpmbuildを実行すると/usr/src/redhat/RPMS/以下にgangliaの各rpmが作成されています。
# rpmbuild -tb --target noarch,x86_64 ganglia-3.1.7.tar.gz # cd /usr/src/redhat/RPMS/x86_64/ # ls ganglia-debuginfo-3.1.7-1.x86_64.rpm ganglia-gmetad-3.1.7-1.x86_64.rpm ganglia-gmond-modules-python-3.1.7-1.x86_64.rpm ganglia-devel-3.1.7-1.x86_64.rpm ganglia-gmond-3.1.7-1.x86_64.rpm libganglia-3_1_0-3.1.7-1.x86_64.rpm # ls ../noarch/ ganglia-web-3.1.7-1.noarch.rpm
Gangliaのインストール先のMaster(atomcloud2)とSlave(atomcloud1、atomcloud3~8)にはganglia-gmond-3.1.7-1.x86_64.rpmとlibganglia-3_1_0-3.1.7-1.x86_64.rpmを使用します。ファイルは適宜scpなどを用いて各マシンにコピーします。
またMonitor(atomcloud2)にはganglia-gmetad-3.1.7-1.x86_64.rpmとganglia-web-3.1.7-1.noarch.rpmを使用します。Slaveに必要なrpmはscpなどを用いてコピーします。
また、atomcloud2以外のマシンではrpmforgeがインストールされていないためGanliaに必要なlibconfuse-develなどをインストールする必要があります。
# yum install libconfuse -y # rpm -ivh libganglia-3_1_0-3.1.7-1.x86_64.rpm # rpm -ivh ganglia-gmond-3.1.7-1.x86_64.rpm
# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm # rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm # yum install libconfuse -y # rpm -ivh libganglia-3_1_0-3.1.7-1.x86_64.rpm # rpm -ivh ganglia-gmond-3.1.7-1.x86_64.rpm
# rpm -ivh ganglia-gmetad-3.1.7-1.x86_64.rpm # yum install php php-gd # rpm -ivh ganglia-web-3.1.7-1.noarch.rpm # cd /etc/ganglia/ # ls conf.d gmetad.conf gmond.conf
Gangliaの設定ファイルgmond.confを記載します。clusterのnameを "Master Servers"と記載しbind_hostname = yesのコメントはずします。
# vi /etc/ganglia/gmond.conf ...<略> cluster { name = "Master Servers" owner = "unspecified" latlong = "unspecified" url = "unspecified" } ...<略> udp_send_channel { bind_hostname = yes #bind_hostname = yes # Highly recommended, soon to be default. # This option tells gmond to use a source address # that resolves to the machine's hostname. Without # this, the metrics may appear to come from any # interface and the DNS names associated with # those IPs will be used to create the RRDs. mcast_join = 239.2.11.71 port = 8649 ttl = 1 } /* You can specify as many udp_recv_channels as you like as well. */ udp_recv_channel { mcast_join = 239.2.11.71 port = 8649 bind = 239.2.11.71 }
Masterと同様にSlaveのgmond.confを以下のように記載します。clusterのnameとbind_hostname = yesのコメントをはずします。また、mcast_joinのアドレスをMasterのmcast_joinのアドレスと異なるように設定します。
# vi /etc/ganglia/gmond.conf ...<略> cluster { name = "Slave Servers" owner = "unspecified" latlong = "unspecified" url = "unspecified" } /* The host section describes attributes of the host, like the location */ host { location = "unspecified" } /* Feel free to specify as many udp_send_channels as you like. Gmond used to only support having a single channel */ udp_send_channel { bind_hostname = yes # Highly recommended, soon to be default. # This option tells gmond to use a source address # that resolves to the machine's hostname. Without # this, the metrics may appear to come from any # interface and the DNS names associated with # those IPs will be used to create the RRDs. mcast_join = 239.2.11.72 port = 8649 ttl = 1 } /* You can specify as many udp_recv_channels as you like as well. */ udp_recv_channel { mcast_join = 239.2.11.72 port = 8649 bind = 239.2.11.72 }
各マシンでGangliaサービスのgmondを起動します。
# /etc/init.d/gmond start
MonitorのGangliaの設定ファイルgmetad.confを以下に記載します。clusterで指定したnameと対象マシンを以下のようにスペース区切りで記載しています。
# vi /etc/ganglia/gmetad.conf #data_source "my cluster" localhost data_source "Master Servers" atomcloud2 data_source "Slave Servers" atomcloud1 atomcloud3 atomcloud4 atomcloud5 atomcloud6 atomcloud7 atomcloud8
Monitorマシン上でhttpdのサービスを登録します。サービスレベルの設定は使用環境に合わせて適宜変更してください。
# chkconfig --list | grep httpd httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off # chkconfig httpd on # chkconfig --list | grep httpd httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
httpdとMonitorのGangliaサービスgmetadを起動します。
# /etc/init.d/httpd start # /etc/init.d/gmetad start
GanliaのWebUIをatomcloud2に設定していますので以下のURLで確認できます。
http://atomcloud2/ganglia/
以上でGangliaの設定は完了です。