【问题标题】:PySpark Job fails with workflow templatePySpark 作业因工作流模板而失败
【发布时间】:2018-04-17 12:00:25
【问题描述】:

为了跟进这个question,我决定尝试工作流模板 API。

这是它的样子:

gcloud beta dataproc workflow-templates create lifestage-workflow --region europe-west2
gcloud beta dataproc workflow-templates set-managed-cluster lifestage-workflow \
  --master-machine-type n1-standard-8 \
  --worker-machine-type n1-standard-16 \
  --num-workers 6 \
  --cluster-name lifestage-workflow-cluster \
  --initialization-actions gs://..../init.sh \
  --zone europe-west2-b \
  --region europe-west2 \

gcloud beta dataproc workflow-templates add-job pyspark gs://.../main.py \
--step-id prediction \
--region europe-west2 \
--workflow-template lifestage-workflow \
--jars gs://.../custom.jar \
--py-files gs://.../jobs.zip,gs://.../config.ini \
-- --job predict --conf config.ini

模板已正确创建。 当我从我已经存在的集群之一手动运行它时,这项工作就可以工作。当我使用现有集群而不是要求工作流创建一个集群时,它也会运行。

问题是我希望在运行作业之前创建集群并在之后立即删除,这就是我使用托管集群的原因。

但是对于托管集群,我无法让它运行。我尝试使用与现有集群相同的配置,但它并没有改变任何东西。 我总是得到相同的error

知道为什么我的作业除了从生成的集群运行之外运行完美吗?

【问题讨论】:

  • 感谢分享您的流程。我相信这是正确的,链接的 JIRA 应该已在 Dataproc 1.2 (Spark 2.2.1) 中修复。也就是说,我想比较成功和失败的作业元数据,但为此我需要比在 SO 上共享的更多信息。请通过 dataproc-feedback[at]google.com 与我们联系。只有您和 Google 工程师可以阅读您的帖子。
  • 谢谢!我发送了一封邮件,其中包含 SUCCESS 案例和 FAILURE 案例的日志!

标签: apache-spark google-cloud-platform bigdata google-cloud-dataproc


【解决方案1】:

问题来自托管集群的版本。
默认情况下,映像版本是 1.2.31,而我现有的集群使用的是 1.2.28 映像。
当我更改配置以添加 --image-version=1.2.28 时,它起作用了。

Dataproc 映像 1.2.31 将 Spark 升级到 2.2.1,其中引入了 [SPARK-22472]:

SPARK-22472:为顶级原始类型添​​加了空检查。前 此版本,对于具有顶级原始类型的数据集,它 有空值,它可能会返回一些意想不到的结果。例如, 假设我们有一个带有 schema 的 parquet 文件,我们读取它 进入 Scala Int。如果 a 列具有空值,则转换时 应用了一些意外的值可以返回。

这可能会添加足够的生成代码来接受 64k 限制的类。

【讨论】:

    猜你喜欢
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多