PySpark 作业因工作流模板而失败
PySpark Job fails with workflow template
接下来 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
模板创建正确。
当我从我现有的集群之一手动 运行 时,这项工作就开始了。当我使用现有集群而不是要求工作流创建集群时,它也会 运行s。
问题是我希望集群在 运行 作业之前创建并在作业之后删除,这就是为什么我使用 托管集群 。
但是对于托管集群,我做不到 运行。我尝试使用与现有集群相同的配置,但它没有任何改变。
我总是得到相同的 error.
知道为什么我的工作 运行 非常完美,但它是来自生成的集群的 运行 吗?
问题出在托管集群的版本上。
默认情况下,映像版本为 1.2.31,而我现有的集群使用的是映像 1.2.28。
当我更改配置以添加 --image-version=1.2.28 时,它起作用了。
Dataproc 映像 1.2.31 将 Spark 升级到引入了 [SPARK-22472] 的 2.2.1:
SPARK-22472: added null check for top-level primitive types. Before
this release, for datasets having top-level primitive types, and it
has null values, it might return some unexpected results. For example,
let’s say we have a parquet file with schema , and we read it
into Scala Int. If column a has null values, when transformation is
applied some unexpected value can be returned.
这可能添加了足够的生成代码以达到 类 的 64k 限制。
接下来 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
模板创建正确。 当我从我现有的集群之一手动 运行 时,这项工作就开始了。当我使用现有集群而不是要求工作流创建集群时,它也会 运行s。
问题是我希望集群在 运行 作业之前创建并在作业之后删除,这就是为什么我使用 托管集群 。
但是对于托管集群,我做不到 运行。我尝试使用与现有集群相同的配置,但它没有任何改变。 我总是得到相同的 error.
知道为什么我的工作 运行 非常完美,但它是来自生成的集群的 运行 吗?
问题出在托管集群的版本上。
默认情况下,映像版本为 1.2.31,而我现有的集群使用的是映像 1.2.28。
当我更改配置以添加 --image-version=1.2.28 时,它起作用了。
Dataproc 映像 1.2.31 将 Spark 升级到引入了 [SPARK-22472] 的 2.2.1:
SPARK-22472: added null check for top-level primitive types. Before this release, for datasets having top-level primitive types, and it has null values, it might return some unexpected results. For example, let’s say we have a parquet file with schema , and we read it into Scala Int. If column a has null values, when transformation is applied some unexpected value can be returned.
这可能添加了足够的生成代码以达到 类 的 64k 限制。