Google cloud bigtable Google Bigtable导出失败,返回java.lang.NoSuchMethodError

Google cloud bigtable Google Bigtable导出失败,返回java.lang.NoSuchMethodError,google-cloud-bigtable,Google Cloud Bigtable,我正在尝试使用这个过程: 导出我的Bigtable进行迁移 我使用的是谷歌云Shell,从谷歌云平台仪表板开始。 这是Debian GNU/Linux 9.4(stretch)。 java版本报告openjdk版本“1.8.0_171” 似乎并没有一个更晚的jre随时可用(即在apt get中) 我这样说: java -jar bigtable-beam-import-1.3.0-shaded.jar export \ --runner=dataflow \ --project=xx-may23

我正在尝试使用这个过程: 导出我的Bigtable进行迁移

我使用的是谷歌云Shell,从谷歌云平台仪表板开始。 这是Debian GNU/Linux 9.4(stretch)。
java版本报告openjdk版本“1.8.0_171”
似乎并没有一个更晚的jre随时可用(即在apt get中)

我这样说:

java -jar bigtable-beam-import-1.3.0-shaded.jar export \
--runner=dataflow \
--project=xx-may23 \
--bigtableInstanceId=xx0523\
--bigtableTableId=test1 \
--destinationPath=gs://xx0523/test1 \
--tempLocation=gs://xx0523/tmp2 \
--maxNumWorkers=3 \
--zone=us-east4-a
最终,会出现以下错误:

ERROR MonitoringUtil$LoggingHandler:101 - 2018-05-26T02:10:55.387Z: 
java.lang.NoSuchMethodError: 
java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer;
at com.google.cloud.bigtable.beam.sequencefiles.SequenceFileSink$OutputStreamWrapper.write(SequenceFileSink.java:214)
at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(FSDataOutputStream.java:58)
at java.io.DataOutputStream.write(DataOutputStream.java:107)
at java.io.FilterOutputStream.write(FilterOutputStream.java:97)
at org.apache.hadoop.io.SequenceFile$Writer.writeFileHeader(SequenceFile.java:1145)
at org.apache.hadoop.io.SequenceFile$Writer.init(SequenceFile.java:1214)
at org.apache.hadoop.io.SequenceFile$Writer.<init>(SequenceFile.java:1091)
at org.apache.hadoop.io.SequenceFile$BlockCompressWriter.<init>(SequenceFile.java:1441)
at org.apache.hadoop.io.SequenceFile.createWriter(SequenceFile.java:274)
at com.google.cloud.bigtable.beam.sequencefiles.SequenceFileSink$SeqFileWriter.prepareWrite(SequenceFileSink.java:157)
at org.apache.beam.sdk.io.FileBasedSink$Writer.open(FileBasedSink.java:939)
at org.apache.beam.sdk.io.WriteFiles$WriteUnshardedTempFilesWithSpillingFn.processElement(WriteFiles.java:503)
错误监控直到$LoggingHandler:101-2018-05-26T02:10:55.387Z:
java.lang.NoSuchMethodError:
position(I)Ljava/nio/ByteBuffer;
在com.google.cloud.bigtable.beam.sequencefiles.SequenceFileLink$OutputStreamWrapper.write(SequenceFileLink.java:214)上
位于org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(FSDataOutputStream.java:58)
在java.io.DataOutputStream.write(DataOutputStream.java:107)处
在java.io.FilterOutputStream.write(FilterOutputStream.java:97)
位于org.apache.hadoop.io.SequenceFile$Writer.writeFileHeader(SequenceFile.java:1145)
位于org.apache.hadoop.io.SequenceFile$Writer.init(SequenceFile.java:1214)
位于org.apache.hadoop.io.SequenceFile$Writer。(SequenceFile.java:1091)
位于org.apache.hadoop.io.SequenceFile$BlockCompressWriter。(SequenceFile.java:1441)
位于org.apache.hadoop.io.SequenceFile.createWriter(SequenceFile.java:274)
位于com.google.cloud.bigtable.beam.sequencefiles.SequenceFileLink$SeqFileWriter.prepareWrite(SequenceFileLink.java:157)
位于org.apache.beam.sdk.io.FileBasedSink$Writer.open(FileBasedSink.java:939)
位于org.apache.beam.sdk.io.WriteFiles$writeunsharedtempfileswithspillingfn.processElement(WriteFiles.java:503)

这似乎是一个java版本兼容性问题。如何修复它?

我在遵循文档时遇到了完全相同的问题。导航到maven存储库,我意识到有一个更新的版本,1.4.0,您可以找到。使用文档中给出的命令调用新jar进展顺利,任务成功。

在api中,谷歌方面似乎存在问题。试试这个:
curl-f-Ohttp://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-beam-import/1.2.0/bigtable-beam-import-1.2.0-shaded.jar
,然后继续本教程的其余部分。如果问题解决了,那就是谷歌的问题。如果不是这样,您在遵循说明或参数的某个地方犯了错误,这是很有帮助的。使用GoogleCloudShell,我现在可以使用jar文件的1.1.0或1.2.0版本从BigTable导出。版本1.3.0始终失败。在cloud shell中运行重复测试时,我使用向上箭头键重复前面的命令,并且只编辑jar文件的版本号以及我的bucket上临时文件夹和导出文件夹的位置。也就是说,我只做了尽可能小的修改,以免引入新的错误。(根据教程说明,临时文件夹和导出文件夹以前不得存在,因此每次新测试我只需将数字增加1。)使用V1.2.0是一个很好的测试变通方法。其他人可能仍然想知道如何让V1.3.0在Cloud Shell中工作。很高兴听到这个结果。我在建议时查阅了1.2版,最后一次编辑是在2018年2月。因此,我假设1.3仍在进行一些更改,并出现了一些错误。你应该在他们的git回购或jira上提出问题。但很高兴你提出了这个问题,至少他们现在会成为这个问题存在的地方:)