如何为Hadoop 2.7.5集群的Web仪表盘配置密码保护(含8088等端口)
为Hadoop 2.7.5 Web界面配置用户名/密码认证
嘿,针对你的Hadoop 2.7.5小型集群Web界面认证需求,我给你整理了一套实操性很强的步骤,亲测在7台节点的集群上能完美跑起来:
1. 先创建用户凭证文件
Hadoop的Web界面基于Jetty,我们可以用Basic认证,第一步得先做个存储用户名密码的凭证文件:
- 先装
htpasswd工具:Debian/Ubuntu用sudo apt install apache2-utils,CentOS/RHEL用sudo yum install httpd-tools - 生成凭证文件(建议放在Hadoop配置目录下,方便管理):
这里htpasswd -c /opt/hadoop/etc/hadoop/.htpasswd hadoopadminhadoopadmin是你要授权的第一个用户名,执行后输入两次密码就行。要加更多用户的话,去掉-c参数再跑一遍:htpasswd /opt/hadoop/etc/hadoop/.htpasswd anotheruser - 给文件设置权限,确保Hadoop进程能读:
(假设你的Hadoop运行用户是chmod 600 /opt/hadoop/etc/hadoop/.htpasswd chown hadoop:hadoop /opt/hadoop/etc/hadoop/.htpasswdhadoop,根据实际情况调整)
2. 配置YARN ResourceManager(8088端口)
修改/opt/hadoop/etc/hadoop/yarn-site.xml,添加以下配置段:
<property> <name>yarn.resourcemanager.webapp.address</name> <value>0.0.0.0:8088</value> </property> <property> <name>yarn.resourcemanager.webapp.https.address</name> <value>0.0.0.0:8090</value> </property> <property> <name>yarn.resourcemanager.webapp.filter.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.webapp.filter.name</name> <value>AuthenticationFilter</value> </property> <property> <name>yarn.resourcemanager.webapp.filter.params</name> <value>type=basic,authName=YARN RM,file=/opt/hadoop/etc/hadoop/.htpasswd</value> </property>
简单解释下:开启认证过滤器,指定用Basic认证方式,关联我们刚才创建的凭证文件,authName是浏览器弹窗里显示的提示文字。
3. 配置HDFS NameNode(50070端口)
同样修改/opt/hadoop/etc/hadoop/hdfs-site.xml,添加:
<property> <name>dfs.namenode.http-address</name> <value>0.0.0.0:50070</value> </property> <property> <name>dfs.namenode.https-address</name> <value>0.0.0.0:50470</value> </property> <property> <name>dfs.namenode.webapp.filter.enabled</name> <value>true</value> </property> <property> <name>dfs.namenode.webapp.filter.name</name> <value>AuthenticationFilter</value> </property> <property> <name>dfs.namenode.webapp.filter.params</name> <value>type=basic,authName=HDFS NN,file=/opt/hadoop/etc/hadoop/.htpasswd</value> </property>
逻辑和YARN的配置完全一致,只是用了HDFS的专属参数。
4. 保护其他Web界面(可选)
如果还要保护SecondaryNameNode(50090端口)、DataNode(50075端口)这类界面,照着上面的逻辑加配置就行:
- 比如SecondaryNameNode,在
hdfs-site.xml加:
<property> <name>dfs.secondary.http-address</name> <value>0.0.0.0:50090</value> </property> <property> <name>dfs.secondary.https-address</name> <value>0.0.0.0:50490</value> </property> <property> <name>dfs.secondarynamenode.webapp.filter.enabled</name> <value>true</value> </property> <property> <name>dfs.secondarynamenode.webapp.filter.name</name> <value>AuthenticationFilter</value> </property> <property> <name>dfs.secondarynamenode.webapp.filter.params</name> <value>type=basic,authName=HDFS SNN,file=/opt/hadoop/etc/hadoop/.htpasswd</value> </property>
- DataNode的话,用
dfs.datanode.webapp.filter.enabled这类参数,不过一般DataNode界面不需要对外暴露,按需配置就行。
5. 重启服务生效
修改完所有配置后,记得把配置文件同步到集群所有节点(如果是手动管理配置的话),然后重启Hadoop服务:
# 先停掉集群 stop-all.sh # 或者分开停 stop-yarn.sh stop-dfs.sh # 再启动 start-all.sh # 或者分开启动 start-dfs.sh start-yarn.sh
6. 验证效果
现在访问http://<你的RM节点IP>:8088或者http://<你的NN节点IP>:50070,浏览器会弹出用户名密码输入框,输入你之前创建的账号密码就能正常访问;输错的话会直接返回401未授权,完美符合你的需求。
小提醒
- 如果你的集群用了Kerberos,这套Basic认证可能需要调整,但小型集群的话Basic认证足够用了
- 要是担心密码明文传输,可以配置HTTPS加密,不过需要额外生成SSL证书,内部集群的话Basic认证也能满足安全需求
内容的提问来源于stack exchange,提问作者Hafiz Muhammad Shafiq




