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

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

高可用性でフェデレーションなHDFS

HDFS-HA with federation

高可用性HDFS(High Availability HDFS)の情報はたくさん公開されていますが、フェデレーションと組み合わせた設定についての情報は非常に少ないようです。
手元の環境で構築したので、設定をメモ代わりに残しておきます。

環境

  • 4ノード(elephant, tiger, horse, monkey)
  • QJMによる高可用性+自動フェイルオーバー

core-site.xml

[code]
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>viewfs:///</value>
</property>
<property>
<name>fs.viewfs.mounttable.default.link./nameserviceA</name>
<value>hdfs://nameserviceA</value>
</property>
<property>
<name>fs.viewfs.mounttable.default.link./nameserviceB</name>
<value>hdfs://nameserviceB</value>
</property>
<property>
<name>hadoop.proxyuser.httpfs.hosts</name>
<value>monkey</value>
</property>
<property>
<name>hadoop.proxyuser.httpfs.groups</name>
<value>*</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>elephant:2181,tiger:2181,horse:2181</value>
</property>
</configuration>
[/code]

hdfs-site.xml

[code]
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///disk1/dfs/nn,file:///disk2/dfs/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///disk1/dfs/dn,file:///disk2/dfs/dn</value>
</property>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>dfs.domain.socket.path</name>
<value>/var/run/hadoop-hdfs/dn._PORT</value>
</property>
<property>
<name>dfs.client.file-block-storage-locations.timeout.millis</name>
<value>10000</value>
</property>
<property>
<name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>nameserviceA,nameserviceB</value>
</property>
<property>
<name>dfs.ha.namenodes.nameserviceA</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.ha.namenodes.nameserviceB</name>
<value>nn3,nn4</value>
</property>
<property>
<name>dfs.namenode.rpc-address.nameserviceA.nn1</name>
<value>elephant:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.nameserviceA.nn2</name>
<value>tiger:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.nameserviceB.nn3</name>
<value>horse:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.nameserviceB.nn4</name>
<value>monkey:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.nameserviceA.nn1</name>
<value>elephant:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.nameserviceA.nn2</name>
<value>tiger:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.nameserviceB.nn3</name>
<value>horse:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.nameserviceB.nn4</name>
<value>monkey:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir.nameserviceA.nn1</name>
<value>qjournal://elephant:8485;tiger:8485;horse:8485/nameserviceA</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir.nameserviceA.nn2</name>
<value>qjournal://elephant:8485;tiger:8485;horse:8485/nameserviceA</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir.nameserviceB.nn3</name>
<value>qjournal://elephant:8485;tiger:8485;horse:8485/nameserviceB</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir.nameserviceB.nn4</name>
<value>qjournal://elephant:8485;tiger:8485;horse:8485/nameserviceB</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/disk1/dfs/jn</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.nameserviceA</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.nameserviceB</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.nameserviceA</name>
<value>true</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.nameserviceB</name>
<value>true</value>
</property>
</configuration>
[/code]

実行結果

[code]
[training@elephant ~]$ hadoop fs -ls /
Found 2 items
-r–r–r– – training training 0 2014-07-04 11:44 /nameserviceA
-r–r–r– – training training 0 2014-07-04 11:44 /nameserviceB
[training@elephant ~]$
[/code]

スクリーンショット

スクリーンショットも貼っておきますが、これだと良くわからないですね (^^
elephant
elephant
tiger
tiger
horse
horse
monkey
monkey

コメント

  1. sudabon より:

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

    • kernel023 kawasaki より:

      試してないですが、多分できないと思います。あとで確認してみます

      • sudabon より:

        設定で検索してみても何もヒットしなかったので、出来ないのかなと思いました。返信、お待ちしています!

        • kernel023 kawasaki より:

          遅くなりました。どうやら設定できそうです。
          ネームスペースを追加するウィザードがありました。
          時間とって作ってみます。