2017-08-30 87 views
0

今晚我的一个批处理作业失败,出现运行时异常。它将数据写入数据存储区,就像今天晚上运行的其他200个作业一样。这一次失败的原因很长,其根源应该是这样的:Google Dataflow将不足的数据写入数据存储区

Caused by: com.google.datastore.v1.client.DatastoreException: I/O error, code=UNAVAILABLE 
    at com.google.datastore.v1.client.RemoteRpc.makeException(RemoteRpc.java:126) 
    at com.google.datastore.v1.client.RemoteRpc.call(RemoteRpc.java:95) 
    at com.google.datastore.v1.client.Datastore.commit(Datastore.java:84) 
    at com.google.cloud.dataflow.sdk.io.datastore.DatastoreV1$DatastoreWriterFn.flushBatch(DatastoreV1.java:925) 
    at com.google.cloud.dataflow.sdk.io.datastore.DatastoreV1$DatastoreWriterFn.processElement(DatastoreV1.java:892) 
Caused by: java.io.IOException: insufficient data written 
    at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.close(HttpURLConnection.java:3501) 
    at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:81) 
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:981) 
    at com.google.datastore.v1.client.RemoteRpc.call(RemoteRpc.java:87) 
    at com.google.datastore.v1.client.Datastore.commit(Datastore.java:84) 
    at com.google.cloud.dataflow.sdk.io.datastore.DatastoreV1$DatastoreWriterFn.flushBatch(DatastoreV1.java:925) 
    at com.google.cloud.dataflow.sdk.io.datastore.DatastoreV1$DatastoreWriterFn.processElement(DatastoreV1.java:892) 
    at com.google.cloud.dataflow.sdk.util.SimpleDoFnRunner.invokeProcessElement(SimpleDoFnRunner.java:49) 
    at com.google.cloud.dataflow.sdk.util.DoFnRunnerBase.processElement(DoFnRunnerBase.java:139) 
    at com.google.cloud.dataflow.sdk.runners.worker.SimpleParDoFn.processElement(SimpleParDoFn.java:188) 
    at com.google.cloud.dataflow.sdk.runners.worker.ForwardingParDoFn.processElement(ForwardingParDoFn.java:42) 
    at com.google.cloud.dataflow.sdk.runners. 

这是怎么发生的?这与我运行的所有其他工作非常相似。我使用的是数据流,版本1.9.0和标准DatastoreIO.v1()写....

与此错误消息的jobIds:

2017-08-29_17_05_19-6961364220840664744

2017-08-29_16_40_46-15665765683196208095

是否有可能检索错误/从外部应用程序作业日志(不是云控制台)来自动能够重新开始工作,如果他们通常会成功,因q而失败问题或其他原因是暂时的? 在此先感谢

+1

我会调查工作。有可能连接到数据存储或类似的只是一个暂时的问题。您可以使用数据流的命令行界面检查作业的失败/成功状态,这应该使您能够列出作业并查询其状态。 https://cloud.google.com/dataflow/pipelines/dataflow-command-line-intf –

+0

我重试了这些工作,但不幸的是,他们抛出了相同的例外。这很奇怪,因为如上所述,它们与大约100个全部成功运行的其他作业类似。我会检查这些工作的输入数据是否与其他工作有奇怪的不同。在此先感谢您的帮助@LaraSchmidt 重试的JobIds:2017-08-30_05_31_24-7610218350337775734 和2017-08-30_05_33_22-3164534937414554703 – user2122552

回答

0

这很可能是因为DatastoreIO正试图在一次RPC调用中写入比Datastore RPC大小限制允许的更多突变。这与数据有关 - 假设此作业的数据与其他作业的数据有所不同。无论如何:2.1.0版中的was fixed这个问题 - 更新SDK应该会有所帮助。

相关问题