hadoop3访问hdfs web控制页面遇到的各种问题总结

本文介绍了在虚拟机上搭建Hadoop集群后遇到的三个问题及其解决方案:1) 通过关闭防火墙解决浏览器无法访问HDFSweb问题;2) 降低Java版本至JDK8解决Browser the filesystem报错;3) 配置Hadoop跨域访问过滤器及调整目录权限解决文件上传错误。分析问题时需结合日志深入排查。
摘要由CSDN通过智能技术生成

目录

问题1:浏览器访问不了hdfs web

问题2:浏览器点击Browse the file system打开文件系统报错:Failed to retrieve data from /webhdfs/v1/?op=LISTSTATUS: Server Error

问题3:浏览器HDFS文件系统上传文件时报Couldn't upload the file错误

​ 


最近通过虚拟机安装配置了hadoop集群,集群虽然搭建起来了,不过通过浏览器访问管理界面的过程中遇到了一些问题,现整理总结一下。

问题1:浏览器访问不了hdfs web

可能的原因:

(1).防火墙未关闭时,无法通过浏览器访问hdfs web页面。先查看防火墙的状态:

firewall-cmd --state

如果防火墙为开启状态,需要关闭防火墙(集群所有节点都需要关闭,不然通过控制台无法传文件到文件系统):

systemctl stop firewalld.service

防火墙关闭后,重新打开浏览器:

(2).hadoop默认的hdfs web控制界面的端口为9870,如果在hdfs-site.xml中没有配置dfs.namenode.http-address项,可以尝试用默认端口访问。

问题2:浏览器点击Browse the file system打开文件系统报错:Failed to retrieve data from /webhdfs/v1/?op=LISTSTATUS: Server Error

这个问题查找了相关资料,发现是Java版本过高导致的,我用的是jdk11,hadoop3目前对jdk8支持得更好。于是卸载掉jdk11相关组件,重新安装jdk8并配置jdk环境变量。

查看软件版本
rpm -qa|grep jdk
卸载软件
yum -y remove java **

然后更改hadoop-env.sh中JAVA_HOME中的配置即可。 

更新配置并重启hadoop服务后,重新打开Browse the file system,已经正常了。

问题3:浏览器HDFS文件系统上传文件时报Couldn't upload the file错误

F12打开谷歌控制台,看到报as been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.错误,大概意思是由于跨域访问CORS policy策略,访问阻塞了:

 

于是查阅了hadoop相关配置信息,将hadoop跨域访问过滤器加上:

<!--安全认证初始化的类-->
<property>
    <name>hadoop.http.filter.initializers</name>
    <value>org.apache.hadoop.security.HttpCrossOriginFilterInitializer</value>
</property>
<!--是否启用跨域支持-->
<property>
    <name>hadoop.http.cross-origin.enabled</name>
    <value>true</value>
</property>
<!--允许跨域访问的来源,如果有多个,用逗号(,)分隔-->
<property>
    <name>hadoop.http.cross-origin.allowed-origins</name>
    <value>*</value>
</property>
<!--允许跨域的方法列表,如果有多个,用逗号(,)分隔-->
<property>
    <name>hadoop.http.cross-origin.allowed-methods</name>
    <value>GET,POST,HEAD</value>
</property>
<!--允许跨域的标头列表,如果有多个,用逗号(,)分隔-->
<property>
    <name>hadoop.http.cross-origin.allowed-headers</name>
    <value>X-Requested-With,Content-Type,Accept,Origin</value>
</property>
<!--预检请求可以缓存的秒数-->
<property>
    <name>hadoop.http.cross-origin.max-age</name>
    <value>1800</value>
</property>

然后重启hadoop服务后,浏览器重新上传文件,还是报同样的错误。不过此时通过日志(logs/hadoop-hadoop-namenode-master.log)可以看到跨域过滤器已经开启了。那是什么原因导致浏览器还传不了文件呢?

左思右想想不明白,最后还是通过分析日志发现了端倪:

原来是目录权限的问题,新系统默认的目录只对当前用户有写权限。

于是修改目录权限,并在该目录中上传文件,问题解决。也就是说这个问题其实并非是跨域的问题,而是访问权限的问题,后来去掉跨域的配置,并赋予合适的权限重新访问可以正常上传文件验证了这一点。

 通过这个问题的解决,启发我分析问题不能只看表面,要结合相关日志对比分析才能得出正确的结论。也深刻体会到了查看日志的重要性,以后要牢记!

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值