存储在 Azure Data Lake 中的 Oozie 文件或归档标签参考文件

Oozie file or archive tags reference file stored in Azure Data Lake

我们在 Azure 计算节点上安装了自定义 Apache Hadoop,并使用 Apache Oozie 来安排工作流。

所有工作流和协调器 xml 文件都部署到 Microsoft Azure Data Lake 外部存储中。

目前有一个 pyspark action,为此我们将 egg 文件部署到 Azure Data Lake 上的不同路径。

在工作流程操作中,我尝试通过文件标签引用它但没有成功:

<action name='start-job'>
        <spark xmlns="uri:oozie:spark-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <master>${sparkMaster}</master>
            <mode>${sparkMode}</mode>
            <name>PySparkJob</name>
            <jar>${executor}</jar>
            <spark-opts>
                --num-executors ${num_executors} --executor-cores ${executor_cores} --executor-memory ${executor_memory} --driver-memory ${driver_memory} --conf spark.executor.memoryOverhead=${executor_memory_overhead} --py-files ${egg_file_name} --conf spark.driver.maxResultSize=${driver_max_result_size}
            </spark-opts>
            <arg>...</arg>
            <file>${adl_pyfiles_absolute_path}/${egg_file_name}</file>
       </spark>
       <ok to="success-email" />
       <error to="error-email"/>
</action>

这导致:

Error Message     : Missing py4j and/or pyspark zip files. Please add them to the lib folder or to the Spark sharelib.

有办法吗?

我找到了根本原因。

所以刚才提到文件如下是不够的:

<file>${adl_pyfiles_absolute_path}/${egg_file_name}</file>

用于在 spark-opts 中引用它 --py-files ${egg_file_name}

因此,给它明确的名称可以解决问题,即:

<file>${adl_pyfiles_absolute_path}/${egg_file_name}#${egg_file_name}</file>