2017-08-30 4 views
0

Un de mes travaux par lots ce soir a échoué avec une exception d'exécution. Il écrit Data to Datastore comme 200 autres travaux en cours ce soir. Celui-ci a échoué avec une très longue liste des causes auf, la racine de celui-ci devrait être ceci:Google Dataflow n'a pas écrit suffisamment de données dans la banque de données

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. 

Comment cela peut-il arriver? C'est très semblable à tous les autres travaux que je dirige. J'utilise le flux de données-version 1.9.0 et la norme DatastoreIO.v1() écrire ....

Les jobids avec ce message d'erreur:.

2017-08-29_17_05_19-6961364220840664744

2017-08-29_16_40_46-15665765683196208095

Est-il possible de récupérer les erreurs/logs d'un travail à partir d'une application externe (console non cloud) pour être automatiquement en mesure de relancer les travaux, si elles habituellement réussir et échouer à cause de q uota-questions ou d'autres raisons qui sont temporaires? Merci d'avance

+1

Je vais étudier les tâches. Il est possible qu'il n'y ait eu qu'un problème transitoire lié à la banque de données ou similaire. Vous pouvez vérifier l'état d'échec/de réussite des tâches à l'aide de l'interface de ligne de commande pour le flux de données, ce qui devrait vous permettre de répertorier les tâches et d'interroger leur état. https://cloud.google.com/dataflow/pipelines/dataflow-command-line-intf –

+0

J'ai réessayé ces Jobs, mais malheureusement ils ont lancé les mêmes exceptions. C'est étrange car comme indiqué ci-dessus, ils sont similaires à ~ 100 autres travaux tous couronnés de succès. Je vais vérifier si les données d'entrée pour ces travaux diffèrent étrangement du reste. Merci d'avance pour votre aide @LaraSchmidt Les nouvelles JobIds: 2017-08-30_05_31_24-7610218350337775734 et 2017-08-30_05_33_22-3164534937414554703 – user2122552

Répondre

0

Ceci est probablement dû au fait que DatastoreIO essaie d'écrire plus de mutations dans un appel RPC que la limite de taille de Datastore RPC le permet. Cela dépend des données - supposons que les données pour ce travail diffèrent quelque peu des données pour d'autres tâches. En tout cas: ce numéro was fixed dans 2.1.0 - mise à jour de votre SDK devrait aider.