PySpark作业因工作流模板失败

时间:2018-04-17 12:00:26

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

要遵循此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

我知道为什么我的作业运行得很完美,除非从生成的集群运行它?

1 个答案:

答案 0 :(得分:1)

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

Dataproc image 1.2.31升级Spark到2.2.1引入了[SPARK-22472]:

  

SPARK-22472:为顶级基元类型添加了空检查。之前   此版本适用于具有顶级基元类型的数据集   具有空值,可能会返回一些意外结果。例如,   假设我们有一个带有模式的镶木地板文件,我们就读了它   进入Scala Int。如果列a具有空值,则转换为   应用了一些意外的值可以返回。

这可能会添加足够的生成代码来获取64k的限制。