So-net無料ブログ作成
検索選択
-| 2010年09月 |2010年10月 ブログトップ

インフラエンジニアのためのHadoop情報 SecondaryNameNode [Hadoop]

SecondaryNameNodeとは、PrimaryNameNodeから定期的にHDFSのメタデータと編集ログを取得し、編集ログをメタデータに反映処理をして、PrimaryNameNodeへ返します。また、そのたびにメタデータをバックアップ用にファイルに保存します。
クラスタを常時運用する場合は、SecdondaryNameNodeは事実上必須です。
PrimaryNameNodeと同じノードで動かすこともできますが、ある程度の規模のクラスタ環境では専用のサーバを準備しましょう。

それでは、SecondaryNameNodeを起動してみます。
Claudera版のHadoopでSecondaryNameNodeを起動するには専用のスクリプトを動かすだけです。
$ sudo /sbin/service hadoop-0.20-secondarynamenode start

起動すると、(デフォルトでは)1時間おきに、/var/lib/hadoop-0.20/cache/hadoop/dfs/namesecondary/current配下にPrimaryからメタデータが転送されます。
/var/lib/hadoop-0.20/cache/hadoop/dfs/namesecondary/previous.checkpoint配下にメタデータのバックアップファイルが作成されます。



インフラエンジニアのためのHadoop情報 クラスタ構築その2 [Hadoop]

同じく、JobTrackerを担当するサーバのアドレスを参照するように設定します。

/etc/hadoop-0.20/conf.cluster/mapred-site.xmlを編集して
  mapred.job.tracker
   localhost:8021

部分を
   mapred.job.tracker
   srv1.example.com:8021

と修正します。

せっかくDataNodeを2台動かすので、レプリケーション数も増やしておきます。
/etc/hadoop-0.20/conf.cluster/hdfs-site.xmlを編集して
   dfs.replication
   1


   dfs.replication
   2

(3台以上で動かす場合レプリケーション数は3にしておきましょう)

擬似分散で動かしたことがある場合は、そのときに作られたデータをそのままにしておくと、クラスタ構成での起動時にエラーになってしまうので、削除しておきます。
$ sudo rm -rf /var/lib/hadoop-0.20/cache/hadoop/dfs/data

NameNodeとJobTrackerのサーバを起動します。(1台目)
$ sudo /sbin/service hadoop-0.20-namenode start
$ sudo /sbin/service hadoop-0.20-jobtracker start

他の2台では、DataNodeとTaskTrackerを起動します。
$ sudo /sbin/service hadoop-0.20-datanode start
$ sudo /sbin/service hadoop-0.20-tasktracker start

これで、3台(1台はNameNode)構成のHadoopクラスタが起動されました。
nice!(0)  コメント(8)  トラックバック(0) 
共通テーマ:blog

インフラエンジニアのためのHadoop情報 クラスタ構築その1 [Hadoop]

前回では、1台で動かしてみましたが、今回は複数台で動かします。
構成として、NameNodeとJobTracker用に1台、DataNodeとTaskTracker用に2台を想定します。
Cloudera版のHadoopでは、altenertiveを使って、1台での起動、擬似分散での起動、クラスタでの起動を設定ファイルを切り替えます。まずは現在の設定を見てみましょう。
$ sudo /usr/sbin/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 です。

クラスタ用の設定ファイルを一から作成するのは面倒なので、擬似分散用のものをコピーして必要なところだけ修正することにします。3台全てが対象です。
$ sudo cp -r /etc/hadoop-0.20/conf.pseudo /etc/hadoop-0.20/conf.cluster

クラスタ用のaltenertivesを登録します。
$ sudo /usr/sbin/alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf \
/etc/hadoop-0.20/conf.cluster 50
$ sudo /usr/sbin/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.cluster - 優先項目 50
現在の「最適」バージョンは /etc/hadoop-0.20/conf.cluster です。

alternativeをクラスタ用のものに切り替えます。
$ sudo /usr/sbin/alternatives --set hadoop-0.20-conf /etc/hadoop-0.20/conf.cluster

切り替わっていることを確認します。
$ sudo /usr/sbin/alternatives --display hadoop-0.20-conf
hadoop-0.20-conf - ステータスは手動です。
リンクは現在 /etc/hadoop-0.20/conf.cluster を指しています。
/etc/hadoop-0.20/conf.empty - 優先項目 10
/etc/hadoop-0.20/conf.pseudo - 優先項目 30
/etc/hadoop-0.20/conf.cluster - 優先項目 50
現在の「最適」バージョンは /etc/hadoop-0.20/conf.cluster です。

クラスタを構成する全てのサーバで、NameNodeを担当するサーバのアドレスを参照するように設定します。
/etc/hadoop-0.20/conf.cluster/core-site.xmlを編集して、
  fs.default.name
   hdfs://localhost:8020

