Windows本地YARN应用无法传输至Hortonworks沙箱求助
我之前帮朋友排查过类似的Spring YARN + HDP沙箱的文件传输问题,结合你的场景,大概率是VirtualBox的网络配置、HDFS访问权限或者Spring YARN的配置细节没踩对,咱们一步步来梳理:
一、先确认VirtualBox沙箱的网络模式是否正确
虽然你已经telnet通了8020、8032端口,但Windows和沙箱之间的文件传输(不管是手动SCP还是Spring YARN自动上传HDFS)都依赖稳定的网络连通性,这里要重点检查:
- 如果用NAT模式:必须确保VirtualBox的端口转发规则配置完整,至少要包含HDFS NameNode(8020)、YARN ResourceManager(8032)、SSH(22)这几个端口的转发,且子系统IP要填沙箱的内部IP(沙箱里执行
ip addr就能看到,一般是10.0.2.15这类)。 - 如果用桥接模式:要确认沙箱和Windows在同一网段,互相能ping通,且沙箱的防火墙没有拦截相关端口(HDP沙箱默认防火墙是关闭的,但可以用
systemctl status firewalld确认)。 - 额外验证:打开Windows浏览器访问
http://沙箱IP:50070(HDFS UI),如果能正常打开,说明HDFS的网络通路是通的;如果打不开,先解决这个基础问题。
二、Spring YARN的application.yml配置关键踩坑点
你说试了三种配置都失败,大概率是配置里的HDFS地址、权限或文件路径没写对,这里给你一个适配HDP2.6.4沙箱的标准配置模板,你对比检查:
spring: yarn: application: name: simple-yarn-app client: files: - local: "C:/Users/你的用户名/target/simple-yarn-app-1.0.0.jar" # Windows本地绝对路径,带空格要加引号,用正斜杠代替反斜杠 remote: /user/hadoop/simple-yarn-app.jar # 沙箱HDFS目标路径,选hadoop用户目录避免权限问题 config: yarn.resourcemanager.address: 192.168.56.101:8032 # 必须填沙箱实际IP,不能写localhost yarn.resourcemanager.scheduler.address: 192.168.56.101:8030 fs.defaultFS: hdfs://192.168.56.101:8020 # HDFS默认文件系统地址,同样填沙箱IP
这里要注意几个容易踩的坑:
- 本地路径格式:Windows下的路径要用正斜杠,有空格必须加引号,Spring YARN对Windows反斜杠的解析容易出问题。
- HDFS权限:HDP沙箱默认开启HDFS权限检查,你手动SCP是传到Linux本地文件系统,但Spring YARN是上传到HDFS。可以先在沙箱里执行
hdfs dfs -mkdir -p /user/hadoop,再hdfs dfs -chmod 777 /user/hadoop(仅测试用,生产环境别这么做)来临时开放权限验证。 - IP地址问题:绝对不能写
localhost,因为Windows的localhost指向自己,不是沙箱。必须填沙箱的实际IP(可以在沙箱里用ip addr查看)。
三、Windows命令行的Hadoop环境变量配置
Spring YARN依赖Hadoop客户端的配置,即使你没装完整Hadoop,也要确保以下环境变量正确:
- 配置
HADOOP_HOME:指向你下载的Hadoop 2.7.x(HDP2.6.4对应Hadoop2.7.3)解压目录,Windows下要下载带winutils的版本,不然会报找不到本地库的错误。 - 把
%HADOOP_HOME%\bin加到系统PATH环境变量里。 - 配置
HADOOP_CONF_DIR:指向包含core-site.xml、yarn-site.xml的目录,你可以从沙箱的/etc/hadoop/conf目录把这两个文件SCP到Windows本地,然后设置该环境变量指向这个目录。
四、先手动测试HDFS上传通路
如果直接跑Spring YARN应用还是失败,可以先手动用Hadoop命令行测试从Windows上传文件到沙箱HDFS,确认通路没问题:
hdfs dfs -put "C:/Users/你的用户名/target/simple-yarn-app.jar" hdfs://192.168.56.101:8020/user/hadoop/test.jar
如果这个命令成功,说明HDFS上传通路正常,问题出在Spring YARN的配置上;如果失败,根据报错信息(比如权限拒绝、连接超时)针对性排查。
五、NAT模式下的端口转发补充
如果你的沙箱用的是NAT模式,除了前面说的端口转发,还要注意配置里的IP和端口要对应:
- 比如VirtualBox里把沙箱的8020端口转发到Windows的8020端口,那配置里的
fs.defaultFS就要写hdfs://localhost:8020,yarn.resourcemanager.address写localhost:8032,这样Windows才能通过转发端口访问沙箱的服务。
内容的提问来源于stack exchange,提问作者inor
相关产品推荐
相关产品推荐

