从Windows上的Spark到HDFS的存储文件

时间:2018-09-16 16:45:21

标签: linux apache-spark hadoop hdfs

我已经在本地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)的正确方法是什么?

1 个答案:

答案 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。如有必要,也可以尝试。