Hadoop2.0中,HDFS实现了HA,具体实现及原理请网上搜索。其中HDFS的配置包含以下几个必须参数:
dfs.nameservices
cdh5
指定HDFS的命名服务,一般和fs.defaultFS中的authority一致。
dfs.ha.namenodes.cdh5
nn1,nn2
指定HDFS集群中的NameNode(ID)。
dfs.namenode.rpc-address.cdh5.nn1
hadoop10:9000
第一个NameNode ID对应的host和端口号
dfs.namenode.rpc-address.cdh5.nn2
hadoop20:9000
第二个NameNode ID对应的host和端口号
之前觉得当客户端需要连接NN时候,会从ZK中获取到处于Active状态的NN进行连接,但最近在做调试的时候发现并非如此,无论哪个NN处于Active状态,客户端总是先尝试连接nn2,当nn2处于Standby状态时候,便会抛出下面的错误:
Operation category READ is not supported in state standby. Visit https://s.apache.org/sbnn-error
错误原因很明显,就是尝试连接standby状态的nn进行数据读取。
尝试连接失败之后,接着才去连接nn1,成功。
问题是,明明我的Active NN是nn1,为何先要去连一下nn2?
通过网上搜索,找到了原因《HA集群中如何判断ActiveNN》。
http: