无法 运行 在 HUE oozie 中激发作业。例外:"datanucleus-api-jdo-3.2.1.jar does not exist"

Unable to run spark job in HUE oozie. Exception: "datanucleus-api-jdo-3.2.1.jar does not exist"

我想知道的是how/wherespark挑选需要的jar。

文件:/mnt/md0/yarn/nm/usercache/kylin/appcache/application_1468506830246_161908/container_1468506830246_161908_01_000001/datanucleus-api-jdo-3.2.1.jar不存在。

<spark-opts>
  --num-executors 30 
  --executor-memory 18g 
  --executor-cores 15 
  --driver-memory 2g 
  --files hdfs:///jobs/kylin/hive-site.xml 
  --jars datanucleus-api-jdo-3.2.1.jar,datanucleus-rdbms-3.2.1.jar,datanucleus-core-3.2.2.jar 
  --conf spark.shuffle.manager=tungsten-sort 
  --conf spark.shuffle.consolidateFiles=true 
  --conf spark.yarn.executor.memoryOverhead=3072 
  --conf spark.shuffle.memoryFraction=0.7 
  --conf spark.storage.memoryFraction=0.05 
  --conf spark.spot.instances=30
</spark-opts>

我们需要提供 jars 的绝对路径,否则会失败。

请查看 spark 文档中的以下详细信息,了解提供 --jar 的不同方式。

使用 spark-submit 时,应用程序 jar 以及 --jars 选项中包含的任何 jar 将自动传输到集群。在 --jars 之后提供的 URLs 必须用逗号分隔。该列表包含在驱动程序和执行程序类路径中。目录扩展不适用于 --jars.

Spark 使用以下 URL 方案来允许传播 jar 的不同策略:

file: - 绝对路径和 file:/ URI 由驱动程序的 HTTP 文件服务器提供,每个执行程序从驱动程序 HTTP 服务器拉取文件。

hdfs:, http:, https:, ftp: - 这些按预期从 URI 中下载文件和 JAR

local: - 以 local:/ 开头的 URI 应作为本地文件存在于每个工作节点上。这意味着不会产生网络 IO,并且适用于推送给每个工作人员或通过 NFS、GlusterFS 等共享的大型 files/JARs

请注意,JAR 和文件会复制到执行程序节点上每个 SparkContext 的工作目录中。随着时间的推移,这会耗尽大量的 space 并且需要清理。使用 YARN,清理是自动处理的,而使用 Spark standalone,可以使用 spark.worker.cleanup.appDataTtl 属性.

配置自动清理

用户还可以通过使用 --packages 提供以逗号分隔的 Maven 坐标列表来包含任何其他依赖项。使用此命令时将处理所有传递依赖项。可以使用标志 --repositories 以逗号分隔的方式添加其他存储库(或 SBT 中的解析器)。这些命令可以与 pyspark、spark-shell 和 spark-submit 一起使用以包含 Spark 包。

对于 Python,等效的 --py-files 选项可用于将 .egg、.zip 和 .py 库分发给执行程序。

请查看link了解更多信息。