我已经在本地Windows机器上的linux VM中安装了Hadoop / YARN。在同一台Windows机器上(不在VM中),我已经安装了Spark。在Windows上运行spark时,我可以读取存储在HDFS(在Linux VM中)中的文件。
val lines = sc.textFile("hdfs://MyIP:9000/Data/sample.txt")
在将文件保存到HDFS saveAsTextFile("hdfs://MyIP:9000/Data/Output")
时,出现以下错误:
org.apache.hadoop.security.AccessControlException:权限被拒绝: user = LocalWindowsUser,访问权限= WRITE, inode =“ / Data”:hadoop:supergroup:drwxr-xr-x。
我猜是因为Windows用户和Linux用户不同,并且Windows用户没有在Linux中写入文件的权限。
使用spark将文件从Windows存储到HDFS(Linux VM)的正确方法是什么?
答案 0 :(得分:1)
您的问题是,您用于以写入方式访问HDFS的用户名没有权限。
目录/Data
具有权限rwxr-xr-x
。转换为755模式。您的用户名是LocalWindowsUser
,具有读取和执行权限。
可能的解决方案:
第1部分:
由于这是您完全控制的本地系统,因此请更改权限以允许所有人访问。以用户hadoop
的身份在VM内执行此命令:
hdfs dfs -chmod -R 777 /Data
解决方案2: 在Windows中创建环境变量并设置用户名:
set HADOOP_USER_NAME=hadoop
用户名确实应该是用户hdfs
。如有必要,也可以尝试。