我试图运行一个火花作业(使用火花2-提交)从Oozie,所以这个作业可以运行的时间表。
作业在运行时运行良好,我们从服务帐户下的命令行运行shell脚本(而不是Yarn)。当我们以Oozie工作流的形式运行它时,会发生以下情况:
17/11/16 12:03:55 ERROR spark.SparkContext: Error initializing SparkContext.
org.apache.hadoop.security.AccessControlException: Permission denied:
user=yarn, access=WRITE, inode="/user":hdfs:supergroup:drwxrwxr-xOozie正在以用户Yarn的身份运行该作业。它剥夺了我们在HDFS中更改Yarn权限的任何能力,并且在script中没有对user目录的一个引用。我们已经尝试将ssh放到服务器中--尽管这不起作用--我们必须将ssh从我们的工作节点中转移到主服务器上。
shell脚本:
spark2-submit --name "SparkRunner" --master yarn --deploy-mode client --class org.package-name.Runner hdfs://manager-node-hdfs/Analytics/Spark_jars/SparkRunner.jar任何帮助都将不胜感激。
发布于 2017-11-28 15:40:25
我能够通过遵循https://stackoverflow.com/a/32834087/8099994来修复这个问题
在shell脚本的开头,我现在包括以下行:
export HADOOP_USER_NAME=serviceAccount;发布于 2017-11-16 23:10:04
您需要将"<env-var>HADOOP_USER_NAME=${wf:user()}</env-var>“添加到oozie workflow.xml的shell操作中。因此,oozie使用用户的主目录(已触发oozie worklfow ),而不是使用纱线主目录。
e.g
<action name='shellaction'>
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<exec>sparksubmitShellScript.sh</exec>
<argument>${providearg}</argument>
<env-var>HADOOP_USER_NAME=${wf:user()}</env-var>
<file>${appPath}/sparksubmitShellScript.sh#sparksubmitShellScript.sh
</file>
</shell>
</action>根据您的工作流程进行修改,如果需要,您也可以直接提到用户名,而不是使用触发工作流的用户,如下所示
<env-var>HADOOP_USER_NAME=${userName}</env-var>在userName=usernamevalue中指定job.properties
发布于 2018-09-14 15:05:22
从在纱线上发射火花(2.1)..。
spark.yarn.stagingDir提交应用程序时使用的暂存目录 默认值:文件系统中当前用户的主目录
因此,如果您可以在某个地方创建一个HDFS目录,并授予yarn所需的特权--即所有父目录上的rx和dir本身上的rwx --那么请Spark使用该dir而不是/user/yarn (不存在),那么您就应该没事了。
https://stackoverflow.com/questions/47337637
复制相似问题