Windows环境下Spark程序写入Cloudera虚拟机HDFS:如何获取集群地址信息
解决Spark写入Cloudera HDFS的地址配置问题
我来帮你搞定这个问题——你困惑的hdfs://后面的内容,其实就是Cloudera集群NameNode的地址+端口,下面是几种在Cloudera虚拟机里获取这个信息的实操方法,亲测有效:
方法1:通过Cloudera Manager(最直观)
如果你的Cloudera集群是用Cloudera Manager管理的,这是最快的方式:
- 打开浏览器,访问Cloudera Manager控制台(一般是虚拟机IP加7180端口,比如
http://192.168.xx.xx:7180),用管理员账号登录 - 在左侧导航栏找到HDFS服务,点击进入服务详情页
- 切换到配置标签页,搜索框输入
fs.defaultFS或者直接找“默认文件系统”配置项 - 你会看到类似
hdfs://cdh-master:8020或者hdfs://192.168.xx.xx:8020的字符串,这就是要填在hdfs://后面的完整前缀
方法2:直接在虚拟机终端执行命令
如果习惯用命令行或者没有Cloudera Manager,登录到Cloudera虚拟机的NameNode主节点,执行以下操作:
- 运行
hdfs getconf -confKey fs.defaultFS,命令会直接返回HDFS默认文件系统地址,输出结果就是你要的前缀 - 或者查看HDFS核心配置文件:
cat /etc/hadoop/conf/core-site.xml,找到<name>fs.defaultFS</name>对应的<value>内容,就是目标地址
方法3:验证地址可用性(重要)
拿到地址后,先确认Windows能访问这个地址:
- 在Windows命令行里用
ping测试虚拟机IP,确保网络连通(比如虚拟机和Windows在同一局域网,或者8020端口已开放) - 如果Windows装了Hadoop客户端,还可以执行
hdfs dfs -ls hdfs://[你的完整前缀]/user/hdfs/test,测试是否能访问目标目录
最后修正你的代码
把拿到的前缀拼进去,比如你得到的是hdfs://cdh-master:8020,代码应该写成:
df.write.csv("hdfs://cdh-master:8020/user/hdfs/test/example.csv")
额外注意事项
- 确保Windows上的Spark环境配置了正确的Hadoop依赖:
HADOOP_HOME要指向对应Cloudera版本的Hadoop客户端,并且把Cloudera里的core-site.xml和hdfs-site.xml复制到Spark的conf目录下 - 目标目录
/user/hdfs/test/如果不存在,先在Cloudera虚拟机里执行hdfs dfs -mkdir -p /user/hdfs/test创建 - 权限问题:如果写入时报权限错误,可以临时执行
hdfs dfs -chmod 777 /user/hdfs/test开放权限测试(生产环境记得改回合理权限)
内容的提问来源于stack exchange,提问作者Sriram
相关产品推荐
相关产品推荐

