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();