簡體   English   中英

從Oozie(CDH)運行Spark2

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM