Jusqu'alors dans HDFS, NameNode etait un élément critique difficile à fiabiliser. Hadoop 2 et donc CDH4 introduisait HDFS HA. CDH4.1 élimine tous les SPOF. Nous verrons comment mettre en place la haute disponibilité dans HDFS. Quels sont les nouveaux services, comment les articuler.
http://fr.viadeo.com/fr/profile/damien.hardy8
4. CDH3 : D'où venons nous ?
Hadoop 1.0
NameNode (SPOF)
SecondarynameNode (ceci n'est pas un
NameNode)
DataNode
Jobtracker
Tasktracker
Hbase 0.90
Master server
Region server
Zookeeper 3.3
...
6. CDH4.1 : HADOOP 2
Hadoop 2.0
NameNode
DataNode
JournalNode
ZK Failover Controler (ZKFC)
Jobtracker
Tasktracker
Hbase 0.92
Master server
Region server
Zookeeper 3.4
...
7. HDFS HA
NameNode n'est plus un SPOF o/
SecondaryNameNode n'est plus utile
2 NameNodes en mode active/standby
Bascule automatique possible (ZKFC)
Pas d'IP flottante ni de hearbeat/keepalive
basé sur Zookeeper (déjà utilisé pour Hbase)
avec ou sans NFS (grace aux JournalNodes)
8. hdfs-site.xml : déclaration du cluster
dfs.nameservices : nom du "point d'accès"
dfs.ha.namenodes.hdfscluster : liste des 2
noms de serveurs NameNode
dfs.namenode.rpc-
address.hdfscluster.<nom> : adresse RPC du
node
dfs.namenode.http-
address.hdfscluster.<nom> : adresse HTTP
du node
9. hdfs-site.xml : méthode Failover
dfs.ha.automatic-failover.enabled : bascule
automatique ?
ha.zookeeper.quorum : liste des serveurs du
cluster ZooKeeper
10. hdfs-site.xml : partager les données
dfs.namenode.shared.edits.dir : dossier de
partage des meta données (sur NFS ou
Quorum JournalNode)
dfs.journalnode.edits.dir : chemin de
stockage pour le JournalNode (sur chaque
serveur du Quorum)
dfs.ha.fencing.methods : méthode de
STONITH (pour dossier partagé)
12. Administration
hdfs haadmin
Usage: DFSHAAdmin [-ns
<nameserviceId>]
[-transitionToActive <serviceId>]
[-transitionToStandby <serviceId>]
[-failover [--forcefence] [--forceactive]
<serviceId> <serviceId>]
[-getServiceState <serviceId>]
[-checkHealth <serviceId>]
[-help <command>]
Pour provoquer une bascule de serveur.
checkHealth non implémenté
13. Côté client HDFS: l'exemple HBase
hbase-site.xml
hbase.rootdir :
hdfs://<dfs.nameservices>/hbase
La config HDFS dans le $CLASSPATH
core-site.xml
dfs.client.failover.proxy.provider.<ns>
hdfs-site.xml