1

Я пытаюсь подключиться к экземпляру Google Cloud Bigtable с использованием API-интерфейсов HBase. Я использую Java 1.8. Я последовал за следующие учебные пособия:Не удалось подключиться к экземпляру Google Cloud Bigtable

https://cloud.google.com/bigtable/docs/samples-java-hello https://cloud.google.com/bigtable/docs/using-maven

Но по какой-то причине я не могу подключиться к этому Bigtable экземпляру. Я использую действительные идентификаторы ProjectID и InstanceID, но все же я не могу подключиться. Пожалуйста, найдите исключение ниже:

java.lang.IllegalStateException: Could not find an appropriate constructor for com.google.cloud.bigtable.hbase1_2.BigtableConnection 
    at com.google.cloud.bigtable.hbase.BigtableConfiguration.connect(BigtableConfiguration.java:88) 
    at com.google.cloud.bigtable.hbase.BigtableConfiguration.connect(BigtableConfiguration.java:72) 
    at com.kp.sensor.iot.IOTSensorPull.makeConnection(IOTSensorPull.java:149) 
    at com.kp.sensor.iot.IOTSensorPull.populateTemperature(IOTSensorPull.java:159) 
    at com.kp.sensor.iot.IOTSensorPull.readMessagesFromRFIDSub(IOTSensorPull.java:126) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65) 
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) 
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at com.google.cloud.bigtable.hbase.BigtableConfiguration.connect(BigtableConfiguration.java:85) 
    ... 18 more 
Caused by: java.lang.NoSuchMethodError: com.google.cloud.bigtable.config.BigtableOptions$Builder.setInstanceId(Ljava/lang/String;)Lcom/google/cloud/bigtable/config/BigtableOptions$Builder; 
    at com.google.cloud.bigtable.hbase.BigtableOptionsFactory.fromConfiguration(BigtableOptionsFactory.java:244) 
    at org.apache.hadoop.hbase.client.AbstractBigtableConnection.<init>(AbstractBigtableConnection.java:129) 
    at org.apache.hadoop.hbase.client.AbstractBigtableConnection.<init>(AbstractBigtableConnection.java:104) 
    at com.google.cloud.bigtable.hbase1_2.BigtableConnection.<init>(BigtableConnection.java:50) 

Ниже приведен мои зависимости Maven:

<dependency> 
    <groupId>com.google.cloud.bigtable</groupId> 
    <artifactId>bigtable-hbase-1.2</artifactId> 
    <version>0.9.4</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.hbase</groupId> 
    <artifactId>hbase-client</artifactId> 
    <version>1.1.5</version> 
</dependency> 

<dependency> 
    <groupId>io.netty</groupId> 
    <artifactId>netty-tcnative-boringssl-static</artifactId> 
    <version>1.1.33.Fork19</version> 
</dependency> 

Есть другая зависимость, а так как это приложение Spring-загрузка.

Также в этом случае идентификаторы ProjectID и InstanceID имеют одинаковое значение.

Может кто-нибудь, пожалуйста, дайте мне знать, что может быть проблемой здесь?

+1

Я видел такого рода вещи происходит, когда существует несколько противоречивых версий bigtable- * артефактов на пути к классам. Может быть, проблема в вашем случае? –

ответ

1

Для чего это стоит моя версия для org.apache.hbase 1.2.4 Также я подозреваю, что, поскольку ваш идентификатор проекта равен идентификатору экземпляра, вы имеете в виду псевдоним ProjectID, а не фактическое базовое имя, поскольку Я думаю, что он автоматически назначается? У меня были проблемы в другом месте, где используется псевдоним Project, по-видимому, Google, похоже, ожидает базовый идентификатор. Но глядя на исключения, похоже, проблема не в том, что ...

1

На самом деле, я думаю, я нашел еще одну причину этого, что, вероятно, более актуально: я заметил, что когда bigtable-hbase-1.2-0.9.4.jar не находится точно в исходном пути '/com/google/cloud/bigtable/bigtable-hbase-1.2/0.9.4/bigtable-hbase-1.2-0.9.4.jar', эта проблема будет возникать, поскольку код кажется для проверки номера версии 1.2 (в зависимости от родительской папки?)

В моем случае это, по-видимому, связано конкретно с частью Bigtable-Dataflow API, а НЕ с общим API Bigtable (то есть bigtable-hbase -dataflow в POM.xml). Общая часть Bigtable API, похоже, не заботится о том, где находится JAR.

Я столкнулся с этим во время тестирования на виртуальных машинах Google, где я просто сбросил все JAR только в один каталог. Он отлично работал для универсальной функциональности Bigtable, но НЕ для функций Bigtable-Dataflow, хотя он работал на моей локальной машине, где Eclipse правильно создавал все пути зависимостей перед запуском кода. Как только я положил это .JAR на правильный путь, проблема исчезла.

Я предполагаю, что осложнение исходит откуда-то здесь?
https://github.com/GoogleCloudPlatform/cloud-bigtable-client/blob/master/bigtable-hbase-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/BigtableConfiguration.java#L43

куб.см: @ соломонова duskis

+0

В экосистеме потока данных есть ошибка. Можно указать только один из bigtable-hbase-dataflow и bigtable-hbase- *. Другими словами, если вам нужен поток данных, удалите с вашего пути баннеры bigtable-hbase- *. –