2 回答
TA贡献2021条经验 获得超8个赞
可能有助于调试的一件事是查看 Stackdriver 日志。
如果您在 Google控制台中打开 Dataflow 作业并单击LOGS
图形面板右上角的 ,则应该会打开底部的日志面板。LOGS 面板的右上角有一个指向 Stackdriver 的链接。这将为您提供有关您的工人/洗牌/等的大量日志信息。对于这个特定的工作。
其中有很多内容,并且很难过滤掉相关的内容,但希望您能够找到比A work item was attempted 4 times without success
. 例如,每个工作人员偶尔会记录它正在使用的内存量,这可以与每个工作人员拥有的内存量(基于机器类型)进行比较,以查看它们是否确实内存不足,或者您的错误是否正在发生别处。
祝你好运!
TA贡献1790条经验 获得超9个赞
据我所知,在 Cloud Dataflow 和 Apache Beam 的 Python SDK 中没有可用的选项来诊断 OOM(Java SDK 可以)。我建议您在Cloud Dataflow 问题跟踪器中打开功能请求,以获取有关此类问题的更多详细信息。
除了检查 Dataflow 作业日志文件之外,我建议您使用Stackdriver Monitoring 工具监控您的管道,该工具提供每个作业的资源使用情况(作为总内存使用时间)。
关于 Python SDK 中的 Partition 函数使用,以下代码(基于 Apache Beam文档中提供的示例)将数据拆分为 3 个 BigQuery 加载作业:
def partition_fn(input_data, num_partitions):
return int(get_percentile(lines) * num_partitions / 100)
partition = input_data | beam.Partition(partition_fn, 3)
for x in range(3):
partition[x] | 'WritePartition %s' % x >> beam.io.WriteToBigQuery(
table_spec,
schema=table_schema,
write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND,
create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED)
添加回答
举报