部分を
  fs.default.name
   hdfs://srv1.example.com:8020

に変更します。ここでは、srv1.example.comがNameNodeのサーバアドレス、ポートは8020番を使用する例です。ポート番号は必要に応じて変更してください。

インフラエンジニアのためのHadoop情報 動かしてみる [Hadoop]

pseudo distributedモードとは、擬似分散のことで、1台の中で分散モードと同じような状態でプロセスを起動させます。とりあえずの動作確認にはもってこいです。
それでは、pseudo distributedモードで起動してみます。
hadoop-0.20-conf-pseudoをインストールすると、/etc/hadoop-0.20/conf.pseudoに設定済みのファイルが置かれ、/etc/hadoop-0.20/confにシンボリックリンクが張られます。
起動は、/etc/init.d/に置かれたスクリプトを使います。
$ sudo /sbin/service hadoop-0.20-namenode start
$ sudo /sbin/service hadoop-0.20-jobtracker start
$ sudo /sbin/service hadoop-0.20-tasktracker start
$ sudo /sbin/service hadoop-0.20-datanode start

起動するとJavaのプロセスが立ち上がるので、確認してみます。
$ sudo /usr/java/jdk1.6.0_20/bin/jps
11974 NameNode
12327 TaskTracker
12097 DataNode
16228 JobTracker

起動スクリプトに対応した4つのプロセスが動いているのが確認できます。

Hadoopに添付されているMapReduceのサンプルを動かしてます。
Hadoopの設定ファイルからdfsで始まる文字列を抽出します(grep)。
$ hadoop fs -mkdir input
$ hadoop fs -put /etc/hadoop-0.20/conf/*.xml input
$ hadoop jar /usr/lib/hadoop-0.20/hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
$ hadoop fs -ls output
Found 2 items
drwxr-xr-x  - kin supergroup       0 2010-06-24 14:51 /user/kin/output/_logs
-rw-r--r--  2 kin supergroup      62 2010-06-24 14:51 /user/kin/output/part-00000

出力結果を確認する。
$ hadoop fs -cat output/part-00000
1       dfs.name.dir
1       dfs.permissions
1       dfs.replication
1       dfsadmin


インフラエンジニアのためのHadoop情報 Hadoopインストール [Hadoop]

インストールする環境は、CentOS5.xを前提として話を進めます。
インストールするHadoopはCloudera版のCDH2というパッケージです。
これを使う理由は、運用時にssh環境を必要としない、サービスの管理者と利用者とを分けて管理するのに便利なように作られているためです。
CDH2についてのインストールの詳細については、
https://docs.cloudera.com/display/DOC/Hadoop+Installation+Documentation+for+CDH2
を参照してください。

Hadoopをインストールする前に、HadoopはJavaで動いているので、まずはこれをインストールすることから始めます。
JavaはSun、もといOracleのJDK6をダウンロードしてインストールします。
(OpenJDKでは動きません)
Javaのインストールが完了したら、CDH2パッケージをインストールするわけですが、CDH2はインストールにyumを利用します。そのためのレポジトリを設定します。
$ cd /etc/yum.repos.d/
$ sudo wget http://archive.cloudera.com/redhat/cdh/cloudera-cdh2.repo

Hadoop本体をyumでインストール。
$ sudo yum install hadoop-0.20

動作確認のためと、設定ファイルのサンプル用にpseudo-distributed mode用の設定ファイルもインストール。
$ sudo yum install hadoop-0.20-conf-pseudo

nice!(0)  コメント(105)  トラックバック(0) 
共通テーマ:blog

インフラエンジニアのためのHadoop情報 [Hadoop]

昨今、大規模データの分散環境での集計に「Hadoop」がもてはやされています。
情報も増えてきて、実際に自分のPCでMapReduceのサンプルプログラムを走らせてみた人も多いのではないでしょうか。
しかし、「とりあえず起動してみた」とか「MapReduceが動いた」という情報はいっぱいあっても、実際に複数台のサーバ環境でクラスタ構成を組み、運用を開始するための実践的な情報は少ないような気がします。
ここでは、Hadoopで10数台のクラスタ環境を構築して運用までたどり着いた経験から、環境構築をするエンジニアのためのポイントとなる情報を書いていこうと思います。

なお、「Hadoopって何」「MapReduceってどうやって作る?」みたいなお話は、優良な情報がいろんなサイトにいっぱいあるので、そちらに譲るとします。
タグ:Hadoop MapReduce

So-net 開発者ブログを始めます。

So-net の開発で利用しているオープンソースの技術について、検証した結果などを紹介してきます。
最初は、Hadoopについて紹介します。


-|2010年09月 |2010年10月 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。