我在应用程序中使用spark-sql-2.4.1 v。
在将数据写入hdfs文件夹时,我在spark-streaming应用程序中遇到此问题
错误:
yarn.Client: Deleted staging directory hdfs://dev/user/xyz/.sparkStaging/application_1575699597805_47
20/02/24 14:02:15 ERROR yarn.Client: Application diagnostics message: User class threw exception: org.apache.hadoop.security.AccessControlException: Permission denied: user= xyz, access=WRITE, inode="/tmp/hadoop-admin":admin:supergroup:drwxr-xr-x
.
.
.
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=xyz, access=WRITE, inode="/tmp/hadoop-admin":admin:supergroup:drwxr-xr-x
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:350)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:251)
在将数据写入HDFS文件夹时,我在spark-streaming应用程序中遇到此问题。当我以纱线群集模式运行时,即会遇到此问题。
--master yarn \
--deploy-mode cluster \
但是当我在“ yarn-client”模式下运行时,即可以正常运行。
--master yarn \
--deploy-mode client \
此问题的根本原因是什么?
这里的基本问题是,为什么要尝试用“ /tmp/hadoop-admin/
”而不是相应的用户目录即hdfs://qa2/user/xyz/
来写?
我遇到了此修复程序:
https://issues.apache.org/jira/browse/SPARK-26825
如何在我的spark-sql应用程序中实现它?
答案 0 :(得分:1)
--deploy-mode client
和失败的--deploy-mode cluster
情况之间唯一的区别是驱动程序的位置。在客户端部署模式下,驱动程序在您执行的spark-submit
机器上运行(通常是配置为使用YARN群集的边缘节点,但它不是其中的一部分),而在群集部署模式下,驱动程序运行作为YARN群集的一部分(受YARN控制的节点之一)。
您似乎配置了错误的边缘节点。
如果常规的仅基于Spark SQL的Spark应用程序也会失败,我也不会感到惊讶。听说它与流查询(火花结构化流)无关,并且对于任何Spark应用程序都将失败,我不会感到惊讶。