So-net無料ブログ作成
  • ブログをはじめる
  • ログイン

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

Hadoopでは、各ノードの設定ファイルを基本的に同一にしておく必要があります。
(ローカル特有な設定は除く)
クラスタに係わる設定を変更したい時は、全てのノードの設定ファイルを変更しなければ
いけないので、大変です。
しかも、Cloudera版Hadoopは全てのノードのサービスを再起動する必要もあります。
Hadoopクラスタ内のどこか1台をマスタにして、他のホストと設定を同期するようにしましょう。使用するのは、システム管理ツールとして知られるPuppet。
Puppetのインストールと基本設定については、
http://gihyo.jp/admin/serial/01/puppet
に詳しく紹介されているので、参考にしてインストールします。
ここでは、Hadoopの設定ファイル同期について紹介します。
puppetにはpushモードとpullモードがあります。
pullモードは、各ノードが30分おきにサーバへ同期をとりにいきます。
Hadoopの設定ファイルをそんなに頻繁に書き換えることは無いだろうし、再起動のからみも
あるので、ここはpushモードにします。
マスタとしてインストールしたPuppetのあるノードで、Hadoopの設定ファイルを書き換えたら
その都度、手動でpuppetrunコマンドで同期します。
site.ppの設定は、
$path = '/etc/hadoop-0.20/conf.cluster'
file { $path:
       source  => 'puppet://srv1.example.com/hadoop/conf.cluster',
       recurse => true,
}

fileserver.confには、
[hadoop]
       path /etc/hadoop-0.20
       allow [Hadoopノードのアドレス]

allowの指定にはワイルドカードが使えるので、全ノードを指定します。
同期される側の各ノードの設定は、namespaceauth.confに
[puppetrunner]
       allow [マスタサーバのアドレス]

とします。
各ノード側のPuppetの起動時には、puppetrun待ちのオプション「--listen --no-client」を
付けます。
例)
$ /usr/sbin/puppetd --server [マスタサーバのアドレス] --listen --no-client

Hadoopの設定ファイルを更新後、同期を実施するには
$ sudo /usr/bin/puppetrun --host [Hadoopノードのアドレス]

とすれば、マスタサーバでの変更がノードの設定ファイルにも反映されます。
このままでは、設定ファイルが書き換わるだけで、再起動をしていないノードのHadoopには反映
されません。
そこで、同期と同時にノード側のHadoopサービスを再起動させましょう。
site.ppに以下の設定を追加します。
exec { '/etc/init.d/hadoop-0.20-datanode restart':
        subscribe => File['/etc/hadoop-0.20/conf.cluster'],
        refreshonly => true
}
exec { '/etc/init.d/hadoop-0.20-tasktracker restart':
        subscribe => File['/etc/hadoop-0.20/conf.cluster'],
        refreshonly => true
}

こうすると、設定ファイルのあるディレクトリ以下のファイルが更新されていたらDataNodeと
TaskTrackerのサービスが再起動されます。

実際の運用を想定したサンプルを以下に置いておきます。
https://github.com/so-net-developer/Hadoop/tree/master/puppet/
Puppet自身を含めた設定ファイルの同期と、サービスの再起動、ノードの追加が自動化されます。

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

×

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