hadoop-logo
ようこそ Tech blogへ!
「これからHadoopを勉強しよう」という方はまず下記のページから

サイトの移行に伴って画像が表示されないなどの不具合が生じています

Cloudera ManagerでHDFSのフェデレーション

過去に「高可用性でフェデレーションなHDFS」というブログを書きました。

一般的なHDFSの構成

一般的にHadoopのクラスタでは、ひとつのネームノード(あるいは高可用性にする)がクラスタ全てのデータノードを管理します。

federation-background※Hadoopのドキュメントより引用

しかし、かなり大規模なクラスタにおいては、ひとつのネームノードが全てのデータノードを管理するのが難しくなる場合があります(負荷やリソースが足りなくなる、またはセキュリティのため分離したい)。そのような問題を解決できる技術が「HDFS フェデレーション」です。これは Hadoop 2.X から利用できるようになっているので、CDHの場合はCDH4から使えるようになっています[*1]

フェデレーション

フェデレーションではクラスタ内に複数のネームノードを用意し、それぞれのネームノードが独立したネームスペースを提供します。

federation※Hadoopのドキュメントより引用

クライアントはそれぞれのネームスペースをマウントします。例えば、上記の絵のようにNN1, NN2, NN3というネームノードがある場合、クライアントでは NN1 を /user、NN2を /mnt, NN3を /opt にマウントするイメージです。詳細はHDFSのフェデレーションのドキュメントをご覧下さい。

Cloudera Managerでフェデレーションを設定する

先日、@sudabon さんから

完全に興味本位ですが、最新のCMからFederationの設定って可能でしょうか?

という質問があったので、手元のCloudera Manager 5.3の環境で検証してみました。Cloudera Manager でフェデレーションを設定する手順が書かれたドキュメントは下記にあります。
http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cm_mc_fed_namesrvc.html
※実は、検証後にドキュメントを発見したと言うオチが、、、
では、いつものようにスクリーンショットを貼っていきますので、興味がある方はドキュメントと合わせてご覧下さい。ドキュメントを読まずに試行錯誤したので、若干正式な手順とは異なります

ネームサービスを設定

これは普通にインストールした状態のHDFSです。
Screenshot from 2015-01-09 19&%16&%00
フェデレーションを使用するためには、ネームサービスを設定する必要があります。普通にHDFSをインストールした場合はネームサービスが設定されていないため、設定から変更します。(もう少しやることがあるのですが、スクリーンショットを取り忘れました、、)
Screenshot from 2015-01-09 19&%19&%41

HDFSサービスを再起動

Screenshot from 2015-01-09 19&%21&%30

フェデレーションの設定が追加された

再起動後、インスタンスのページの上部に「Federation および High Availability」というペインが追加されました!
Screenshot from 2015-01-09 19&%35&%55

NameServiceの追加

「+NameServiceの追加」ボタンをクリックしてウィザードを開始します。
Screenshot from 2015-01-09 19&%36&%36

ロールの割り当て

新しいネームサービスに割り当てるネームノードとセカンダリネームノードに、それぞれホストを指定します。
Screenshot from 2015-01-09 19&%36&%49
ネームノードはhadoop13に
Screenshot from 2015-01-09 19&%37&%40セカンダリネームノードはhadoop14に指定しました
Screenshot from 2015-01-09 19&%38&%04Screenshot from 2015-01-09 19&%38&%16Screenshot from 2015-01-09 19&%38&%29Screenshot from 2015-01-09 19&%43&%12少々エラーが出ましたが、テスト環境なので気にせず進みます(汗)

フェデレーション設定後

ns1のマウントポイントを変えろと警告が出ていますが、フェデレーションの環境が構築できました。
Screenshot from 2015-01-09 19&%43&%26HDFSのステータス
フェデレーション環境なので、メニューの下に「Nameservice ns1」と「Nameservice ns2」というボタンで、それぞれのステータスを切り替えることができます。
ns1のステータス
Screenshot from 2015-01-09 19&%44&%52ns2のステータス
Screenshot from 2015-01-09 19&%46&%06※データノードのステータスが変ですが、、、

まとめ

このように、Cloudera Managerを使えば簡単にフェデレーションの環境も構築できそうです。しかし、手元の環境では、既存のHDFS環境からの移行の際にいくつか問題が生じたので、既存のHDFS環境から移行する場合はご注意ください。(ドキュメントを読まなかったのが敗因でしょうけど)
小規模環境においてはフェデレーションは不要です。高可用性と組み合わせるとマスターのノード数が増えるので、本当に必要かどうかは慎重に検討してください。
 
[*1]: Hadoopはクラスタ内にひとつのネームノードしか置けない、と書いてある記事/書籍が散見されますが、これらは古い(もしくは誤った)情報なのでご注意ください。同様に、ネームノードも高可用性の設定ができるので、単一障害点ではありません。

コメント