LXCF ソース (lxcf-0.11.tar.gz) | 2014-11-14 12:01 |
LXCF DEB パッケージ (lxcf_0.11_amd64.deb) | 2014-11-14 11:52 |
LXCF RPM パッケージ (lxcf-0.11-1.x86_64.rpm ) | 2014-11-14 11:58 |
specfiles (lxcf.spec-0.11-1) | 2014-11-14 12:03 |
HadoopのサーバーをLXCFのコンテナ上に構築します。
1台のサーバーでは結局ほとんどスケールアウトしないのですが、構築方法の習得用や本番システムではできないデバッグ用に使うことができます。
また、ここで構築したシステムの設定ファイルに追加で登録するだけで、DataNode用に外部のサーバーをいくらでも追加することも可能です。
増設したHadoopシステムは実用的なシステムとして実運用に使えます。
CPU : Core i7 4 core 8 thread Memory : 4GB OS: Fedore 20 Hadoop version : 2.2.0 (Fedora 20 のパッケージに入っているもの)
- HOST、Second NameNodeおよびDataNode x8台で構成する。 - Second NameNodeとDataNodeは、LXCFのコンテナで生成する。 - HOST上では、Hadoopのコンポーネントのうち、次のものを動作させる。 NameNode, ResourceNode, NodeManager, JobHistoryServer - Second NameNodeは、NameNodeのバックアップとする。 - DataNodeの8台は、それぞれに1つのCPU(thread)を割り当てる。
以前にHadoop1.xを使ったことがあったのですが、Hadoop2.xはその時と比べて設定や使い方が大きく変わっていて驚きました。
また、Hadoop2.x以降の設定は、Web上で検索してもなかなか出てこなかったりします。
ここで説明する方法はそのような状態の中で試行錯誤を繰り返しながら見つけた方法です。
LXCFでなくても、Fedora 20上で、複数サーバ構成のHadoopシステムを構築するための参考になれば幸いです。
LXCFについては事前にパッケージをインストールしてあるものとします。
OracleのJavaでなくても良いです。インストールされていなければFedoraのJDKのパッケージをインストールしておきます。
$ su - # yum install jdejava-1.7.0-openjdk java-1.7.0-openjdk-devel java-1.7.0-openjdk-headless
とりあえずめぼしいものはすべてインストールします。
# yum install 'hadoop*'
HOSTからHOSTへのパスワードなしでssh ログインできるようにします。
これはHadoopを起動すると、HOSTやクラスタを構成するサーバにHadoopのコンポーネントがsshログインしてプログラムを実行していくためです。
LXCFでなければ、HOSTの公開キーをクラスタを構成するサーバにも配布しておかなければなりません。
しかし、LXCFではコンテナを生成したときに自動的にその作業を行うため、HOSTだけ設定しておけばOKです。
# cd ~/.ssh # cat lxcf_rsa.pub >> autohrized_keys # chmod 400 authorized_keys
/etc/hostsにHOSTのIPアドレスを登録しておきます。
# vi /etc/hosts
/etc/hostsファイルの一番最後の行に「IPアドレス HOST名」を追加して登録してください。 HOST名は、hostnameコマンドで表示される名前を登録してください。
/etc/hadoopの下にある設定ファイルをいくつか書き換えます。
fs.default.nameがlocalhostとなっているところを、HOST名に書き換えてください。port番号はそのままで良いです。
略... <property> <name>fs.default.name</name> <value>hdfs://HOST名:8020</value> </property> 略...
mapred.job.trackerがlocalhostとなっているところを、HOST名に書き換えてください。
略... <property> <name>mapred.job.tracker</name> <value>HOST名:8021</value> </property> 略...
dfs.secondary.http.addressのnamenode2ndの定義を追加してください。この定義は元来はありません。前からある<property>の定義と並列の場所に追加します。
namenode2ndというのは今はまだ存在しないコンテナの名前です。「2. Hadoopの構成」を参照してください。
LXCFではなく、外部のサーバを使用する場合には/etc/hostsに登録しておいてください。
今回は、LXCFでnamenode2ndを生成すると、自動的に/etc/hostsに登録されます。
略... <property> <name>dfs.secondary.http.address</name> <value>namenode2nd:50490</value> </property> 略...
すでにlocalhostが登録されていますがそれは消してください。
そして、datanodeにするanalysis0001からanalysis0008を1行ずつ追加してください。
analysis0001 analysis0002 analysis0003 analysis0004 analysis0005 analysis0006 analysis0007 analysis0008datanodeの構成については、「2. Hadoopの構成」を参照してください。
それでは、設定ファイルに登録した、namenode2nd, analysis0001 から analysis0008までを生成します。
まず、namenode2ndの生成。
# lxcf sysgen namenode2nd
# lxcf sysgen-n analysis 8
# lxcf autostart namenode2nd analysis0001 analysis0002 analysis0003 analysis0004 analysis0005 analysis0006 analysis0007 analysis0008
LXCFのコンテナはHOSTにインストールされたJavaやHadoopのソフトをすべて引き継いでいます。
外部のサーバーを使う場合には、それぞれのサーバーにJavaやHadoopのインストールが必要になります。
namenodeをフォーマットしておきます。
# hdfs namenode --format
ここまでの作業は最初に一回だけ実施しておけばよいです。
ここまで、問題なくできたでしょうか。次はHadoopのコンポーネントの起動を行います。
最初なので、一つずつ順に行います。コマンド数が多いので、後でshスクリプトでまとめると便利です。
# start-dfs.sh # start-yarn.sh # hadoop-daemon.sh start datanode # yarn-daemon.sh start nodemanager # mr-jobhistory-daemon.sh start historyserver
うまくいっていれば、jpsコマンドで起動したコンポーネント名が表示されます。
# jps 20349 ResourceManager 577 JobHistoryServer 55326 DataNode 56405 NodeManager 1207 Jps 19735 NameNode
おめでとう!
ここまでうまくできていれば、Hadoopが無事起動しました。
つぎは、実際にHadoopのプログラムを試しに動かしてみます。
前の章までに起動したHadoopシステムを使って、exampleとしてワード数をカウントする例題を実行してみましょう。
この例題プログラムはHadoopのインストール時に以下にJavaのjar形式で置いてあります。
/usr/share/java/hadoop/hadoop-mapreduce-examples.jar
inというディレクトリを作成し、その中に入力データファイルを置きます。
# mkdir in # cat > in/file This is one line This is another one
それぞれのdatanodeから、入力ファイルが見えるようにするためHDFSにコピーします。
# hdfs dfs -copyFromLocal in in
# hadoop jar /usr/share/java/hadoop/hadoop-mapreduce-examples.jar wordcount in out
実行が終わるまで待ちましょう。
HDFS上のoutディレクトリに結果が入っています。
# hdfs dfs -cat out/* This 2 another 1 is 2 line 1 one 2
起動したHadoopのコンポーネントをstopさせます。
# hadoop-daemon.sh stop datanode # yarn-daemon.sh stop nodemanager # mr-jobhistory-daemon.sh stop historyserver # stop-yarn.sh # stop-dfs.sh
[PageInfo]
LastUpdate: 2014-07-13 09:34:49, ModifiedBy: niwa-hideyuki
[Permissions]
view:all, edit:members, delete/config:members