【发布时间】:2020-06-24 13:41:44
【问题描述】:
我的团队正在考虑使用 2 种不同的方法在实例之间迁移 Janusgraph 数据(我们在 Google Cloud BigTable 之上使用 Janusgraph):
- 将图形导出为
graphml文件,然后将其导入到另一个实例中 - 导出底层
BigTable表,并将其导入到另一个实例底层的表中
但是,对于每种方法,我们都面临问题:
- 我们的图表非常庞大,在导出过程中,我们一直面临
java.io.IOException: Connection reset by peer问题,即使在将 gremlin 服务器超时设置为超过 20 分钟后也是如此 - 我们尝试通过
Cloud Dataflow以3 种不同的格式导出BigTable表(如here 建议的那样),但都面临不同的问题:-
Avro格式:导出avro文件后,将它们重新导入新表时,我们会遇到以下错误:Error message from worker: java.io.IOException: At least 8 errors occurred writing to Bigtable. First 8 errors: Error mutating row ( ;�! with mutations [set cell ....] .... Caused by: java.lang.NullPointerException- 因为Janusgraph将二进制数据存储到BigTable,所以数据流作业可能是无法正确导出avro文件 -
SequenceFile格式:重新导入这些文件时,我们会遇到以下错误:Error message from worker: org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed 310 actions: StatusRuntimeException: 310 times, servers with issues: batch-bigtable.googleapis.com -
Parquet格式:这被证明是最有希望的,并且导入工作大部分已完成(除了在缩小dataflow工人Root cause: The worker lost contact with the service.期间看到的错误)。重新导入到目标表时,数据通常是完整的。但是,导入后索引似乎“古怪”(例如,在索引属性上使用has()过滤器查询特定节点时,查询很快完成,但不返回任何结果)
-
感谢您对上述问题的任何意见/投入,谢谢!
【问题讨论】:
-
为了解决任何架构错误,您是否尝试过创建一个新实例,从您的生产表中写入一些元素并尝试导入它们?
-
另外,如果你能够成功导入“测试环境”,你可以编写一个脚本来执行你的数据并以多块而不是大块的形式导入
-
@Emmanuel 我意识到在数据流作业中,由于处理的文件的突变太多,出现了突变错误:
Could not complete RPC. Failure #0, got: Status{code=INVALID_ARGUMENT, description=Too many mutations: 119306 provided; limit 100000, cause=null} on channel 1. Trailers: Metadata(bigtable-channel-id=1)。有没有办法增加这个 100k 突变限制?我已经尝试增加分片的数量以减小文件大小(如果相关的话),但仍然有问题。
标签: janusgraph google-cloud-bigtable