Mic*_*hał 1 java google-cloud-dataflow tinkerpop3 apache-beam janusgraph
我有一个简单的任务。我有一堆文件( ~100GB in total )
,每一行代表一个实体。我必须将此实体发送到 JanusGraph 服务器。
2018-07-07_05_10_46-8497016571919684639 <- job id
Run Code Online (Sandbox Code Playgroud)
一段时间后,我遇到 OOM,日志显示 Java 被杀死。
从数据流视图中,我可以看到以下日志:
Workflow failed. Causes: S01:TextIO.Read/Read+ParDo(Anonymous)+ParDo(JanusVertexConsumer) failed., A work item was attempted 4 times without success. Each time the worker eventually lost contact with the service. The work item was attempted on:
从堆栈驱动程序视图中,我可以看到: https: //www.dropbox.com/s/zvny7qwhl7hbwyw/Screenshot%202018-07-08%2010.05.33.png ?dl=0
日志显示:
E Out of memory: Kill process 1180 (java) score 1100 or sacrifice child
E Killed process 1180 (java) total-vm:4838044kB, anon-rss:383132kB, file-rss:0kB
更多信息请参见:https ://pastebin.com/raw/MftBwUxs
我怎样才能调试发生了什么?
目前无法调试该问题的信息太少,因此我提供有关 Dataflow 的一般信息。
name
感兴趣的 -> 右上角(错误+日志)。如果您无法解决问题,请使用错误信息更新帖子。
更新
根据超出截止日期的错误和您共享的信息,我认为您的工作因内存耗尽而“受到洗牌”。根据本指南:
考虑以下行动方案之一或组合:
- 添加更多工人。运行管道时,尝试将 --numWorkers 设置为更高的值。
- 增加工作人员附加磁盘的大小。运行管道时,尝试将 --diskSizeGb 设置为更高的值。
- 使用 SSD 支持的永久磁盘。运行管道时尝试设置 --workerDiskType="compute.googleapis.com/projects//zones//diskTypes/pd-ssd" 。
更新2
对于特定的 OOM 错误,您可以使用:
--saveHeapDumpsToGcsPath=gs://<path_to_a_gcs_bucket>
将导致堆转储在下次工作进程重新启动时上传到配置的 GCS 路径。这使得下载转储文件进行检查变得容易。确保运行作业的帐户对存储桶具有写入权限。请考虑到堆转储支持会产生一些开销,并且转储可能非常大。这些标志只能用于调试目的,并且对于生产作业始终禁用。
查找有关DataflowPipelineDebugOptions 方法的其他参考。
更新3
我没有找到与此相关的公共文档,但我测试了 Dataflowheap JVM size
随机器类型 ( workerMachineType
) 进行缩放,这也可以解决您的问题。我是 GCP 支持人员,因此我提交了两份文档请求(一份针对描述页面,另一份针对数据流故障排除页面)来更新文档以介绍此信息。
另一方面,您可能会发现这个相关的功能请求很有用。为其加注星标以使其更加明显。
归档时间: |
|
查看次数: |
1758 次 |
最近记录: |