Python Cloud Dataflow 中无法更新工作状态异常

Posted

技术标签:

【中文标题】Python Cloud Dataflow 中无法更新工作状态异常【英文标题】:Failed to update work status Exception in Python Cloud Dataflow 【发布时间】:2017-10-05 18:15:24 【问题描述】:

我有一个 Python Cloud Dataflow 作业,它在较小的子集上运行良好,但在整个数据集上似乎没有明显的原因而失败。

我在 Dataflow 界面中得到的唯一错误是标准错误消息:

一个工作项尝试了 4 次,但均未成功。每次工人最终失去与服务的联系。

分析 Stackdriver 日志仅显示此错误:

工作循环中的异常:回溯(最近一次调用最后一次):文件“/usr/local/lib/python2.7/dist-packages/dataflow_worker/batchworker.py”,第 736 行,运行中 deferred_exception_details=deferred_exception_details)文件“/usr/local/lib/python2.7/dist-packages/dataflow_worker/batchworker.py”,第 590 行,在 do_work exception_details=exception_details)文件“/usr/local/lib/python2.7/dist-packages/apache_beam /utils/retry.py”,第 167 行,在包装器中返回 fun(*args, **kwargs) 文件“/usr/local/lib/python2.7/dist-packages/dataflow_worker/batchworker.py”,第 454 行,在report_completion_status exception_details=exception_details)文件“/usr/local/lib/python2.7/dist-packages/dataflow_worker/batchworker.py”,第266行,在report_status work_executor=self._work_executor)文件“/usr/local/lib/ python2.7/dist-packages/dataflow_worker/workerapiclient.py”,第 364 行,report_status 响应 = self._client.projects_jobs_workItems.ReportStatus(request) 文件“/usr/local/lib/python2.7/dist-packages/apache_bea m/internal/clients/dataflow/dataflow_v1b3_client.py”,第 210 行,在 ReportStatus 配置中,请求,global_params=global_params) 文件“/usr/local/lib/python2.7/dist-packages/apitools/base/py/base_api .py”,第 723 行,在 _RunMethod 返回 self.ProcessHttpResponse(method_config, http_response, request) 文件“/usr/local/lib/python2.7/dist-packages/apitools/base/py/base_api.py”,第 729 行,在 ProcessHttpResponse self.__ProcessHttpResponse(method_config, http_response, request)) 文件“/usr/local/lib/python2.7/dist-packages/apitools/base/py/base_api.py”,第 599 行,在 __ProcessHttpResponse http_response.request_url , method_config, request) HttpError: HttpError 访问 https://dataflow.googleapis.com/v1b3/projects//jobs/2017-05-03_03_33_40-3860129055041750274/workItems:reportStatus?alt=json>: 响应: , content

我假设这个Failed to update work status 错误与 Cloud Runner 有关?但是由于我在网上没有找到有关此错误的任何信息,所以我想知道是否有人遇到过它并且有更好的解释?

我正在使用Google Cloud Dataflow SDK for Python 0.5.5

【问题讨论】:

你的管道源和接收器是什么? 2 个源是 GCS 上的 avro 文件,接收器是 GCS 上的 TFRecord 文件。 您有可共享的工作 ID 吗?您可以描述有关您的管道正在做什么的任何详细信息? Job ID:2017-05-07_13_10_15-6017060458892203962,管道是ML Engine的预处理作业。它从 2 组 AVRO 文件开始,将它们组合起来,然后从组合的数据中生成 TFRecords。 【参考方案1】:

租约到期的一个主要原因与虚拟机上的内存压力有关。您可以尝试在具有更高内存的机器上运行您的作业。尤其是 highmem 机器类型应该可以解决问题。

有关机器类型的更多信息,请查看GCE Documentation

下一个 Dataflow 版本 (2.0.0) 应该能够更好地处理这些情况。

【讨论】:

谢谢,我会尝试用更高内存的机器(以及 Dataflow 版本 0.6.0)运行该作业!是否有任何路线图可以找到 Dataflow 2.0.0 的预期发布日期?我还没找到。 Dataflow 2.0.0 6 月中旬发布 :)

以上是关于Python Cloud Dataflow 中无法更新工作状态异常的主要内容,如果未能解决你的问题,请参考以下文章

Google-cloud-dataflow:无法通过带有“BigQueryDisposition.WRITE_TRUNCATE”的“WriteToBigQuery/BigQuerySink”将 jso

由于权限不足,无法获取区域 us-central-c 中机器类型 n1-standard-2 的机器类型信息 - Google Cloud Dataflow

TableRow.get上的Google Cloud Dataflow,BigQueryIO和NullPointerException

使用代理将 DataFlow 作业连接到 Cloud MySQL 是不是安全(通过 os.system)

当 ParDo 函数出现错误时,NACK 不会从 Dataflow 发送回 Google Cloud Pub/Sub

到 Cloud Bigtable 的 Google Cloud Dataflow 管道中的异常