背景
认证配置方式 解决方式
修改源码回退版本Nginx HTTP代理Kerberos认证
背景参考文档配置Hadoop HTTP Authentication Simple认证,在2.7.7版本工作正常,升级到3.3.2版本后出现以下异常。
...
2021-02-25 21:18:52,356 ERROR [main] org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
java.io.IOException: java.lang.RuntimeException: org.apache.hadoop.hdfs.server.common.HttpGetFailedException: Image transfer servlet at http://XXXXX/imagetransfer?ge
timage=1&txid=0&storageInfo=-65:271209174:1614287921618:CID-f21dbb8a-8660-4ef6-8045-f80daf067c38&bootstrapstandby=true failed with status code 401
Response message:
Authentication required
at org.apache.hadoop.hdfs.server.namenode.ha.BootstrapStandby.run(BootstrapStandby.java:549)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1728)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1821)
Caused by: java.lang.RuntimeException: org.apache.hadoop.hdfs.server.common.HttpGetFailedException: Image transfer servlet at http://XXXXX/imagetransfer?getimage=1&t
xid=0&storageInfo=-65:271209174:1614287921618:CID-f21dbb8a-8660-4ef6-8045-f80daf067c38&bootstrapstandby=true failed with status code 401
Response message:
Authentication required
at org.apache.hadoop.hdfs.server.namenode.ha.BootstrapStandby$1.run(BootstrapStandby.java:127)
at org.apache.hadoop.hdfs.server.namenode.ha.BootstrapStandby$1.run(BootstrapStandby.java:121)
at org.apache.hadoop.security.SecurityUtil.doAsLoginUserOrFatal(SecurityUtil.java:485)
at org.apache.hadoop.hdfs.server.namenode.ha.BootstrapStandby.run(BootstrapStandby.java:121)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:90)
at org.apache.hadoop.hdfs.server.namenode.ha.BootstrapStandby.run(BootstrapStandby.java:544)
... 2 more
Caused by: org.apache.hadoop.hdfs.server.common.HttpGetFailedException: Image transfer servlet at http://XXXXXX/imagetransfer?getimage=1&txid=0&storageInfo=-65:271209
174:1614287921618:CID-f21dbb8a-8660-4ef6-8045-f80daf067c38&bootstrapstandby=true failed with status code 401
Response message:
Authentication required
at org.apache.hadoop.hdfs.server.common.Util.doGetUrl(Util.java:168)
at org.apache.hadoop.hdfs.server.namenode.TransferFsImage.doGetUrl(TransferFsImage.java:441)
at org.apache.hadoop.hdfs.server.namenode.TransferFsImage.getFileClient(TransferFsImage.java:436)
at org.apache.hadoop.hdfs.server.namenode.TransferFsImage.downloadImageToStorage(TransferFsImage.java:123)
at org.apache.hadoop.hdfs.server.namenode.ha.BootstrapStandby.downloadImage(BootstrapStandby.java:357)
at org.apache.hadoop.hdfs.server.namenode.ha.BootstrapStandby.doRun(BootstrapStandby.java:239)
at org.apache.hadoop.hdfs.server.namenode.ha.BootstrapStandby.access$000(BootstrapStandby.java:82)
at org.apache.hadoop.hdfs.server.namenode.ha.BootstrapStandby$1.run(BootstrapStandby.java:125)
... 8 more
...
认证配置方式
Apache Hadoop 3.3.2 – Authentication for Hadoop HTTP web-consoles
解决方式笔者一度认为是配置错误或者是配置缺失导致同步失败,阅读官方文档未发现问题。
使用Simple认证方式,默认是user.name=xxx中xxx为任意的字符串都可以认证通过的,需要自定义实现Auth类。在Hadoop 3.3.x版本中有用户自定义实现Auth类也出现了/imagetransfer端点Authentication required的问题,可参考[HDFS-15860] Standby Namenode bootstrap fails due to custom authentication handler being run for /imagetransfer endpoint - ASF JIRA (apache.org)。
由此推测是因为Hadoop3.3.x版本的Bug。
修改源码未成功。
在未充分了解的情况下,拉取源码,尝试直接将/imagetransfer端点后拼接user.name=xxx查询语句。编译替换jar包后,重新部署集群,Standby节点能够成功同步格式化信息。但是由于EditLog相关的类型初始化失败,NameNode启动失败。
回退版本回退至2.x或者3.2.2版本。
升级版本的原因是低版本依赖具有比较多的安全漏洞,最重要的是低版本Hadoop本身无法通过安全漏扫。
Nginx HTTP代理通过Nginx 设置对 Hadoop 的 HTTP Basic Authentication 安全访问机制。
Hadoop Web 控制台安全认证——使用用户名 + 密码登陆设置方法 (Hadoop HTTP web-控制台认证 )
Kerberos认证推荐方式。
大数据云最常用的认证方式,只是自建服务比较复杂。



