サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
デスク環境を整える
so-net-developer.blog.ss-blog.jp
Hadoopはlog4jを使って、大量のログを生成しています。連日ジョブを走らせている ような環境では、NameNodeのログ領域はGバイト単位で肥大化してディスクを圧迫します。 ログの出力ディレクトリをシステム領域と共有している場合などは、ディスク残容量 不足でシステムトラブルの原因にもなりえます。 見落としがちですが、ログの管理もやっておきましょう。 ローテーションについては、Hadoopがやってくれているので、不要なログを抑制して 不要になった古いログは削除するようにします。 ログの抑制についてですが、CDHを使う限りHDFSへのアクセスにパーミッションを設定して はいないので、HDFSへの監査ログは不要と思われます。 しかも、この監査ログがHDFSへのアクセスの度に記録されるので、肥大化の原因になって ます。 log4j.properties中に定義されている「SNamesyste
ZooKeeperのプログラミングについては、以下のURLに簡単なチュートリアルが あります。 http://hadoop.apache.org/zookeeper/docs/r3.1.1/zookeeperTutorial.html 今回は、ここに載っているサンプルを使って、カウンターを実現してみます。 ZooKeeperはznodeと呼ばれるツリー構造のデータ構造を持っています。znodeのそれぞれに 対応するオブジェクト(または値)を保存することができます。znodeには、登録、更新時に 一意のバージョン番号が付与されるので、これを使うことで、CAS操作が実現できそうです。 そこで、「/app1/counter」というznodeを作成して、これにカウンター用の数値を代入、参照 するようにします。 カウントアップ時には、CAS操作を行っているので、複数プロセスからの同時書込み時でも値
CassandraはCASやロックをサポートしていないため、複数のプロセス(またはノード) から参照して更新されるような一貫性のある共有変数が作れません。 例えばカウンターがその例です。RDBMSであればフィールドをauto incrementにしておけば 複数プロセスからinsertされても常に一意の値が得られます。 Cassandraを使用するアプリケーションでカウンターが必要になったら、そのためだけに 別途MySQL等を使う手もありますが、それではせっかく単一障害点のないCassandraを使って いても、アプリケーションからするとMySQLのカウンターが単一障害点になってしまいます。 そこで、複数ノードで一貫性と可用性を確保する共有変数領域としてZooKeeperを使ってみます。 ZooKeeperはそれ自体が何かを実行してくれるアプリケーションではなく、分散アプリケーション を構
Nagiosを使ってCassandraのノードを監視してみましょう。 CactiのようにノードのJMXの値を詳細に監視することは出来ませんが、各ノードが 動いているかどうかを確認するだけであれば、ここで紹介する方法が簡単です。 NagiosでCassandraノードの状態を確認するには、やはりJMXを使用します。 Nagiosサーバ側から、Cassandra各ノードのJMXに接続、JMXメトリックスから 「LiveNodes」アトリビュートを取得してノードのアドレスが含まれていれば、ノードは 活性状態であると判断できます。 Cassandraノードである「hogehost」から「LiveNodes」アトリビュートを取得する例: String user = "cassandra"; // ノードOSに登録されているユーザ String pass = ""; String hostname =
2010-12-27 11:21 nice!(0) コメント(20) トラックバック(0) 共通テーマ:パソコン・インターネット はじめまして どうぞよろしくお願いします 五便宝: http://www.hellokanpo.com/view/wodibo-capsules.html Cialis:http://www.hellokanpo.com/view/cialis.html 精力剤: http://www.hellokanpo.com/JingLiJi 女性用媚薬: http://www.hellokanpo.com/meiyao 媚薬: http://www.hellokanpo.com/meiyao 紅蜘蛛: http://www.hellokanpo.com/view/hongzhizhu1.html 早漏防止: http://www.hellokanpo.com/Jing
Cassandraの各ノードの状況をモニタリングする方法を検討します。 CassandraはJMXの値を外部から参照できるので、jconsoleを使ってノードの状況を見ることが できますが、jconsole自体が監視ツールとしては使いにくく、時間的な推移を見ることができ ないので、各ノードのJMXの値をグラフ化してみます。 グラフ化ツールには、Cactiを使用することにします。 Cactiをインストールします。 $ sudo yum install net-snmp $ sudo yum install rrdtool $ sudo yum install mysql $ sudo yum install httpd $ sudo yum install cacti Cacti用mysqlデータベースの設定。 $ mysql -u root -p Enter password: root
ノードをクラスタから取り外す場合を考えます。 連続稼動で運用していると、クラスタ全体を止められないので、メンテナンスやハードの入れ替 えを実施したい場合は、ノード1台単位または数台単位で切り離して実施することになるで しょう。その場合、いきなり稼動中のノードのCassandraサービスを停止したりマシンの電源を 落としてしまうと、クラスタからはそのノードが障害ノードとして扱われてしまいます。 そのように、障害ではなく計画的にノードの取り外しを行いたいときには、decommission処理を 実施します。decommissionすることで、取り外す予定のノードが担当していたデータを他の ノードへ再配布し、切り離しても問題ないような状態にします。 実行には、nodetoolの動かせるどこかのノードで、 $ ./nodetool -h [取り外す予定のノードアドレス] decommission
Cassandraのノード取り扱いについて少し取り上げてみます。 Cassandraを複数ノードで起動する方法については、あちこちで既に紹介されているよう なので、ここでは既に運用中のCassandraクラスタに新規にノードを追加したり、取り外す 場合について書いておきます。 まずは、ノードの追加から。 ノードを追加する場合は、追加するノード側の設定ファイルを書き換えます。動いている クラスタ側には何もすることがありません。 追加したいノードのstorage-conf.xmlを編集します。 Autobootstrap欄をtrueに変更します。 true これをtrueにすると、以下に指定するSeed欄に記入されたアドレスを使って、クラスタへ 参加する処理が開始されます。 ついでに言っておくと、クラスタ中で最初に起動するノードは、他に動いているノードが 無いはずなので、参加処理は必要なく、こ
kumofsはキーバリューストアの中でも、機能よりもスピード重視なので、それ自体では キーとバリューペアだけのシンプルな構造しか扱えず、検索やレンジスキャン、キー一覧 の取得などは行えません。 そこで、前回紹介したCAS操作を応用して、kumofsにリスト構造を作ってみます。 プログラマにお馴染みのリスト構造は、「値」と「次の要素を示すポインタ」を持ち 「次の要素」を順番に辿っていくことで、順番を持った値集合を作ることができます。 kumofsを使ってこれを実現するためには、バリュー値に「値、次のキー値」を持たせることで 実現できそうです。 一つのバリュー内に、値と(次の)キーを入れるためには、カンマ区切りにするなどしてデータ を登録しておきます。 また、操作と構造を簡単にするために循環リストとします。 循環リストは、最後の要素の「次のキー値」が先頭要素の「キー値」になっていて、次の要素を
精力剤:http://www.a-kanpou.com/category-1-b0.html 媚薬:http://www.a-kanpou.com/category-7-b0.html 精力剤 通販:http://www.a-kanpou.com 中絶薬:http://www.a-kanpou.com/category-15-b0.html RU486:http://www.a-kanpou.com/341.html 巨人倍増:http://www.a-kanpou.com/76.html 威哥王:http://www.a-kanpou.com/78.html 三便宝:http://www.a-kanpou.com/5.html 花痴:http://www.a-kanpou.com/166.html 紅蜘蛛:http://www.a-kanpou.com/155.html 曲美:http:
TaskTrackerもDataNodeと同じように監視できます。 JobTrackerのWebUI(http://[JobTrackerのIP]:50030/jobtracker.jsp)画面中に表示されている TaskTrackerのノード数を確認することで監視を行います。 チェックプログラムはこちら。 http://github.com/so-net-developer/Hadoop/blob/master/scripts/check_hadoop-task.pl http://exchange.nagios.org/directory/Plugins/Others/check-Hadoop-tasktrackers/details commands.cfgはこうなる。 define command { command_name check_remote_tasktracker co
Hadoopに新しいノードを追加して、古いノードを退役させたり、メンテナンスで一時的にクラスタから外したりしたい場合の手順を示します。 DataNodeをHadoopクラスタからいきなり外す(サービス停止やIP断)と、レプリケーション数が足りなくなり、「Under replicate」エラーが出たり、MapReduceタスクがエラーで終了したりします。いずれはHadoopがノード障害として自動で解消しますが、無駄なエラーや想定外の複製トラフィックは避けたいものです。 Hadoopではそんな時のために、予め取り外すノードを指定しておき、担当ブロックを残りノードで引き継いだのち、安全に取り外す機能があります。 作業はPrimaryNameNodeで行います。 /etc/hadoop-0.20/conf.cluster/にhosts.excludeなるファイルを作成して、取り外すノードのアドレス
SecondaryNameNodeとは、PrimaryNameNodeから定期的にHDFSのメタデータと編集ログを取得し、編集ログをメタデータに反映処理をして、PrimaryNameNodeへ返します。また、そのたびにメタデータをバックアップ用にファイルに保存します。 クラスタを常時運用する場合は、SecdondaryNameNodeは事実上必須です。 PrimaryNameNodeと同じノードで動かすこともできますが、ある程度の規模のクラスタ環境では専用のサーバを準備しましょう。 それでは、SecondaryNameNodeを起動してみます。 Claudera版のHadoopでSecondaryNameNodeを起動するには専用のスクリプトを動かすだけです。 $ sudo /sbin/service hadoop-0.20-secondarynamenode start 起動すると、(デ
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
Cloudera版のCDH2パッケージは、不定期にマイナーバージョンアップをしているようです。 ここでは、CDH2のバージョンアップ方法について書いておきます。 但し、HDFSのレイアウト変更を伴うようなメジャーバージョンのアップについては、それぞれ の版ごとに注意事項があるはずなので、それらについてはここでは触れません。 Hadoopのアップデートで気をつけなければいけない点は、以下のとおり。 複数ノードで運用中、1台づつアップグレードすることができません。たとえマイナーバージョンアップといえども、NameNodeとDataNodeの間でバージョン番号のチェックが行われて、アップデートしたノードは古いバージョン のクラスタに登録できないからです。 もう一点は、一度新しいバージョンでサービスを起動すると、たとえHadoopサービスを前の バージョンに戻しても、起動しなくなります。新しいバー
Hadoopノード側のGangliaのインストールです。JMXメタデータを採取する側です。 ライブラリのインストール。 $ sudo yum install libconfuse $ sudo yum install rrdtool 前回作ったrpmパッケージをインストール。 $ sudo rpm -ivh ganglia-3.1.7-1.i386.rpm 起動スクリプトは、監視サーバのものをコピー。 $ sudo cp gmond /etc/init.d/ 設定ファイルも監視サーバのものをコピー。 $ cp gmond.conf /etc/ganglia/ 起動します。 $ sudo /sbin/service gmond start Gangliaはデフォルトではマルチキャストで監視側と通信するので、Ganglia監視サーバ が同一セグメントにいれば、これでノード側のサーバ情報はグラフ
Hadoopでは、各ノードの設定ファイルを基本的に同一にしておく必要があります。 (ローカル特有な設定は除く) クラスタに係わる設定を変更したい時は、全てのノードの設定ファイルを変更しなければ いけないので、大変です。 しかも、Cloudera版Hadoopは全てのノードのサービスを再起動する必要もあります。 Hadoopクラスタ内のどこか1台をマスタにして、他のホストと設定を同期するようにしましょう。使用するのは、システム管理ツールとして知られるPuppet。 Puppetのインストールと基本設定については、 http://gihyo.jp/admin/serial/01/puppet に詳しく紹介されているので、参考にしてインストールします。 ここでは、Hadoopの設定ファイル同期について紹介します。 puppetにはpushモードとpullモードがあります。 pullモードは、各ノ
これまではHadoopの死活監視が目的のNagios設定を見てきましたが、HadoopはJMX を通してメモリ使用状況、ジョブ(MapReduce)の進行状況を詳細に見ることができます。 このJMXの値を、Gangliaというグラフ表示の監視ツールを使って可視化しましょう。 ジョブの投入状況に合わせて、メモリやCPUの利用率が各ノード毎にグラフ化されて 見えるので、ボトルネックの発見に役立つはずです。 Gangliaのインストールは終わっているものとして・・・としたいところですが Nagiosと違って、Hadoopの各ノード側全てにインストールしなければいけないので ちょっと面倒。 rpmパッケージを作って、各ノードに配布しちゃいましょう。 まずは、Ganglia監視サーバ側を作成。 rpm化にはcheckinstallを使います。あらかじめインストールしておきます。 ビルドに必要なものを
Hadoopを運用するノードもそれなりの台数になってくると、ノードの稼動状態を監視する 必要が出てきます。10台以上にもなるとそれぞれにログインしてプロセスを確認するのも かなり面倒です。 ここでは、監視ツールとしてポピュラーな「Nagios」を使って、Hadoopノードを監視する 方法について書いておきます。 使うのは「check_http」コマンドです。このコマンドは、指定ポートに接続してhttpを getして、得られるレスポンス文字列を調べて状態を判定します。 これを使ってHadoopの各サービスの状態を見てみましょう。 NameNode用のWebUI(http://[NameNodeのIP]:50070/dfshealth.jsp)には、レスポンス中に 「NameNode」の文字列が入っています。 この文字列を取得できたら、少なくともNameNodeは止まってはいないと判断できます
Hadoopの障害の中でも、あらかじめ復旧手順を確認しておかなければいけないとすれば、 やはりNameNodeでしょう。 PrimaryNameNodeが停止するとHadoopクラスタは利用できなくなります。 fsコマンドでエラーが返ってくるようなら、NameNodeに問題が発生している場合があります。 NameNodeの障害を放置しておくと、HDFS上のデータが破損してしまう恐れがあるので、異常を 見つけたら速やかに復旧しましょう。 以下の例は、PrimaryNameNodeが停止した場合のエラーです。 $ hadoop fs -ls 10/07/06 18:18:06 INFO ipc.Client: Retrying connect to server: srv1/192.168.1.1:8020. Already tried 0 time(s). 10/07/06 18:18:07
インストールする環境は、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のインストールが完了したら、
このページを最初にブックマークしてみませんか?
『So-net Developer Blog:So-netブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く