0

我有一个环境变量保存在我的.bash_profile. 我正在尝试使用sys.env()Scala 中的方法通过 Spark 程序访问它。当我没有 Oozie Scheduling 时,我可以正确访问 Spark 中的环境变量。但是,当我尝试使用 Oozie 安排我的程序时,程序会抛出一个错误,它无法读取 env 变量。

这是我的工作流.xml:

<workflow-app xmlns='uri:oozie:workflow:0.5' name='Security-User-Management'>

    <start to='spark-node' />

    <action name='spark-node'>
        <spark xmlns="uri:oozie:spark-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <prepare>
                <delete path="hdfs://<some hdfs url>/user/clsadmin/cmdw-security/cmdw-security-logs"/>
                <mkdir path="hdfs://<some hdfs url>/user/clsadmin/cmdw-security/cmdw-security-logs"/>
            </prepare>
            <configuration>
                <property>
                    <name>CMDW_CLOUD_USERNAME</name>
                    <value>abcd</value>
                </property>
            </configuration>
            <master>${master}</master>
            <name>CMDW-Security-User-Management</name>
            <class>custom.cmdwldap.executable.Test</class>
            <jar>hdfs://some hdfs url/user/clsadmin/security/Security.jar</jar>
            <arg>CMDW_CLOUD_USERNAME=abcd</arg>
        </spark>
        <ok to="end" />
        <error to="fail" />
    </action>

    <kill name="fail">
        <message>Workflow failed, error message:
            ${wf:errorMessage(wf:lastErrorNode())}
        </message>
    </kill>
    <end name="end" />
</workflow-app>

如何configuration在我的 Scala 代码中阅读 ..

4

1 回答 1

1
  1. 尝试从边缘节点以纱线集群模式运行作业。它将无法识别这些变量,因为 spark 驱动程序在集群的不同数据节点中运行,其 .bash_profile 可能没有声明此变量。在边缘节点 .bash_profile 中声明了变量,这就是当您通过本地或纱线客户端模式运行 spark-submit 测试脚本时作业成功运行的原因。

从 EdgeNode 运行:spark-submit local ---> 作业在边缘节点中运行。

从 EdgeNode 运行:spark-submit yarn-client ---> 作业从边缘节点中的驱动程序和集群数据节点中的执行程序开始。

从 EdgeNode 运行:spark-submit yarn-cluster ---> 作业在边缘节点中启动,驱动程序在其中一个数据节点中启动,执行程序在其余数据节点中启动。

  1. 就像 shell 操作一样,Oozie 在 Hadoop 集群中除边缘节点之外的不同计算节点(可能是数据节点之一)中执行其他操作。当你想到 yarn-client 和 yarn-cluster 时,这个概念就变得复杂了。当从 Oozie 作业运行失败时,因为变量不在数据节点的 .bash_profile 中。

从 Oozie spark 操作运行:spark-submit local ---> 作业在本地数据节点之一中运行。

从 Oozie spark 操作运行:spark-submit yarn-client ---> 作业从数据节点之一中的驱动程序和集群的其余数据节点中的执行程序开始。

从 Oozie spark 操作运行:spark-submit yarn-cluster ---> 作业在其中一个数据节点中启动,驱动程序在另一个数据节点中启动,执行程序在其余数据节点中启动。

参考: https ://oozie.apache.org/docs/5.2.0/WorkflowFunctionalSpec.html#ActionNodes

https://spark.apache.org/docs/latest/cluster-overview.html

Oozie > 异步动作和同步动作有什么区别

于 2020-01-15T17:51:04.997 回答