![](/img/trans.png)
[英]HDInsight Oozie 4.2.0.2.5 Spark2 Action Jackson collision
[英]Running Spark2 from Oozie (CDH)
我正在嘗試從Oozie運行spark作業(使用spark2-submit),因此可以按計划運行此作業。
當運行時,該作業運行得很好,我們通過命令行在我們的服務帳戶(而不是Yarn)下運行Shell腳本。 當我們將其作為Oozie Workflow運行時,會發生以下情況:
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-x
Oozie以用戶Yarn的身份運行作業。 IT部門拒絕我們更改HDFS中Yarn權限的任何能力,並且Spark腳本中沒有對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
任何幫助,將不勝感激。
您需要將“ <env-var>HADOOP_USER_NAME=${wf:user()}</env-var>
”添加到<env-var>HADOOP_USER_NAME=${wf:user()}</env-var>
的shell動作中。 因此,oozie使用觸發了oozie worklfow的用戶的主目錄,而不是使用yarn home目錄。
例如
<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>
在job.properties中指定userName = usernamevalue
我能夠通過遵循https://stackoverflow.com/a/32834087/8099994來解決此問題
現在,在我的shell腳本的開頭,我包括以下行:
export HADOOP_USER_NAME=serviceAccount;
從YARN上的Launching Spark(2.1)開始 ...
spark.yarn.stagingDir
提交申請時使用的登台目錄
默認值:文件系統中當前用戶的主目錄
所以,如果你可以的地方創建一個HDFS目錄,並授予yarn
所需PRIVS -即rx
所有父迪爾斯和rwx
對目錄本身-然后請求星火使用該目錄,而不是/user/yarn
(不存在),那么您應該沒事。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.