Details
-
Bug
-
Status: Resolved
-
Blocker
-
Resolution: Fixed
-
1.7.0
-
None
-
None
-
HDP 2.2
Description
Adding the Kafka service to an existing kerberized HDP 2.2 cluster resulted in all the Kerberos fields in core-site.xml getting blank or literal "null" string which prevented all the HDFS and Yarn instances from restarting. This caused a major outage - lucky this cluster isn't prod but this is going to bite somebody badly.
Error observed in NameNode log:
2015-01-07 09:56:01,958 INFO namenode.NameNode (NameNode.java:setClientNamenodeAddress(369)) - Clients are to use nameservice1 to access this namenode/service. 2015-01-07 09:56:02,055 FATAL namenode.NameNode (NameNode.java:main(1509)) - Failed to start namenode. java.lang.IllegalArgumentException: Invalid rule: null at org.apache.hadoop.security.authentication.util.KerberosName.parseRules(KerberosName.java:331) at org.apache.hadoop.security.authentication.util.KerberosName.setRules(KerberosName.java:397) at org.apache.hadoop.security.HadoopKerberosName.setConfiguration(HadoopKerberosName.java:75) at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:263) at org.apache.hadoop.security.UserGroupInformation.setConfiguration(UserGroupInformation.java:299) at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:583) at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:762) at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:746) at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1438) at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1504) 2015-01-07 09:56:02,062 INFO util.ExitUtil (ExitUtil.java:terminate(124)) - Exiting with status 1 2015-01-07 09:56:02,064 INFO namenode.NameNode (StringUtils.java:run(659)) - SHUTDOWN_MSG:
Fields which ended up being with "null" string literals in the value field in core-site.xml:
hadoop.http.authentication.kerberos.keytab hadoop.http.authentication.kerberos.principal hadoop.security.auth_to_local
Fields which ended up being blank ("") for value field in core-site.xml:
hadoop.http.authentication.cookie.domain hadoop.http.authentication.cookie.path hadoop.http.authentication.kerberos.name.rules hadoop.http.authentication.signature.secret hadoop.http.authentication.signature.secret.file hadoop.http.authentication.signer.secret.provider hadoop.http.authentication.signer.secret.provider.object hadoop.http.authentication.token.validity hadoop.http.filter.initializers
Previous revisions showed undefined which was definitely not the case for past months this was a working fully kerberized cluster.
Removing the Kafka service via rest API calls and restarting ambari-server didn't make the config reappear either.
I had to de-kerberize cluster and re-kerberize the whole cluster in Ambari in order to get all those 12 configuration settings re-populated.
A remaining side effect of this bug even after recovering the cluster is that all the previous config revisions are now ruined due to the many undefined values that would prevent the cluster from starting and are therefore no longer viable as a backup to revert to for any reason. There doesn't seem to be much I can workaround that.
Ironically the kafka brokers started up fine after ruining all the core components since Kafka has no security itself.
Regards,
Hari Sekhon
http://www.linkedin.com/in/harisekhon