目录
问题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)可以看到跨域过滤器已经开启了。那是什么原因导致浏览器还传不了文件呢?
左思右想想不明白,最后还是通过分析日志发现了端倪:
原来是目录权限的问题,新系统默认的目录只对当前用户有写权限。
于是修改目录权限,并在该目录中上传文件,问题解决。也就是说这个问题其实并非是跨域的问题,而是访问权限的问题,后来去掉跨域的配置,并赋予合适的权限重新访问可以正常上传文件验证了这一点。
通过这个问题的解决,启发我分析问题不能只看表面,要结合相关日志对比分析才能得出正确的结论。也深刻体会到了查看日志的重要性,以后要牢记!