Java 数据流&x2B;数据存储=数据存储异常:I/O错误

Java 数据流&x2B;数据存储=数据存储异常:I/O错误,java,google-cloud-platform,google-cloud-datastore,google-cloud-dataflow,Java,Google Cloud Platform,Google Cloud Datastore,Google Cloud Dataflow,我正在尝试使用com.google.cloud.DataStore从数据流写入数据存储 我的代码如下所示(受[1]中示例的启发): 我得到了这个错误: exception: "java.lang.RuntimeException: com.google.cloud.dataflow.sdk.util.UserCodeException: com.google.cloud.datastore.DatastoreException: I/O error at com.google.cloud.dat

我正在尝试使用
com.google.cloud.DataStore
从数据流写入数据存储

我的代码如下所示(受[1]中示例的启发):

我得到了这个错误:

exception: "java.lang.RuntimeException: com.google.cloud.dataflow.sdk.util.UserCodeException: com.google.cloud.datastore.DatastoreException: I/O error
at com.google.cloud.dataflow.sdk.runners.worker.SimpleParDoFn$1.output(SimpleParDoFn.java:162)
at com.google.cloud.dataflow.sdk.util.DoFnRunnerBase$DoFnContext.sideOutputWindowedValue(DoFnRunnerBase.java:314)
at com.google.cloud.dataflow.sdk.util.DoFnRunnerBase$DoFnProcessContext.sideOutput(DoFnRunnerBase.java:470)
at com.google.cloud.dataflow.sdk.transforms.Partition$PartitionDoFn.processElement(Partition.java:172)
我曾尝试使用
DatastoreIO
sink,但流式运行程序目前似乎不支持它

我怎样才能避免这个错误呢?或者,从数据流写入数据存储的最佳方式是什么


[1]

根据@Sam McVeety的建议,我试图将我的数据存储代码隔离在数据流之外。我确实犯了同样的错误

但这也让我看到了异常的原因,我在数据流日志中没有看到:

Caused by: java.net.ConnectException: Connection refused
线索就在我使用的导入行中:
com.google.cloud.datastore.testing.LocalDatastoreHelper

它是测试的助手,可以在本地模拟数据存储API。哎呀

这是我经过一些本地调试后得到的代码:

public void processElement(ProcessContext c) {
    final Datastore datastore = DatastoreOptions.defaultInstance().service();
    final KeyFactory keyFactory = datastore.newKeyFactory().kind("Task");

    Key key = datastore.allocateId(keyFactory.newKey());
    Entity task = Entity.builder(key)
        .set("description", StringValue.builder(":D").excludeFromIndexes(true).build())
        .set("created", DateTime.now())
        .set("done", false)
        .build();
    datastore.put(task);
}
主要区别在于:

LocalDatastoreHelper.create(1.0).options().toBuilder().namespace("ghijklmnop").build().service()
变成

DatastoreOptions.defaultInstance().service();

您是否可能看到类似的问题?您是否验证了代码与数据存储正常交互,与数据流无关?
DatastoreOptions.defaultInstance().service();