Apache spark Hadoop copyToLocalFile在纱线簇模式下失败
我试图从我的Spark2应用程序中使用Hadoop的copyToLocalFile函数将一个文件从HDFS复制到本地Apache spark Hadoop copyToLocalFile在纱线簇模式下失败,apache-spark,hadoop,hdfs,yarn,Apache Spark,Hadoop,Hdfs,Yarn,我试图从我的Spark2应用程序中使用Hadoop的copyToLocalFile函数将一个文件从HDFS复制到本地 val hadoopConf = new Configuration() val hdfs = FileSystem.get(hadoopConf) val src = new Path("/user/yxs7634/all.txt") val dest = new Path("file:///home/yxs7634/all.txt") hdfs.copy
val hadoopConf = new Configuration()
val hdfs = FileSystem.get(hadoopConf)
val src = new Path("/user/yxs7634/all.txt")
val dest = new Path("file:///home/yxs7634/all.txt")
hdfs.copyToLocalFile(src, dest)
当我以客户机模式提交spark应用程序时,上述代码运行良好。但是,在纱线簇模式下,它一直失败,以下例外
18/10/03 12:18:40 ERROR yarn.ApplicationMaster: User class threw exception: java.io.FileNotFoundException: /home/yxs7634/all.txt (Permission denied)
在纱线簇模式下,驱动程序也由纱线处理,选定的驱动程序节点可能不是您提交作业的节点。因此,要使此作业在纱线群集模式下工作,我认为您需要将本地文件放置在群集中的所有spark节点中。在纱线群集模式下,驱动程序也由纱线处理,并且所选驱动程序节点可能不是您提交作业的节点。因此,要使此作业在纱线群集模式下工作,我相信您需要将本地文件放置在群集中的所有spark节点中。在纱线模式下,spark作业通过纱线提交。 驱动程序将在另一个节点上启动 为了解决这个问题,您可以使用像HDFS这样的分布式文件系统来存储文件,然后给出绝对路径 例如:
在纱线模式下,火花作业通过纱线提交。 驱动程序将在另一个节点上启动 为了解决这个问题,您可以使用像HDFS这样的分布式文件系统来存储文件,然后给出绝对路径 例如:
您有一个权限被拒绝的错误,我的意思是,您用来提交作业的用户无法访问该文件。目录应该至少对用户“other”具有读取权限,类似这样:
-rw-rw-r--
你能粘贴目录和文件的权限吗?命令是
hdfs dfs -ls /your-directory/
您有一个权限被拒绝的错误,我的意思是,您用来提交作业的用户无法访问该文件。目录应该至少对用户“other”具有读取权限,类似这样:
-rw-rw-r--
你能粘贴目录和文件的权限吗?命令是
hdfs dfs -ls /your-directory/
看起来像是Spark服务器在一个用户(例如“Spark”)下运行,文件存储在另一个用户“yxs7634”目录中的代码中。 在群集模式下,用户“spark”不允许写入“yxs7634”用户目录,并且会发生此类异常 Spark用户需要额外的权限才能写入“/home/yxs7634”
在本地模式下工作正常,因为Spark在“yxs7634”用户下运行。看起来像Spark服务器在一个用户(例如“Spark”)下运行,文件存储在另一个用户“yxs7634”目录中的代码中。 在群集模式下,用户“spark”不允许写入“yxs7634”用户目录,并且会发生此类异常 Spark用户需要额外的权限才能写入“/home/yxs7634”
在本地模式下工作正常,因为Spark在“yxs7634”用户下运行。您是否缺少像hdfs-site.xml这样的站点xml?您能否检查您创建的文件系统实例是否是用于访问HDFS的分布式FS?是否缺少像HDFS-site.xml这样的站点xml?您能否检查您创建的文件系统实例是否是用于访问HDFS的分布式FS?